Я занимаюсь разработкой веб-приложения, которое опирается на заголовок Accept
клиента.При согласовании типа контента мой сервер предпочитает text/plain
вместо text/html
.
. Я хочу добавить кнопку загрузки на страницу HTML, которая перенаправляет на страницу, которая просматривается в данный момент.На этот раз запрашиваем вариант text/plain
;сервер установит заголовок Content-Disposition
, инициирующий загрузку.
Проблема заключается в том, что, например, Firefox полностью игнорирует атрибут type
в ссылках, который должен делать именно это. Пример:
<a href=/ type=text/plain>Download</a>
GET /
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
GET /
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Последний запрос от нажатия ссылки на скачивание, и там нет text/plain
.
Мне удалось создатьобходной путь с JavaScript, но в лучшем случае он уродлив:
<a id=download download href=#>Download</a>
<script>
document.getElementById("download").onclick =
async () => {
// send the request manually instead of redirecting directly
const res = await fetch(window.location, { headers: { "Accept": "text/plain" } });
const text = await res.text();
// redirect to the file in memory
const file = new File([text], "hello.txt", { type: "application/octet-stream" });
window.location.assign(window.URL.createObjectURL(file));
};
</script>
Это не может быть окончательным решением, должен быть лучший способ!