cors浅解

为了保证用户信息的安全,所有的浏览器都遵循同源策略。

记住:协议、域名、端口号完全相同时,才是同源

跨域不是无法请求,是请求到的数据能否被浏览器返回,即response

cors进行跨域又分为简单请求和非简单请求两种情况:

简单请求

何为简单请求,满足以下条件:

1、使用下列 HTTP 方法之一

  • GET

  • HEAD

  • POST,并且Content-Type的值在下列之一:

    • text/plain

    • multipart/form-data

    • application/x-www-form-urlencoded

2、并且请求头中只有下面这些(个人理解是请求头中没有自定义字段,如某些场景下需要额外传递自定义token字段)

  • Accept

  • Accept-Language

  • Content-Language

  • Content-Type (需要注意额外的限制)

  • DPR

  • Downlink

  • Save-Data

  • Viewport-Width

  • Width

解决方法:服务端设置Access-Control-Allow-Origin: *货Access-Control-Allow-Origin: 特定origin(可以多个)

非简单请求

需要发送options预检请求,即查询服务端是否允许跨域,options请求成功则继续进行第二次请求,options请求失败则不会进行第二次请求。特别的服务端不进行特殊处理,则options请求也会返回数据,存在资源浪费,服务端可以进行过滤,预检请求只进行校验不返回具体数据。

options请求中,浏览器会自动在请求中加入以下字段向服务端校验是否允许跨域

  1. Access-Control-Request-Headers: 自定义请求头字段*

  2. Access-Control-Request-Method: 请求方法

同时,服务端需要设置以下内容:

resp.setHeader("Access-Control-Allow-Origin", "orgin*");
resp.setHeader("Access-Control-Allow-Headers", "字段名");

cookie跨域问题

浏览器向不同域发送请求时不会携带cookie,需要客户端和服务器同时设置

如果要让浏览器发送 cookie,需要在 Client 设置 XMLHttpRequest 的 withCredentials 属性为 true。服务端设置resp.setHeader("Access-Control-Allow-Credentials","true");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值