Что такое Content Disposition

Ответ

Content Disposition — HTTP-заголовок, определяющий, как браузер должен обрабатывать ответ сервера. Основные значения:

  1. inline — контент отображается в браузере (например, изображение или PDF).
  2. attachment — файл предлагается скачать. Можно указать имя файла:
    Content-Disposition: attachment; filename="document.pdf"

Пример использования в Express.js:

res.setHeader('Content-Disposition', 'attachment; filename="report.csv"');
res.send(csvData);

Нюансы:

  • Имя файла можно экранировать для Unicode (RFC 5987).
  • Если имя не указано, браузер может сгенерировать своё.
  • Влияет на поведение при открытии/сохранении файла.

Ответ 18+ 🔞

Да ты посмотри, какой заголовок подсунули — Content Disposition! Это ж не просто так, это как инструкция браузеру: «Слушай сюда, ушастый, вот эту хуйню — показывать или качать?»

Вот тебе два главных фокуса:

  1. inline — это типа «открой тут, на месте». Картинку, PDF-файлик — прямо в окошке браузера. Удобно, блядь.
  2. attachment — а это уже команда «скачивай, сука, на комп!». И можно даже имя файла своё, красивое, подсунуть:
    Content-Disposition: attachment; filename="доклад_про_всё.pdf"

Вот, смотри, как в Express.js это хозяйство прикрутить, чтоб пользователю сразу файл в руки:

res.setHeader('Content-Disposition', 'attachment; filename="report.csv"');
res.send(csvData);

А теперь, блядь, нюансы, без которых охуеть можно:

  • Если в имени файла русские буквы или ещё какая хрень — его надо экранировать по спецправилам (RFC 5987), а то получишь абракадабру вместо «Отчёт_по_заёбам.docx».
  • Если имя файла не указал — браузер сам что-нибудь придумает, обычно хуёвое. Так что не ленись.
  • Короче, этот заголовок — последний рубеж между «посмотреть и забыть» и «сохранить у себя, чтобы потом искать полдня». Пиздец важная штука, если честно.