美文网首页javascript
cors跨域资源共享

cors跨域资源共享

作者: 酒醒今宵 | 来源:发表于2018-05-24 14:15 被阅读0次
由于浏览器的同源策略,导致前后端交互时跨域的存在
  • cors背后的基本思想,就是使用自定义的http头部让浏览器与服务器进行沟通。

发送ajax请求时,需要额外的附加一个Origin头部,包含请求页面的源信息(协议,域名和端口),如果服务器认为这个请求可以接受,就在Access-Control-Allow-Origin头部中回发相同的源信息。浏览器查看服务器返回的这个头部,如果源信息不匹配就会驳回请求。

  • 举个例子
ajax:
Origin:https://www.baidu.com
服务端设置:
Access-Control-Allow-Origin:‘https://www.baidu.com’
或者
Access-Control-Allow-Origin:‘*’

Firefox3.5+、Safari4+、Chrome、IOS版的safari和Android平台中的WebKit都通过XMLHttpRequest对象实现了对CORS原生的支持!所以前端跨域请求资源时,无需做任何设置,直接在open()方法中传入绝对url即可(ie8-用jq即可:因为ie8是用的XDR对象而不是XHR对象,XHD不支持同步,其他基本相同)!

var xhr = new XMLHttpRequest();
xhr.open("get","http://www.anywhere.com",true);
xhr.onreadystatechange = function(){
    if(xhr.readyState==4){
        if((xhr.status>=200&&xhr.status<300)||xhr.status==304){
            alert(xhr.responseText);
        }else{
            alert(xhr.status);
        }
    }
}
xhr.send(null);
//或者用jq
$.ajax({
  url:'http://www.anywhere.com',
  data:{userId:'123'},
  success:function(){}
});
//如此后台配置允许跨域即可

其他跨域方式

  • jsonp(只支持get方式,需要后台配合)

原理:利用script标签的额src属性
用jq的话用法很简单,只需设置dataType:'jsonp'即可。如需自定义回调函数名称的话,加上 jsonp:'cb'和jsonpCallback:'feng'两个设置,拼在url的形式是'cb=feng'。

$.ajax({
    url:'https://www.baidu.com/his?rf=3',
    dataType:'jsonp',
    jsonp:'cb',
    jsonpCallback:'feng',
    success:function (result) {
      console.log(result);
    }
  })
  • nginx(这个应该是最方便快捷的方式了吧,前后端代码都不用改)

原理:反向代理,不受浏览器同源策略的限制

修改nginx配置文件,使本地端口映射到服务器端口
(具体配置就不做详细描述了,自行百度吧)

当然还有window.name、iframe、img等方式,貌似只要时带有src属性的标签都可以跨域,因为这些现在基本已经用的很少了,就不做介绍了吧。

相关文章

网友评论

    本文标题:cors跨域资源共享

    本文链接:https://www.haomeiwen.com/subject/ceskjftx.html