Firefox неправильно обрабатывает тип контента при использовании IHttpHandler
-
22-09-2019 - |
Вопрос
Firefox по какой-то причине неправильно обрабатывает контент, отправленный через мой HTTP-обработчик .NET;похоже, что это не соответствует заголовку типа контента.Скорее, он рассматривает содержимое как HTML.URL-адрес, сопоставленный с запросом, даже имеет расширение .csv.Internet Explorer и Chrome поступают правильно.Проблема возникает как для обработчика "text / css", так и для обработчика "application / pdf".
Вот фрагмент метода ProcessRequest моего HTTP-обработчика ProcessRequest:
public void ProcessRequest(HttpContext context)
{
// ...
// Set the output headers
context.Response.ClearHeaders();
context.Response.ContentType = "text/csv";
context.Response.AddHeader(
"Content-Disposition", "attachment; filename=foo.csv");
// Code that writes to the output stream
// ...
context.Response.End();
}
Чего не хватает в моем ответе, который позволил бы Firefox распознавать тип контента, как ожидалось?
Правка 1:
Я видел, что при использовании расширения Firefox Live HTTP Headers я получаю обратно следующие заголовки.Похоже, что мой заголовок ContentType теряется.
HTTP/1.x 200 OK
Server: ASP.NET Development Server/9.0.0.0
Date: Thu, 31 Dec 2009 02:34:09 GMT
X-AspNet-Version: 2.0.50727
Content-Disposition: attachment;filename="foo.csv"
Cache-Control: private
Content-Type: text/html
Content-Length: 66682
Connection: Close
Правка 2:
Нашел проблему.В моем обработчике я использовал context.Server.Execute
сгенерировать HTML из шаблона ASPX, затем обработать этот HTML.Другими словами, я не использовал context. Server.Execute
для непосредственного вывода в ответ.Несмотря на это, запуск этого метода изменяет заголовки ответов текущего контекста.Таким образом, это означало отмену установленных мной заголовков.Перемещение кода, изменяющего заголовки, в after context.Server.Execute
решил проблему.
Причина, по которой это повлияло только на Firefox, заключается в том, что другие браузеры используют расширение файла, а не тип содержимого.Firefox поступает правильно.
Решение
Это действительно кажется странным.Я бы установил Живые HTTP-Заголовки дополнение для Firefox просто для подтверждения того, что Firefox действительно видит эти два заголовка, как вы и ожидали.
RFC 2616 также, по-видимому, предполагает заключаем имя файла в кавычки, так что вы тоже могли бы попробовать это.