1、浏览器跨域:
跨域的几种方式:
(1)主域名不同:
(2)子域名不同:
(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请求,当发送请求后,服务器的处理就和简单请求一样了