Использование расположения содержимого в заголовке ответа HTTP
-
06-07-2019 - |
Вопрос
Я обнаружил, что следующий код asp.net очень полезен при обслуживании файлов из базы данных:
Response.AppendHeader("content-disposition", "attachment; filename=" + fileName);
Это позволяет пользователю сохранить файл на своем компьютере и затем решить, как его использовать, вместо того, чтобы браузер пытался использовать файл.
Что еще можно сделать с заголовком ответа на размещение контента?
Решение
Обратите внимание, что RFC 6266 заменяет RFC, указанные ниже. Раздел 7 описывает некоторые связанные с безопасностью проблемы.
Полномочия для заголовка размещения контента: 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) для деталей.
Другие советы
Похоже, что заголовок Content-Disposition был изначально создан для электронной почты, а не для Интернета. ( ссылка на соответствующий RFC .)
Я предполагаю, что веб-браузеры могут реагировать на
Response.AppendHeader("content-disposition", "inline; filename=" + fileName);
при сохранении, но я не уверен.
См. RFC 6266 (Использование поля заголовка расположения содержимого в протоколе передачи гипертекста (HTTP)) http://tools.ietf.org/html/rfc6266 р>
Для пользователей asp.net .NET Framework предоставляет класс для создания заголовка размещения контента:
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());
Этот заголовок определен в RFC 2183 , так что это будет лучшим местом начать читать.
Допустимые значения - это значения, зарегистрированные в Агентстве по присвоению номеров в Интернете (IANA); реестр значений следует рассматривать как окончательный источник.
Подумал, что эта статья в разделе поддержки Microsoft связана с обсуждением здесь Как вызвать диалоговое окно загрузки файла для известного типа MIME