Как я могу сделать параметр заголовка источника обязательным в Reitit?

У меня есть приложение Clojure с Pedestal & Reitit, и мне нужно, чтобы параметр заголовка origin был обязательным.

;; deps
[io.pedestal/pedestal.service "0.5.5"]
[pedestal/pedestal.jetty "0.5.5"]
[reitit-pedestal "0.5.5"]
[reitit "0.5.5"]

Но если я добавлю свою схему, запрос вызовет исключение.

(s/defschema my-request
  {:header {:origin s/Str}})

["/my-route"
    {:get  {:parameters  my-request
            :handler     my-handler}}]

Исключение:

: errors {:origin missing-required-key}

{
  "message": "Bad Request",
  "exception": "clojure.lang.ExceptionInfo: clojure.lang.ExceptionInfo in Interceptor :reitit.http.coercion/coerce-request - 
  Request coercion failed: #reitit.coercion.CoercionError{:schema {:origin java.lang.String, Keyword Any}, :errors {:origin missing-required-key}}

Запрос

curl -X GET "http://localhost:3000/my-route -H  "accept: application/json" "origin: TEST" -H  "user-agent: test"

Запрос CURL работает, проблема только в пользовательском интерфейсе Swagger с методом GET.

Кажется, что Swagger для методов get не отправляет параметр заголовка origin, чтобы избежать атак cors.

Могу ли я обойти это?

Спасибо за вашу помощь

1 ответ

Решение

После разговора с коллегой он показал мне, что:

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Origin

Заголовок запроса Origin указывает, откуда происходит выборка. Он не включает никакой информации о пути, а только имя сервера. Он отправляется с запросами CORS, а также с запросами POST. Он похож на заголовок Referer, но, в отличие от этого заголовка, он не раскрывает весь путь.

И я нашел это

https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_header_name

Имя запрещенного заголовка - это имя любого заголовка HTTP, который нельзя изменить программно; в частности, имя заголовка HTTP-запроса (в отличие от имени заголовка Forbidden ответа).

Угадайте, происхождение - одно из них.

Это тоже есть. https://bugzilla.mozilla.org/show_bug.cgi?id=1508661

Заголовок origin не должен устанавливаться для запросов GET и HEAD 2 года назад (2018-11-20)

Я попробовал и проверил свой запрос приложения в firefox и chrome, они ведут себя как ссылки.

Я полагаю, это все. благодаря

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