首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Reitit中将源头param设置为强制性的?

如何在Reitit中将源头param设置为强制性的?
EN

Stack Overflow用户
提问于 2020-10-09 19:20:52
回答 1查看 322关注 0票数 0

我有一个Clojure应用程序,其中有param & Reitit,我需要源头param是强制性的。

代码语言:javascript
复制
;; deps
[io.pedestal/pedestal.service "0.5.5"]
[pedestal/pedestal.jetty "0.5.5"]
[reitit-pedestal "0.5.5"]
[reitit "0.5.5"]

但是,如果我输入我的模式,请求就会抛出一个异常。

代码语言:javascript
复制
(s/defschema my-request
  {:header {:origin s/Str}})

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

例外:

:错误{:源缺少所需的键}

代码语言:javascript
复制
{
  "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}}

请求

代码语言:javascript
复制
curl -X GET "http://localhost:3000/my-route -H  "accept: application/json" "origin: TEST" -H  "user-agent: test"

CURL请求工作,问题只出现在用GET方法的Swagger中.

似乎Swagger方法并没有发送源头param来避免cors的攻击。

我能解决这个问题吗?

谢谢你的帮忙

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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中尝试并检查了我的应用程序请求,它们的行为与链接相同。

我想就是这样了。谢谢

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64286113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档