Accept-Language 축소는 Accept-Language
헤더에서 사용자의 언어 환경설정을 줄이고 사용자가 가장 선호하는 언어 (하나만)만 전송하여 패시브 디지털 지문 수집 노출 영역을 줄이기 위한 노력입니다.
Chrome 109 베타부터 사이트에서 축소된 Accept-Language
헤더 수신을 선택할 수 있도록 Accept-Language 축소를 위한 개발자용 체험판이 제공됩니다. 이렇게 하면 향후 출시에서 축소된 Accept-Language
가 Chrome의 기본 동작이 되기 전에 사이트에서 문제를 발견하고 해결할 수 있습니다. 안정적인 사용자층에 출시하기 전에 이 기능을 테스트하려면 Chrome 109 출시일 (현재 2023년 1월 10일로 예정) 전에 선택하고 테스트해야 합니다.
아래에서 축소 전후의 Accept-Language
헤더 예시를 확인하세요.
Accept-Language: en-GB,en;q=0.9,de;q=0.8,fr;q=0.7
Accept-Language: en-GB
다음은 출처 무료 체험판 및 기대할 수 있는 사항에 대한 개요입니다. 이 변경사항 또는 오리진 트라이얼 중에 발생한 문제에 관한 의견은 Accept-Language Reduction GitHub 저장소에서 공유할 수 있습니다.
Accept-Language란 무엇인가요?
Accept-Language 문자열은 모든 HTTP 요청에서 공유되며 브라우저에서 로드한 모든 리소스에 JavaScript로 노출됩니다. 현재 사용자의 모든 선호 언어가 포함되어 있습니다.
Accept-Language가 줄어드는 이유는 무엇인가요?
Accept-Language 축소는 Chrome에서 수동 지문 식별 노출 영역을 줄이기 위한 노력의 일환입니다.
현재 Accept-Language
헤더는 모든 HTTP 요청에서 기본적으로 공유되며 브라우저에서 로드한 모든 리소스에 JavaScript로 노출됩니다. 여기에는 사용자의 모든 언어 환경설정이 포함됩니다. 사이트에서 다국어 콘텐츠를 제공하려는 경우 브라우저가 사용자가 구성한 전체 언어 목록을 전송하는 대신 사이트에서 다국어 콘텐츠를 표시하는 새로운 방법을 도입하고 브라우저가 언어 협상을 수행하고 선호 언어를 표시합니다.
또 다른 이유는 많은 사이트에서 언어 협상을 위해 Accept-Language
헤더를 전혀 사용하지 않을 수 있기 때문입니다 (예: 한 연구에 따르면 상위 10,000개 사이트 중 7.2% 만 Accept-Language
를 사용함). Chrome 시크릿 모드에서는 이미 Accept-Language
를 1개로 줄였습니다.
웹 개발자에게 미치는 영향
Accept-Language
를 사용하여 언어 협상을 진행하는 사이트는 감소된 Accept-Language
를 수신할 준비를 하고 출처 무료 체험에 참여하는 것을 고려해야 합니다. 줄어든 Accept-Language
값은 다음에 표시됩니다.
Accept-Language
HTTP 요청 헤더navigator.languages
JavaScript getter입니다.
브라우저는 언어 협상을 담당하여 사이트에 전송할 사용자의 기본 언어를 선택합니다. 이를 위해 사이트는 응답 헤더에 두 헤더 Variants
(새 헤더는 언어를 지원하는 사이트를 나타냄) Accept-Language
및 Content-Language
를 추가해야 합니다 (아래의 자세한 예 참고).
축소된 Accept-Language
요금제에는 현재 iOS 및 WebView가 포함되지 않으며 이러한 플랫폼에서는 계속해서 사용자의 전체 Accept-Language
목록을 가져옵니다.
이러한 플랫폼은 향후 지원할 예정입니다.
Accept-Language 축소를 위한 오리진 트라이얼
출처 무료 체험판을 사용하려면 참여 사이트에서 응답에 브라우저에 지정된 무료 체험판을 사용 설정하라는 토큰을 제공해야 합니다. 그러나 이는 브라우저가 사이트에 대한 초기 요청 시 사이트가 출처 체험판에 참여하고 있는지 알 수 없다는 의미입니다. 즉, 세션의 초기 요청은 축소된 Accept-Language header
를 전송하지 않습니다.
이 페이지의 하위 리소스에 대한 요청(동일 출처 및 교차 출처 모두)에는 축소된 Accept-Language
헤더가 수신됩니다. 후속 동일 출처 탐색도 축소된 Accept-Language
헤더를 수신합니다. 교차 출처 탐색은 전체 헤더를 전송하는 것으로 되돌아갑니다. 반면 페이지 내 교차 출처 요청 (예: 서드 파티 iframe 요청)은 최상위 프레임 요청에 유효한 출처 체험판 토큰이 있는 경우에도 축소된 Accept-Language
헤더를 계속 전송합니다.
이는 사용자 에이전트 축소 오리진 트라이얼과 유사하며 내부 Chromium 구현에 관해 자세히 알아보려면 Reduce Accept-Language HTTP 헤더 구현을 참고하세요.
Accept-Language 축소 오리진 트라이얼 참여하기
Chrome 오리진 트라이얼 시작하기에서 자세한 안내를 확인할 수 있지만, 필수 단계는 아래와 같습니다.
1단계
원본 체험판에 등록하고 도메인 토큰을 받으려면 Accept-Language 축소 체험판 페이지를 방문하세요.
2단계
HTTP 응답 헤더를 업데이트합니다.
- HTTP 응답 헤더에
Origin-Trial: <ORIGIN TRIAL TOKEN>
를 추가합니다. 여기서 <ORIGIN TRIAL TOKEN
>에는 출처 체험판을 등록할 때 받은 토큰이 포함됩니다. - HTTP 응답 헤더에
Content-Language
를 추가하여 잠재고객을 위한 언어를 나타냅니다. - HTTP 응답 헤더에
Variants
를 추가하여 사이트에서 지원하는 언어를 나타냅니다. - [선택사항] HTTP 응답에
Vary: Accept-Language
를 추가하여 콘텐츠 협상을 위한 캐시 키를 만듭니다. - 이러한 헤더를 설정하면 지정된 출처에 대해서만 브라우저 언어 협상 (초기 요청의 잠재적 재시작)이 트리거됩니다. 사이트에서 사용자에게 올바른 언어 표현을 표시하려면 사용자의 Accept-Language 헤더를 기반으로 콘텐츠를 전송하는 사이트도 업데이트해야 합니다 (아래 예 참고).
3단계
Chrome M109 베타 (이상)에서 웹사이트를 로드하고 축소된 Accept-Language 문자열을 수신하기 시작합니다.
Accept-Language Reduction GitHub 저장소에 문제나 의견을 제출하세요.
데모
출처 체험판을 선택한 다국어 사이트(소스 코드 포함)의 데모는 https://reduce-accept-language.glitch.me/를 참고하세요.
소스 코드와 함께 출처 체험판 선택 및 선택 해제 데모를 보려면 https://reduce-accept-language-ot.glitch.me/를 참고하세요.
예를 들어 example.com
는 ja
(일본어) 및 en
(영어)를 지원합니다. 요청은 다음과 같은 유형일 수 있습니다.
GET / HTTP/1.1
Host: example.com
Accept-Language: en
사이트는 사용자의 accept-language를 기반으로 사용자가 영어로 된 콘텐츠를 선호한다는 것을 알고 있습니다. 응답 헤더에는 다음이 포함될 수 있습니다.
HTTP/1.1 200 OK
Content-Language: en
Variants: Accept-Language=(en ja)
Origin-Token: a-valid-token
사용자가 일본어 콘텐츠를 선호하는 경우 요청은 다음과 같습니다.
GET / HTTP/1.1
Host: example.com
Accept-Language: ja
이 경우 사이트는 일본어 콘텐츠의 헤더로 응답합니다.
HTTP/1.1 200 OK
Content-Language: ja
Variants: Accept-Language=(en ja)
Origin-Token: a-valid-token
서버 측에서 사이트가 특정 언어 지원을 찾고 있지만 지원이 감지되지 않으면 기본값으로 대체할 수 있습니다.
if(accept_language == 'ja') {
res.response('ja_page')
}
else {
res.response('en_page')
}
위 예에서 example.com
는 Accept-Language
값에 따라 en
또는 ja
로 응답하며, 일치하는 값이 없으면 기본적으로 en
로 설정됩니다. 이 경우 사이트는 Accept-Language
값을 기반으로 상응하는 언어 페이지(/en
또는 /ja
)로 리디렉션할 수도 있습니다. 리디렉션과 관련된 자세한 예는 구현 문서를 참고하세요.
서드 파티 출처 무료 체험판 지원
현재 무료 체험을 위한 서드 파티로 도메인을 등록하는 기능은 지원되지 않습니다.
여러 출처에서 하위 리소스로 구현된 서비스(예: 광고 게재 또는 분석)를 운영하는 경우 최상위 사이트가 출처 체험판에 참여하는 경우에만 축소된 Accept-Language
헤더가 수신됩니다.
출처 무료 체험이 작동하는지 확인
Chrome의 출처 무료 체험판 문제 해결 가이드에서는 토큰이 올바르게 구성되었는지 확인하기 위한 전체 체크리스트를 제공합니다.
chrome://settings/languages
또는 설정 → 언어에서 여러 언어와 우선순위를 구성합니다. 사이트에서 지원하지 않는 언어를 선택하고 목록 상단으로 이동하여 추가 재협상이 트리거되도록 하는 것이 좋습니다.
출처 무료 체험 토큰이 포함된 초기 응답의 헤더는 다음과 같이 표시됩니다.

축소된 Accept-Language가 포함된 후속 요청 헤더는 다음과 같습니다.

오리진 트라이얼 참여 중지
무료 체험 기간 중 언제든지 참여를 중지하고 사용자의 Accept-Language 전체 목록을 받을 수 있습니다. 참여를 중지하려면 다음 단계를 따르세요.
- HTTP 응답에서 Accept-Language 감소 체험판의
Origin-Trial
헤더를 삭제합니다. - [선택사항] 이 헤더를 전송하고 싶지 않은 경우 HTTP 응답에서 개발자용 체험판을 선택하도록 추가된
Variants
헤더를 삭제합니다. 빈 값과 함께Variants
를 사용하여 이 작업을 실행할 수도 있습니다. - [선택사항] 이 헤더를 전송하고 싶지 않은 경우 HTTP 응답에서 개발자용 체험판을 선택하는 데 추가된
Content-Language
헤더를 삭제합니다.
Origin 무료 체험 기간
Accept-Language 축소 오리진 트라이얼은 Chrome 주요 기록 약 6개에 해당하는 최소 6개월 동안 진행됩니다. 오리진 트라이얼은 M109에서 표시되며 M114로 종료됩니다 (트라이얼을 사용할 수 있는 마지막 Chrome 버전). 이 시점에서 Chrome은 출처 실험의 의견을 평가한 후 단계적으로 축소된 Accept-Language 문자열을 전송합니다. 먼저 Accept-Language HTTP 헤더를 줄이고 JS 인터페이스를 줄입니다. 사이트에 테스트하는 데 시간이 더 필요한 경우 후속 지원 중단 출처 체험을 선택할 수 있습니다. 그러면 최소 6개월 동안 전체 Accept-Language 문자열에 액세스할 수 있습니다. 지원 중단 체험판이 준비되면 더 자세한 내용을 게시할 예정입니다.
의견 공유
Accept-Language Reduction GitHub 저장소에 문제나 의견을 제출하세요.