我遇到了一个API的CORS问题,并试图与API提供程序一起解决该问题,但这有点麻烦。
我使用axios发送的get请求是
axios({
method: 'post',
url: <endpoint url>,
data: someDataObj,
headers: {
'Authorization': <api key>,
'Content-Type': 'application/json;charset=UTF-8'
}
})
服务器配置为允许
chrome中的错误是
Response to preflight request doesn't pass access control check: It does not have HTTP ok status.
并且网络响应为
GENERAL
Request URL: <api url>
Request Method: OPTIONS
Status Code: 500 Internal Server Error
Remote Address: 128.136.1.24:443
Referrer Policy: no-referrer-when-downgrade
RESPONSE HEADERS
Access-Control-Allow-Headers: Authorization,Content-Type
Access-Control-Allow-Methods: POST,GET,OPTIONS
Access-Control-Allow-Origin: *
Content-Type: application/json;charset=UTF-8
Date: Wed, 30 Jan 2019 17:22:53 GMT
Server: Microsoft-IIS/8.5
Transfer-Encoding: chunked
X-Powered-By: ASP.NET
REQUESTHEADERS
Provisional headers are shown
Access-Control-Request-Headers: authorization,content-type
Access-Control-Request-Method: POST
Origin: <domain>
Referer: <page url>
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
一切似乎都配置正确,但是就像我说的那样,我对这些东西不是很熟悉,所以也许我们缺少一些简单的东西。
答案 0 :(得分:0)
Chrome认为您的请求不是simple request,而是执行preflighted request(使用OPTIONS而不是POST)。这是因为您的Authorization
标头和Content-Type
标头的值。都需要一个预检(OPTIONS)请求。
服务器响应预检的请求,但是他也会发送状态代码500(内部服务器错误)以及它,这不会发生。状态代码应为200(确定)。这就是为什么Chrome浏览器拒绝该OPTIONS请求的响应,并从来不实际的POST请求。这是服务器端的问题。