美文网首页程序员工具箱
cors响应头未生效的一次拍错历程

cors响应头未生效的一次拍错历程

作者: 许一沐 | 来源:发表于2021-11-30 18:21 被阅读0次

下午前端童鞋调用api遇到跨域访问错误:

我先是在 api 接口响应处 增加了 CORS 响应头:

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: POST,GET,OPTIONS,DELETE,HEAD,PUT");
header('Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Connection, User-Agent, Cookie, UserData,Authorization');

前端再次调用后 依然出现了 cors 错误:

has been blocked by CORS policy: Response to preflight request doesn’t pass access control check: It does not have HTTP ok status.

经过查找相关资料发现:

通常理解下: 客户端发起 POST 请求会先发起一次 OPTIONS 请求, 再发起真正的 POST 请求; 而 GET 请求是只执行一次.

但是 现代浏览器在处理跨域请求时有额外的安全策略:

CORS请求分为两类:简单请求(simple request)和非简单请求(not-simple-request)

当浏览器发送跨域请求时,如果请求不是GET或者特定POST(Content-Type只能是 application/x-www-form-urlencoded, multipart/form-data 或 text/plain的一种)时,浏览器会先以 OPTIONS 请求方式发送一个预请求(preflight request),称之为预检。浏览器会先询问服务器,当前网页所在域名是否在服务器的许可名单之中,服务器允许之后,浏览器才会发出正式的XMLHttpRequest请求,否则会报错。

所以需要将 OPTIONS 请求单独进行处理, 增加下列行代码, 解决.

if($_SERVER['REQUEST_METHOD'] == 'OPTIONS')
{
    header('HTTP/1.1 204');
    exit;
}

参考文章


相关文章

  • cors响应头未生效的一次拍错历程

    下午前端童鞋调用api遇到跨域访问错误: 我先是在 api 接口响应处 增加了 CORS 响应头: 前端再次调用后...

  • 跨域的解决方案

    1通过cors设置cors头解决跨域,也可以针对一个接口使用cors()中间件解决跨域 2通过设置响应头访问允许控...

  • HttpSecurity中的常用方法介绍

    openidLogin()用于基于 OpenId 的验证 headers()将安全标头添加到响应 cors()配置...

  • 跨域方案-CORS原理及实例

    CORS原理只需要向响应头header中注入Access-Control-Allow-Origin,这样浏...

  • CORS的原理是什么?

    CORS 是跨域资源共享的缩写 该技术通过在目标域名返回 CORS 响应头来达到获取该域名的数据的目的 该技术核心...

  • CORS 原理及实现

    CORS原理只需要向响应头header中注入Access-Control-Allow-Origin,这样浏览器检测...

  • 响应头设置跨域和Spring注解跨域

    CORS跨域原理详解Spring解决跨域 响应头设置跨域 Spring注解跨域@CrossOrigin 可添加到方...

  • 2020-11-11 跨域

    CORS:跨域资源共享,来解决ajax请求在游览器中同源策略的限制。主要取决于后端设置响应头。 简单请求 GET、...

  • Flask与ajax跨域请求问题

    使用flask写接口的时候出现了跨域问题,记一下解决方法 1.配置CORS,在后台配置响应头 安装flask_co...

  • 使用proxy来解决跨域请求.

    [之前的那篇博客] 介绍了 cors 和 jsonp 处理跨域的情况. cors 通过后台服务器在响应流里设置 A...

网友评论

    本文标题:cors响应头未生效的一次拍错历程

    本文链接:https://www.haomeiwen.com/subject/gcwdxrtx.html