跨域问题的处理

1、浏览器跨域:
跨域的几种方式:
(1)主域名不同:
http://www.123.com/index.html 调用 http://www.456.com/server (123/456)
(2)子域名不同:
http://abc.123.com/index.html 调用 http://def.123.com/server (abc/def)
(3)端口号不同:
http://www.123.com:8080/index.html 调用 http://www.123.com:8081/server
(4)协议不同:
http://www.123.com/index.html 调用 https://www.123.com/server.(http和https)
(5) 127.0.0.1和localhost是属于跨域

以下不属于跨域:
http://www.123.com/index.html 调用 http://www.123.com/server.
2、 解决跨域问题:
(1)、使用jsonp,但是jsonp只支持GET请求,不支持POST请求
(2)、使用CORS处理
3、使用CORS处理跨域请求
(1)跨域请求分为简单请求和非简单请求
简单请求:有两个条件,必须同时满足:
a.请求方法是post,get,head
b.请求头不超过一下字段:
Accept
Accept-Language
Content-Language
Last-Event-ID
Content-Type: 只限于三个值 application/x-www-form-
urlencoded multipart/form-data text/plain
非简单请求
Content-Type是application/json或者请求是put请求
(2)对于简单请求和非简单请求处理器的处理方式:
a.对于简单请求:
当浏览器发现本次请求是简单请求,就会在请求头里面自动加上origin字段,表示
源(协议+域名+端口),服务器对该请求处理,如果origin表示的源不在许可范围
内,会返回一个正常的HTTP响应,浏览器发现服务器没有返回Accept-Control-
Allow-Origin字段,就会抛出错误,被XMLHttpRequest的onerror捕获,当浏览器
正常返回时,会多出几个字段:
Access-Control-Allow-Origin: Access-Control-Allow-Credentials: true Access-Control-Expose-Headers: Content-Type: text/html; charset=utf-8
b.对于非简单请求:
当浏览器发现本次请求是非简单请求, 会先发送一个"预检"请求给服务器 ,询问该
网页所在的域名是否在许可范围内,只有得到肯定答复,浏览器才会继续发送
XMLHttpRequest请求,当发送请求后,服务器的处理就和简单请求一样了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值