jsonp:
$(function(){
$.ajax({
async: false,
type: "GET",
dataType: 'jsonp',
jsonp: 'callback',
jsonpCallback: 'callbackfunction',
url: "http://i2.mediapower.mobi/adpower/vm/Bora/js/test.js",
data: "",
timeout: 3000,
contentType: "application/json;utf-8",
success: function(msg) {
console.log(msg);
}
});
})
通过js跨域向https发起请求,方法:
$.ajax({
type: 'post',
headers:{
"Access-Control-Allow-Headers":"X-Requested-With"
},
dataType:"jsonp",
connection:'https',
url: 'https://192.168.90.16:9081',
success: function(data,status,xhr){
$('#btn').text("编号为"+data.status+"姓名为"+data.message);
},
error: alert("hello world")
})
浏览器对跨域请求分为“简单请求”和 “非简单请求”
“简单请求”满足以下特征:
(1) 请求方法是以下三种方法之一:
HEAD
GET
POST
(2)HTTP的头信息不超出以下几种字段:
Accept
Accept-Language
Content-Language
Last-Event-ID
Content-Type:
application/x-www-form-urlencoded、 multipart/form-data、text/plain
浏览器判断跨域为简单请求时候,会在Request Header中添加 Origin (协议 + 域名 + 端口)字段 , 它表示我们的请求源,CORS服务端会将该字段作为跨源标志。
总结:简单请求只需要CORS服务端在接受到携带Origin字段的跨域请求后,在response header中添加Access-Control-Allow-Origin等字段给浏览器做同源判断
进行非简单请求时候 , 浏览器会首先发出类型为OPTIONS的“预检请求”,请求地址相同 ,
CORS服务端对“预检请求”处理,并对Response Header添加验证字段,客户端接受到预检请求的返回值进行一次请求预判断,验证通过后,主请求发起。
如果设置里contentType=application/json的话,则会显示连续发送两次请求,第一次为options。是浏览器发送预检请求,第二次才是发送的真实请求内容和请求方法