CORS服务器配置

时间:2019-01-30 17:45:28

标签: javascript c# php iis cors

我遇到了一个API的CORS问题,并试图与API提供程序一起解决该问题,但这有点麻烦。

我使用axios发送的get请求是

axios({
     method: 'post',
     url: <endpoint url>,
     data: someDataObj,
     headers: {
         'Authorization': <api key>,
         'Content-Type': 'application/json;charset=UTF-8'
     }
 }) 

服务器配置为允许

  • 标题:授权,内容类型
  • 方法:POST,GET,OPTIONS
  • 来源:*

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

一切似乎都配置正确,但是就像我说的那样,我对这些东西不是很熟悉,所以也许我们缺少一些简单的东西。

1 个答案:

答案 0 :(得分:0)

Chrome认为您的请求不是simple request,而是执行preflighted request(使用OPTIONS而不是POST)。这是因为您的Authorization标头和Content-Type标头的值。都需要一个预检(OPTIONS)请求。

服务器响应预检的请求,但是他也会发送状态代码500(内部服务器错误)以及它,这不会发生。状态代码应为200(确定)。这就是为什么Chrome浏览器拒绝该OPTIONS请求的响应,并从来不实际的POST请求。这是服务器端的问题。