Установка заголовков ответа HTTP с Kemal

Я хочу реализовать этот ответ в Kemal.

Моя текущая настройка имеет PDF-файл в app/public/map.pdfи следующий код в моем основном кристаллическом файле:

require "kemal"

#...

get "/map.pdf" do |env|
    env.response.headers["Content-Type"] = "application/pdf"
    env.response.headers["Content-Disposition"] = %(inline;filename="myfile.pdf")
end

Kemal.run

Когда я проверяю свой код, открывая localhost:3000/map.pdf в браузере (firefox) он предлагает загрузить файл (пока я хочу, чтобы он пытался его отобразить). А также curl -I результаты в следующем:

HTTP/1.1 200 OK
Connection: keep-alive
X-Powered-By: Kemal
Content-Type: application/octet-stream
ETag: W/"1494983019"
Content-Length: 1170498

Где бы я хотел увидеть Content-Type: application/pdf,

2 ответа

Кемаль автор здесь,

Если с заголовками все в порядке, с вами должно быть хорошо send_file, Однако убедитесь, что имя маршрута и файл не совпадают. В этом случае маршрут /pdf

get "/pdf" do |env|
  env.response.headers["Content-Type"] = "application/pdf"
  env.response.headers["Content-Disposition"] = %(inline;filename="map.pdf")
  send_file env, "./public/map.pdf"
end

Где бы я хотел увидеть Content-Type: application/pdf.

Дело в том, что Content-Disposition не существует в качестве заголовка. Возможно, по какой-то причине вы вообще не отправляете заголовки.

Например, в PHP, если ваш скрипт выводит один байт перед отправкой заголовков, тогда заголовки отправляться не будут; только заголовки перед первым выводом. Если вы установите заголовок http после отправки некоторых данных, тогда заголовок будет игнорироваться.

Другие вопросы по тегам