Назад | Перейти на главную страницу

IIS6 не выполняет сжатие gzip при включении заголовка Via в запрос

У меня есть статический контент, проходящий через CDN. Я использую встроенное сжатие IIS6 (gzip и deflate) для статического содержимого, и оно отлично работает, когда я его запрашиваю. Однако когда CDN делает первоначальный запрос контента, он не возвращается сжатым. Поэтому у них нет сжатого контента, который можно было бы пересылать людям, которые его запрашивают. (Да, возникает проблема с людьми, запрашивающими [заархивированный] контент из CDN с помощью браузера, который не может обрабатывать сжатие. Но пока мы отложим это в сторону.)

Вот пример запроса без заголовка Via:

HEAD /flash/swfobject.js HTTP/1.1  
User-Agent: curl/7.19.7 (i386-pc-win32)  
Host: localhost:9120  
Accept: */*  
Connection: Keep-Alive  
accept-encoding: gzip  

И он возвращает сжатый ответ:

HTTP/1.1 200 OK
Content-Length: 4357
Content-Type: application/x-javascript
Content-Encoding: gzip
Expires: Wed, 01 Jan 2020 00:00:00 GMT
Last-Modified: Wed, 18 Nov 2009 15:36:52 GMT
Accept-Ranges: bytes
Vary: Accept-Encoding
Server: Microsoft-IIS/6.0
Date: Thu, 19 Nov 2009 10:27:50 GMT

Однако, если я включу в запрос заголовок Via (как это делает CDN), результат вернется в несжатом виде:

Запрос:

HEAD /flash/swfobject.js HTTP/1.1
User-Agent: curl/7.19.7 (i386-pc-win32)
Host: localhost:9120
Accept: */*
Connection: Keep-Alive
Via: 1.1 204.160.105.17:80 (Footprint 4.5/FPMCP)
accept-encoding: gzip

Отклик:

HTTP/1.1 200 OK
Content-Length: 14602
Content-Type: application/x-javascript
Expires: Wed, 01 Jan 2020 00:00:00 GMT
Last-Modified: Wed, 18 Nov 2009 15:36:54 GMT
Accept-Ranges: bytes
Server: Microsoft-IIS/6.0
Date: Thu, 19 Nov 2009 10:29:52 GMT

Да, эти демонстрации используют в запросе "localhost". Тем не менее, я получаю тот же результат, используя фактическое доменное имя с разных машин в разных сетях.

Тогда два вопроса:

  1. Может быть, IIS не применяет сжатие из-за дополнительного заголовка? и если да, что я могу с этим поделать?

  2. Как я могу определить, распаковывает ли прокси-сервер контент перед его возвратом?

Бонусный вопрос:

  1. Что я могу сделать для дальнейшего исследования этой проблемы?

Я в курсе SO вопрос 332049, но в ответе есть заголовок, а не запрос.

Немного поздно на вечеринку, но я столкнулся с этим, когда исследовал аналогичную проблему, поэтому решил, что займусь этим.

IIS6 не применяет сжатие HTTP к запросам, которые поступают на сервер через прокси-сервер восходящего потока. Поскольку в спецификации HTTP 1.1 указано, что прокси-серверы должны добавлять заголовок «Via:», это должно быть то, что IIS использует для различения прямого и прокси-трафика.

При необходимости его можно включить, но я бы посоветовал сначала проверить это. Заявленная причина такого поведения по умолчанию заключается в том, что большинство прокси плохо справляются со сжатым контентом.

Ссылки:

TechNet: свойство метабазы ​​HcNoCompressionForProxies (IIS 6.0)

HTTP / 1.1 через поле заголовка