跨域 ajax 请求中的预检标头未解决授权标头

Posted

技术标签:

【中文标题】跨域 ajax 请求中的预检标头未解决授权标头【英文标题】:Authorization header not solved from preflight header in cross domain ajax request 【发布时间】:2019-11-03 01:01:59 【问题描述】:

我想使用jquery ajax 访问从https://A/ 到https://B/ 的跨域。

我的请求头看起来像:

Access-Control-Request-Headers: authorization
Access-Control-Request-Method: GET
Origin: https://A
Referer: https://A/test/index.html

实际上在服务器端设置了所有必要的标头:

Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Authorization,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,C$
Access-Control-Allow-Methods: GET,POST,OPTIONS,DELETE,PUT,PROPFIND,PROPPATCH,NOTIMPLEMENTED,OPTIONS,UNLOCK,MKCOL,COPY,LOCK,MOVE,HEAD
Access-Control-Allow-Origin: https://A
Access-Control-Max-Age: 1728000

但是我的谷歌浏览器仍然只发送上面的预检标题,而不是真正的标题,所以我不断收到 401 错误。我错过了什么吗?

更新: Chrome 给出以下错误消息:

对预检请求的响应未通过访问控制检查:它 没有 HTTP ok 状态。

【问题讨论】:

【参考方案1】:

好的,我有一个解决方法。我在请求的文档中添加了以下 php 代码。

if($_SERVER['REQUEST_METHOD'] == 'OPTIONS')
    http_response_code(200);
    exit;

但我仍然愿意接受任何更好的解决方案。

【讨论】:

以上是关于跨域 ajax 请求中的预检标头未解决授权标头的主要内容,如果未能解决你的问题,请参考以下文章

预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段授权。 (nginx)

Slim 框架上 CORS 期间的预检授权标头

在向外部服务器发送 ajax 调用时,Access-Control-Allow-Headers 在预检响应中不允许请求标头字段授权 [重复]

带有 jquery.ajax() 的跨域“授权”标头

允许跨域 ajax 请求中的标头

预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段授权