首页 > 编程知识 正文

不支持跨域CORS,请检查是否没配置cors跨域规则

时间:2023-05-06 20:14:49 阅读:264330 作者:4600

CORS解决跨域问题 跨域CORS简单请求预检请求认证请求 服务端

跨域

当一个资源向与本身所在服务器不同的域或者端口发起请求时,会发起一个跨域HTTP请求。

CORS

CORS全称Cross-Origin Resource Sharing,也就是我们常说的跨域资源共享,CORS是通过新增一组HTTP头部字段,允许服务器声明那些源站有权限访问哪些资源。

CORS的标准规范要求可能对服务器数据产生副作用的HTTP请求方法,浏览器必须首先使用OPTIONS方法发起预检请求,如果服务器允许该跨域请求后,才可以发起HTTP请求。再预检请求的返回中,服务器可以要求客户端携带身份凭证信息。

简单请求

简单请求,顾名思义是相对简单的请求,满足一下条件的请求被称为简单请求。

请求方法 GETPOSTHEATD 字段 AcceptAccept-LanguageContent-LanguageContent-Type Content-Type 的值 text/plainmultipart/form-dataapplication/x-www-form-urlencoded
这些跨域请求和其他跨域请求没有区别,如果服务器没有返回正确的相应头,请求方不会收到任何数据,因此,那些不允许跨域请求的网站无需为这一新的HTTP控制特效担心。 预检请求

预检请求要求必须首先使用 OPTONS 方法发起一个预检请求到服务器,以获取服务器是否允许该实际请求。同样的他也需要满足一定的要求:

请求方法 PUTDELETECONNECTOPTIONSTRACEPATH 首部字段 AcceptAccept-LanguageContent-LanguageContent-Type Content-Type 的值 text/plainmultipart/form-dataapplication/x-www-form-urlencoded

预检请求可以避免跨域请求对服务器的用户数据产生未预期的影响。

认证请求

XMLHttpRequest 与 CORS 的一个有趣的特性是,可以基于 HTTP cookies 和 HTTP 认证信息发送身份凭证。一般而言,对于跨域 XMLHttpRequest 请求,浏览器不会发送身份凭证信息。如果要发送凭证信息,需要设置 XMLHttpRequest 的某个特殊标志位。

xmlHttpRequest.withCredentials = true

withCredentials 标志设置为 true,从而向服务器发送 Cookies。因为这是一个简单 GET 请求,所以浏览器不会对其发起 “预检请求”。但是,如果服务器端的响应中未携带 Access-Control-Allow-Credentials: true ,浏览器将不会把响应内容返回给请求的发送者。

服务端

只在客户端下足功夫也不一定可以解决跨域问题,我们也需要在服务端上设置Access-Control-Allow-Origin响应头,当然我们也可以设置如Access-Control-Allow- Methods,Access-Control-Allow-Headers来告诉客户端同不同意他的请求。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。