跨域问题的处理

来源:互联网 发布:美利坚仓储淘宝王 网盘 编辑:程序博客网 时间:2024/06/11 17:03
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-
urlencodedmultipart/form-datatext/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: trueAccess-Control-Expose-Headers:Content-Type: text/html; charset=utf-8
b.对于非简单请求:
当浏览器发现本次请求是非简单请求,会先发送一个"预检"请求给服务器,询问该
网页所在的域名是否在许可范围内,只有得到肯定答复,浏览器才会继续发送
XMLHttpRequest请求,当发送请求后,服务器的处理就和简单请求一样了

原创粉丝点击