clj-http返回状态200,但cljs-http客户端针对同一请求返回状态0

问题描述 投票:0回答:1

我使用clj-http.client发出这样的请求

(http/get "https://www.example.com/bar")

并获得状态为200的响应。

但是,当我像这样用cljs-http.client发出相同的请求时:

(go (let [response (<! (http/get (str "https://example.com" "/bar")))]
         (prn response)))

我收到状态为0的响应,并且在浏览器中说它已被cors策略阻止。

如果没有clj-http.client请求,为什么cors策略会阻止cljs-http.client请求?

(defn response [data & [status]]
  {:status (or status 200)
   :headers {"Content-Type" "application/edn"
             "Access-Control-Allow-Headers" "Content-Type"
             "Access-Control-Allow-Origin" "*"
             "Access-Control-Request-Method" "GET"}
   :body (pr-str data)})

我使用上面的函数响应包装对“ bar”路线的响应。

clojure cors clojurescript clj-http
1个回答
0
投票

无论使用哪种HTTP库:如果您在浏览器上下文中,浏览器都可以完全控制实际的HTTP请求,并将强制执行CORS。

如果从非浏览器上下文进行调用,则可以完全控制HTTP交换。

您唯一的选择是确保服务器端理解CORS并返回正确的HTTP标头。

请参阅https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS以了解服务器端需要做什么。

如果使用环网,则用wrap-cors包裹路线是一种可能。

要测试来自clj的CORS路由,请确保您发送的HTTP请求设置了Origin标头。您的环形路由应以Access-Control-Allow-Origin设置为允许的起点进行响应。 (通常使用“ *”,这对于简单的请求就可以了)

© www.soinside.com 2019 - 2024. All rights reserved.