.htaccess에서“Vary : Accept-Encoding”헤더를 지정하는 방법


81

Google PageSpeed는 JS 및 CSS에 대해 "Vary : Accept-Encoding 헤더를 지정"해야한다고 말합니다. .htaccess에서 어떻게해야합니까?


22
왜 이것이 닫혔는지 확실하지 않습니다. 프로그래밍 언어를 포함하지 않는다고해서 코딩과 관련이 없다는 의미는 아닙니다.
BlueRaja-Danny Pflughoeft

@ BlueRaja-DannyPflughoeft 동의합니다. 이것은 65100 번 이상 조회되었으므로 매일 htaccess 질문에 답변하는 것은 말할 것도없고 검색이 잘된 주제라고 생각합니다.
Panama Jack

나는 이것이 지옥으로 유지 Vary: Accept-Encoding된다는 것을 알고 있지만 헤더 는 헤더 를 기반으로 한 페이지 버전을 캐시에 저장하도록 브라우저에 지시합니다 Content-Encoding. 당신은 볼 수 stackoverflow.com/questions/1975416/...developers.google.com/speed/docs/best-practices/...
이스마엘 미구엘

2
@IsmaelMiguel은 실제로 클라이언트에게 (그리고 더 중요한 것은 캐싱 서버에) 서버 응답 헤더 값의 s Content-Encoding변형이 아니라 클라이언트 Accept-Encoding 요청 헤더 값 의 각 변형에 대해 파일이 다르다는 것을 알립니다 .
aularon 2014

@ BlueRaja-DannyPflughoeft 평판이 많은 사용자와 평판을 추구하는 사용자는 질문을 찾아 닫아 평판을 구축하기 때문입니다. 너무 자주 질문을 닫아서는 안되는 질문으로 이어진다는 사실에 실망합니다.
Dan Nissenbaum

답변:


89

클라이언트가 gzip으로 인코딩 된 콘텐츠와 일반 콘텐츠를 모두받을 수 있기 때문에 css 및 js 파일에 대해 gzip 압축을 활성화한다는 의미라고 생각합니다.

이것은 apache2에서 수행하는 방법입니다.

<IfModule mod_deflate.c>
    #The following line is enough for .js and .css
    AddOutputFilter DEFLATE js css

    #The following line also enables compression by file content type, for the following list of Content-Type:s
    AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml

    #The following lines are to avoid bugs with some browsers
    BrowserMatch ^Mozilla/4 gzip-only-text/html
    BrowserMatch ^Mozilla/4\.0[678] no-gzip
    BrowserMatch \bMSIE !no-gzip !gzip-only-text/html 
</IfModule>

Vary Accept-Encoding헤더 를 추가하는 방법은 다음과 같습니다 . [src]

<IfModule mod_headers.c>
  <FilesMatch "\.(js|css|xml|gz)$">
    Header append Vary: Accept-Encoding
  </FilesMatch>
</IfModule>

Vary:헤더는 특정 요청 헤더의 값에 따라 달라집니다이 URL에 대한 봉사 그 내용을 알려줍니다. 여기에서는 Accept-Encoding: gzip, deflate이 헤더를 보내지 않는 클라이언트에게 제공되는 콘텐츠와는 다른 콘텐츠 (요청 헤더) 를 말하는 클라이언트에 대해 다른 콘텐츠를 제공한다고 말합니다 . AFAIK의 가장 큰 장점은 중간 캐싱 프록시가 이러한 변경으로 인해 동일한 URL의 두 가지 다른 버전이 필요하다는 것을 알리는 것입니다.


나는 이것이 그것이라고 생각하지 않는다. 내 JS와 CSS는 이미 압축되어 있습니다. PageSpeed가 여전히 불평합니다.
StackOverflowNewbie

3
mod_deflate는 기본적으로 Vary 헤더를 보내야 한다고 생각 합니다.
Matthew Flaschen

나는 당신이 위에서 언급 한 것을했습니다. .js 파일은 여전히 ​​압축되지 않습니다.
Andy N

@Andy; 서버에 "mod_deflate.c"모듈이 없을 수도 있습니다.
aularon 2011-06-01

3
Apache 2.2에는 위 답변의 mod_headers 섹션이 필요하지 않습니다. mod_deflate는 이미 필요한 작업을 수행합니다. httpd.apache.org/docs/2.2/mod/mod_deflate.html
Ari Maniatis

4

Aularon이 프로세스를 완료하기에 충분한 단계를 제공하지 않은 것 같습니다. 약간의 시행 착오를 거쳐 전용 WHM 서버에서 Gzipping을 성공적으로 활성화 할 수있었습니다.

다음은 단계입니다.

  • WHM 내에서 EasyApache를 실행하고 Exhaustive Options 목록에서 Deflate를 선택한 다음 서버를 다시 빌드하십시오.

  • 완료되면 Services Configuration >> Apache Configuration >> Include Editor >> Post VirtualHost Include로 이동하고 모든 버전을 선택한 다음 mod_headers.c 및 mod_headers.c 코드 (Aularon의 게시물에서 위에 나열 됨)를 다른 파일 위에 붙여 넣습니다. 입력 필드.

  • 일단 저장되면 평균 75.36 %의 데이터 절약 효과를 볼 수있었습니다! 이 HTTP 압축 도구를 사용하여 전후 테스트를 실행하여 자신의 결과를 확인할 수 있습니다. http://www.whatsmyip.org/http_compression/

이것이 당신 모두에게 효과가 있기를 바랍니다!

  • 매트

3

글꼴 파일도 gzip으로 압축하십시오!

add "x-font/otf x-font/ttf x-font/eot"

다음과 같이 :

AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml x-font/otf x-font/ttf x-font/eot

2

그것이 무엇인지 명확히하기 위해 많은 시간을 보냈습니다. 이 게시물 을 읽고 고급 .HTACCESS코드 를 얻고 그 기능 을 배우십시오.

당신이 사용할 수있는:

Header append Vary "Accept-Encoding"
#or
Header set Vary "Accept-Encoding"

1

이것은 나를 미치게 만들었지 만 aularon의 편집에 "Vary". 그래서 나를 위해 문제를 해결 "Vary Accept-Encoding"하도록 변경 했습니다 "Vary: Accept-Encoding".

나는 게시물 아래에 댓글을 달았지만 그것이 나를 허락하지 않을 것 같습니다.

어쨌든, 나는 이것이 내가 겪었던 것과 같은 문제를 누군가에게 구하기를 바랍니다.


2
이것이 차이를 만드는 것이 확실합니까? 2.2 문서에는 콜론이 포함되어 있지 않습니다. httpd.apache.org/docs/2.2/mod/mod_headers.html
Nic Cottrell

1

누구든지 NGINX구성 파일에 이것을 필요로하는 경우 여기에 스 니펫이 있습니다.

location ~* \.(js|css|xml|gz)$ {
    add_header Vary "Accept-Encoding";
    (... other headers or rules ...)
}

0

파일이 압축되었는지 여부를 지정하거나 확인할 필요없이 모든 요청에 ​​대해 모든 파일로 보낼 수 있습니다.

다운 스트림 프록시에 향후 요청 헤더를 일치시키는 방법을 알려서 원래 서버에서 새 응답을 요청하는 대신 캐시 된 응답을 사용할 수 있는지 여부를 결정합니다.

<ifModule mod_headers.c>
  Header unset Vary
  Header set Vary "Accept-Encoding, X-HTTP-Method-Override, X-Forwarded-For, Remote-Address, X-Real-IP, X-Forwarded-Proto, X-Forwarded-Host, X-Forwarded-Port, X-Forwarded-Server"
</ifModule>
  • unset선택적으로, 오래된 GoDaddy와 호스팅에 몇 가지 버그를 수정하는 것입니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.