Ответ
Content Disposition — HTTP-заголовок, определяющий, как браузер должен обрабатывать ответ сервера. Основные значения:
- inline — контент отображается в браузере (например, изображение или PDF).
- 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! Это ж не просто так, это как инструкция браузеру: «Слушай сюда, ушастый, вот эту хуйню — показывать или качать?»
Вот тебе два главных фокуса:
- inline — это типа «открой тут, на месте». Картинку, PDF-файлик — прямо в окошке браузера. Удобно, блядь.
- attachment — а это уже команда «скачивай, сука, на комп!». И можно даже имя файла своё, красивое, подсунуть:
Content-Disposition: attachment; filename="доклад_про_всё.pdf"
Вот, смотри, как в Express.js это хозяйство прикрутить, чтоб пользователю сразу файл в руки:
res.setHeader('Content-Disposition', 'attachment; filename="report.csv"');
res.send(csvData);
А теперь, блядь, нюансы, без которых охуеть можно:
- Если в имени файла русские буквы или ещё какая хрень — его надо экранировать по спецправилам (RFC 5987), а то получишь абракадабру вместо «Отчёт_по_заёбам.docx».
- Если имя файла не указал — браузер сам что-нибудь придумает, обычно хуёвое. Так что не ленись.
- Короче, этот заголовок — последний рубеж между «посмотреть и забыть» и «сохранить у себя, чтобы потом искать полдня». Пиздец важная штука, если честно.