1.跨域:ajax网络通信限制,属于不同域名(主、子域名)、端口、协议(http/https)的脚本不予执行。127.0.0.1和localhost也属于跨域。
2.解决方式:
-JSONP(提前写好callback,动态创建script)
-Corps(
1.对于简单请求,由服务器端的Access-Control-Allow-Origin确认;
2.简单请求:GET、HEAD和POST(POST的Content-Type类型限application/x-www-form-urlencoded、multipart/form-data和text/plain),并且不能出现任何自定义头(例如,X-Custom: 12345)
3.PUT、DELETE以及其他类型如application/json的POST请求,在发送AJAX请求之前,浏览器会先发送一个OPTIONS请求(称为preflighted请求)到这个URL上,询问目标服务器是否接受:
OPTIONS /path/to/resource HTTP/1.1
Host: bar.com
Origin: http://my.com
Access-Control-Request-Method: POST
服务器必须响应并明确指出允许的Method:
HTTP/1.1 200 OK
Access-Control-Allow-Origin: http://my.com
Access-Control-Allow-Methods: POST, GET, PUT, OPTIONS
Access-Control-Max-Age: 86400
浏览器确认服务器响应的Access-Control-Allow-Methods
头确实包含将要发送的AJAX请求的Method,才会继续发送AJAX,否则,抛出一个错误。
由于以POST
、PUT
方式传送JSON格式的数据在REST中很常见,所以要跨域正确处理POST
和PUT
请求,服务器端必须正确响应OPTIONS
请求。
4.在引用外域资源时,除了JavaScript和CSS外,都要验证CORS。例如加载一个第三方的字体。
)
-