Использование контента в заголовке ответа HTTP

Я обнаружил, что следующий код asp.net очень полезен при обслуживании файлов из базы данных:

Response.AppendHeader("content-disposition", "attachment; filename=" + fileName);

Это позволяет пользователю сохранить файл на свой компьютер, а затем решить, как его использовать, вместо того, чтобы браузер пытался использовать файл.

Что еще можно сделать с заголовком ответа на содержимое?

Ответ 1

Властью в заголовке содержимого является RFC 1806 и RFC 2183. Люди также придумали взлом контента. Важно отметить, что заголовок контента не является частью Стандарт HTTP 1.1.

В стандарте HTTP 1.1 (RFC 2616) также упоминаются возможные побочные эффекты безопасности контента:

15.5 Проблемы с размещением контента

RFC 1806 [35], из которого часто реализовано Content-Disposition
(см. раздел 19.5.1) в HTTP-заголовке, имеет ряд очень серьезные соображения безопасности. Content-Disposition не является частью стандарт HTTP, но поскольку он широко применяются, мы находимся документирования его использования и рисков для реализаторы. См. RFC 2183 [49]
(который обновляет RFC 1806) для деталей.

Обратите внимание, что RFC 6266 заменяет RFC, указанные ниже. Раздел 7 описывает некоторые связанные с этим проблемы безопасности.

Ответ 2

Ну, похоже, что заголовок Content-Disposition изначально был создан для электронной почты, а не из Интернета. (Ссылка на соответствующий RFC.)

Я предполагаю, что веб-браузеры могут отвечать на

Response.AppendHeader("content-disposition", "inline; filename=" + fileName);

при сохранении, но я не уверен.

Ответ 3

Обратитесь к RFC 6266 (Использование поля заголовка Content-Disposition в протоколе передачи гипертекста (HTTP)) http://tools.ietf.org/html/rfc6266

Ответ 4

Для пользователей asp.net платформа .NET предоставляет класс для создания заголовка содержимого: System.Net.Mime.ContentDisposition

Основное использование:

var cd = new System.Net.Mime.ContentDisposition();
cd.FileName = "myFile.txt";
cd.ModificationDate = DateTime.UtcNow;
cd.Size = 100;
Response.AppendHeader("content-disposition", cd.ToString());

Ответ 5

Этот заголовок определен в RFC 2183, так что это будет лучшее место для начала чтения.

Допустимые значения - это зарегистрированные в уполномоченном ведомстве Интернета (IANA); их реестр значений следует рассматривать как окончательный источник.