현재 위치: > 최신 기사 목록> CDN 시나리오에서 get_client_version 사용을 사용하면 장치 정보를 잘못 판단하기가 쉽습니다.

CDN 시나리오에서 get_client_version 사용을 사용하면 장치 정보를 잘못 판단하기가 쉽습니다.

gitbox 2025-05-29

최신 웹 애플리케이션에서는 CDN (Content Distribution Network)을 사용하여 리소스로드를 가속화하는 것이 점점 일반화되고 있습니다. CDN은 캐시 된 컨텐츠로 로딩 속도를 높이고 전 세계 서버에 배포 할 수 있습니다. 그러나 경우에 따라 CDN은 특히 클라이언트 장치 정보를 식별 할 때 일부 문제를 일으킬 수 있습니다.

get_client_version 함수 소개

get_client_version 함수는 일반적으로 클라이언트의 버전 정보, 특히 터미널 장치 유형 또는 버전 번호를 판단 해야하는 시나리오에서 얻는 데 사용됩니다. 이 기능은 일반적으로 요청 된 HTTP 헤더 또는 URL의 일부 정보를 기반으로 장치의 유형 또는 버전을 결정합니다.

다음과 같이 PHP 기능이 있다고 가정합니다.

 function get_client_version() {
    // 사용자 에이전트를 얻으십시오
    $user_agent = $_SERVER['HTTP_USER_AGENT'];
    
    // 사용자 에이전트를 기반으로 장치 버전을 판단하고 싶다고 가정합니다.
    if (strpos($user_agent, 'Android') !== false) {
        return 'Android Version 10';
    } elseif (strpos($user_agent, 'iPhone') !== false) {
        return 'iPhone Version 12';
    } else {
        return 'Unknown Device';
    }
}

위의 예에서 get_client_version 함수는 $ _server [ 'http_user_agent']를 통해 클라이언트의 사용자 에이전트 정보를 얻어 장치 유형에 대한 판단을합니다.

CDN이 왜 잘못 판단 할 수 있습니까?

정상적인 상황에서 Get_client_version 함수는 HTTP에서 요청한 사용자 에이전트를 통해 장치 정보를 얻습니다. 그러나 웹 애플리케이션이 CDN 환경에 배포 될 때 다음과 같은 문제가 발생하여 장치 식별의 편견이 발생할 수 있습니다.

  1. 캐싱 문제
    CDN은 정적 리소스를 캐시하고 로컬 서버에 배포합니다. 경우에 따라 CDN은 요청 헤더의 사용자 에이전트 정보를 캐시합니다. 다른 터미널이 동일한 리소스를 요청하면 CDN은 캐시 된 응답을 반환 할 수 있으며이 응답의 사용자 에이전트 정보는 실제 요청 된 터미널 장치와 일치하지 않습니다. 결과적으로 get_client_version 함수는 클라이언트의 장치를 잘못 판단 할 수 있습니다.

  2. CDN의 프록시 레이어
    CDN 서버는 일반적으로 프록시 역할을하여 원래 요청을 백엔드 서버로 전달합니다. 이 프로세스에서 CDN의 프록시 서버는 때때로 요청 헤더를 수정하거나 사용자 에이전트 와 같은로드 밸런싱 정책에 따라 일부 정보를 수정합니다. get_client_version 함수가 잘못된 장치 정보를 얻게됩니다.

  3. IP 주소의 영향 <br> 때로는 CDN이 IP 주소를 기반으로 요청 소스를 결정한 다음 장치 유형을 결정합니다. 그러나 CDN은 일반적으로 다른 서버에 요청을 배포하기 때문에 그러한 판단은 정확하지 않을 수 있습니다. 특히 동일한 IP 주소 요청이 다른 터미널에서 나오는 경우 CDN은 실수로 동일한 장치라고 생각하여 버전 결정에 영향을 미칩니다.

잘못 판단을 피하는 방법은 무엇입니까?

CDN 환경에서 get_client_version 함수를 사용할 때 터미널 장치를 잘못 판단하지 않으려면 다음 방법을 고려할 수 있습니다.

  1. 캐시 비활성화 <br> 장치 정보를 얻으려면 CDN 캐시를 피하십시오. 이는 특정 캐시 정책 (캐시 비활성화, 캐시 헤더 추가 등)을 설정하여 달성 할 수 있습니다. 이러한 방식으로 CDN은 백엔드에 매번 최신 장치 정보를 얻도록 요청합니다.

  2. 실제 클라이언트 요청 헤더 <br>을 확인하십시오 x-forwarded-for 와 같은 헤더 필드를 사용하여 CDN 프록시 레이어에 의해 수정 된 요청 헤더 대신 터미널에 가장 가까운 원래 요청 정보가 얻어야합니다.

  3. JavaScript를 사용하여 장치 정보를 얻으십시오 <br> 경우에 따라 서버 측 사용자 에이전트 에 의존하는 대신 JavaScript를 통해 클라이언트에서 장치 정보를 얻을 수 있습니다. 이것은 CDN 층의 간섭을 피할 수 있습니다. JavaScript를 통해 장치 정보를 얻기위한 예제 코드는 다음과 같습니다.

     var deviceInfo = navigator.userAgent;
    console.log(deviceInfo); // 출력 장치User-Agent정보
    

    그런 다음이 정보는 서버로 다시 전달되어 서버가 장치를 올바르게 식별 할 수 있도록합니다.

  4. 동적 요청 <br> 정확한 장치 정보가 필요한 함수의 경우, get_client_version 함수는 CDN을 통해 캐시 된 정적 자원 대신 별도의 요청에 배치 할 수 있습니다. 이로 인해 장치 정보 수집 프로세스가보다 정확하고 역동적입니다.

결론

CDN 환경에서 get_client_version 함수는 캐시 및 프록시 레이어 간섭과 같은 요인에 의해 영향을받을 수있어 터미널 장치가 잘못 판단됩니다. 이를 피하기 위해 개발자는 캐시 비활성화, 원래 요청 헤더 획득을 보장하고 JavaScript를 사용하여 장치 식별의 정확성을 보장하기 위해 장치 정보를 얻을 수있는 메소드를 사용할 수 있습니다. 이러한 최적화를 통해 터미널 장비 정보를 정확하게 획득하고 사용자 경험을 향상시킬 수 있습니다.