如何将 CORS 添加到 compojure-api 应用程序?
Posted
技术标签:
【中文标题】如何将 CORS 添加到 compojure-api 应用程序?【英文标题】:How do I add CORS to a compojure-api app? 【发布时间】:2019-03-15 15:40:54 【问题描述】:如何在此代码 sn-p 中添加 CORS?
(def app
(api
:swagger :ui "/docs"
:spec "/swagger.json"
(GET "/route-a" [] "a")
(GET "/route-b" [] "b")
(GET "/route-c" [] "c")))
我想使用https://github.com/r0man/ring-cors 并尝试过这个,但它似乎没有做任何事情。我希望看到响应标头包含 Access-Control-Allow-Origin 但它丢失了。
(-> (api
:swagger :ui "/docs"
:spec "/swagger.json"
(GET "/route-a" [] "a")
(GET "/route-b" [] "b")
(GET "/route-c" [] "c"))
(wrap-cors :access-control-allow-origin #"http://localhost:81"
:access-control-allow-headers ["Origin" "X-Requested-With"
"Content-Type" "Accept"]
:access-control-allow-methods [:get :put :post :delete :options]))
【问题讨论】:
我认为你也需要允许的方法 github.com/r0man/ring-cors/blob/… 我添加了允许的方法,但它仍然没有做任何事情 对我有用:如果我在 localhost:3000 上运行 API 并执行curl -vH "Origin: http://localhost:81" localhost:3000/route-a
,我会在输出中获得 Access-Control-Allow-Origin 和 Access-Control-Allow-Methods 标头
【参考方案1】:
仅当请求具有与指定正则表达式匹配的 Origin
标头时,才会返回特定于 CORS 的响应标头(当在浏览器中使用 XMLHttpRequest
发出请求时,会自动添加 Origin 标头)。
如果你尝试:
curl -vH "Origin: http://localhost:81" localhost:3000/route-a
(假设您的 API 在端口 3000 上可用),您将看到添加了必要的响应标头。来自http://localhost:81
的 AJAX 请求也应该可以工作。
【讨论】:
以上是关于如何将 CORS 添加到 compojure-api 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 CORS 添加到 compojure-api 应用程序?
如何将 CORS(跨域策略)添加到 NGINX 中的所有域?