ошибка сжатия (заголовка) в .NET HttpWebRequest?

Я только что заметил, что при использовании .NET HttpWebRequest я не получал gzip ' d обратно с сервера (запущен nginx 0.8.52). Тестируя с помощью curl, я убедился, что gzip настроен правильно на стороне сервера, а затем попытался разобраться в проблеме с отладчиком VS.

Оказывается, виноват то, как создается поле заголовка Accept-Encoding : если я устанавливаю

 request.AutomaticDecompression = DecompressionMethods.GZip | 
                                   DecompressionMethods.Deflate`

, я получаю следующий заголовок:

`Accept-Encoding: gzip, deflate,gzip, deflate`. 

Если я устанавливаю

request.AutomaticDecompression = DecompressionMethods.GZip; 

, я получаю

Accept-Encoding: gzip,gzip

Я не проверял, что говорит спецификация HTTP, но nginx должен обработать ситуацию, но вместо этого он возвращает Vary: Accept-Encoding назад. С другой стороны, заголовок Accept-Encoding , сгенерированный HttpWebRequest , определенно не выглядит правильным и кажется мне ошибкой.

Если я не укажу AutomaticDecompression и вручную задаю заголовок Accept-Encoding , я получу gzip ' d, но HttpWebRequest кажется довольно глупым и не декодирует сжатый поток (я полагаю, он полагается на внутренний флаг IsCompressed , а не на синтаксический анализ заголовков ответов).

Есть предложения?

РЕДАКТИРОВАТЬ:

Следует отметить, что здесь задействована аутентификация; Я только что узнал, что HttpWebRequest изначально выполняет запрос без , включая предоставленные учетные данные. Для этого запроса заголовок Accept-Encoding указан правильно. Дублирование происходит после получения ответа сервера 401 и повторного выполнения запроса с учетными данными.

РЕДАКТИРОВАТЬ 2:

Я опубликовал отчет об ошибке Microsoft Connect .

8
задан George Stocker 23 November 2010 в 15:19
поделиться