我有一个Clojure应用程序,其中有param & Reitit,我需要源头param是强制性的。
;; 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}}]例外:
:错误{:源缺少所需的键}
{
"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请求工作,问题只出现在用GET方法的Swagger中.
似乎Swagger方法并没有发送源头param来避免cors的攻击。
我能解决这个问题吗?
谢谢你的帮忙
发布于 2020-10-09 20:55:53
在我和一位同事讨论之后,他告诉我:
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Origin
源请求标头指示提取来自何处。它不包含任何路径信息,但只包含服务器名称。它与CORS请求以及POST请求一起发送。它类似于引用标题,但与此标题不同的是,它不公开整个路径。
我找到了这个
https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_header_name
禁止的头名是任何不能以编程方式修改的header的名称;具体来说,是一个header名称(与禁止的响应报头名称相反)。
你猜怎么着,血统就是其中之一。
把这个也拿来。https://bugzilla.mozilla.org/show_bug.cgi?id=1508661
两年前(2018-11-20),不应该为GET和HEAD请求设置
原点标头。
我在firefox和chrome中尝试并检查了我的应用程序请求,它们的行为与链接相同。
我想就是这样了。谢谢
https://stackoverflow.com/questions/64286113
复制相似问题