首页 > 解决方案 > 如何将自定义标头参数添加到 clojurescript 中的 API GET 调用

问题描述

我正在使用 KeeFrame 在 clojurescript 中构建一个演示应用程序,并检索该网站的部分信息,我需要调用一个外部 API,该 API 需要在 GET 请求中使用自定义 HTTP 标头参数

我将 re-frame.core 用于 API 调用,它使用 ajax.core。我也尝试用 cljs-http.client 替换它。然而结果是一样的。我已经设法通过在服务器站点使用 clj-http 将自定义标头参数添加到请求标头。但这不是我想为这个网站实施的解决方案,因为这意味着我首先必须重建我正在调用的 API。所以我可以在没有参数的情况下从我的 clojurescript 中使用它。

此代码有效。生成正确的 GET 请求

{:http-xhrio {
 :method          :get
 :uri             (str transuri "/acquirer/" 673072009 "/acquirerref/" acquirerRefNo)
 :headers         {"Accept" "application/json"}
 :response-format (http/json-response-format {:keywords? true})
 :on-failure      [:common/set-error]}}

以“Accept: application/json”作为请求头

此代码不起作用。生成的不是 GET 请求,而是 OPTIONS 请求

{:http-xhrio {
 :method          :get
 :uri             (str transuri "/acquirer/" 673072009 "/acquirerref/" acquirerRefNo)
 :headers         {"Accept" "application/json" "Custom" "Value"}
 :response-format (http/json-response-format {:keywords? true})
 :on-failure      [:common/set-error]}}

并且在请求标头中“Accept:application/json”不可见,但“Access-Control-Request-Headers:custom”是

我期望在请求标头中有一个带有“Accept: application/json”和“Custom: Value”的 GET 请求。

有人可以告诉我我做错了什么或为我提供有关此信息的链接吗?

提前致谢

标签: apihttp-headersclojurescript

解决方案


浏览器将发送“preflight” OPTIONS 请求以验证是否允许发送“Custom”请求标头。服务器应该通过回复“Access-Control-Allow-Headers”来批准。

请参阅https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS


推荐阅读