### 一. CORS(Cross-Origin Resource Sharing,跨域源资源共享)

  基本思想:使用自定义HTTP头部让浏览器与服务器进行沟通

    发送请求时,需附加一个Origin头部

      eg:   Origin:   http://www.xxx.net

  如果服务认为这个请求可以接受,就在Access-Control-Allow-Origin投不中回发相同的源信息

    Access-Control-Allow-Origin: http://www.xxx.net

  1)  IE对CORS的实现

    XDR(XDomainRequest),这个对象与XHR类似

      1.1) 与XHR区别:

        cookie不会随请求发送,也不会随响应返回

        只能设置请求头部信息中的Content-Type字段

        不能访问响应头部信息

        只支持GET和POST请求

    该对象的创建与发送请求的方法与XHR相似,但open()方法只含两个参数(请求类型,URL)

    **所有的XDR请求都是异步执行的**

    eg:  var xdr = new XDomainRequest();

       xdr.onload =  function(){

         alert(xdr.responseText);

       }

       xdr.open("get",http://www.xxx.com/page/*);

       xdr.send(null)

    在接收到响应后,你只能访问响应的原始文本;没有办法确定响应的状态代码,只要成功就会触发load事件,如果失败触发error事件

    XDR提供了contentType属性,用来表示发送数据的格式,定义在open及send方法之间

  2.)其他浏览器对CORS的实现

    其他浏览器通过XMLHttpRequest对象实现对CORS的原生支持

    请求位于另外一个域中的资源,使用标准 的XHR对象并在open中的URL中传入绝对URL即可

      eg:    xhr.open("GET","http://www.somewhere.com/page/",true)

  3.) 带凭据的请求

    默认情况下,跨源请求不提供凭据(cookie、HTTP认证及客户端SSL证明等)。通过将withCredentials属性设置为true,可以指定某个请求应该发送凭据

      

      XMLHttpRequest.withCredentials  属性是一个Boolean类型,它指示了是否该使用类似cookies,authorization headers(头部授权)或者TLS客户端证书这一类资格证书来创建一个跨站点访问控制(cross-site Access-Control)请求。在同一个站点下使用withCredentials属性是无效的。

      此外,这个指示也会被用做响应中cookies 被忽视的标示。默认值是false。

      如果在发送来自其他域的XMLHttpRequest请求之前,未设置withCredentials 为true,那么就不能为它自己的域设置cookie值。而通过设置withCredentials 为true获得的第三方cookies,将会依旧享受同源策略,因此不能被通过document.cookie或者从头部相应请求的脚本等访问

  4.) 跨浏览器的CORS

    检测XHR是否支持CORS的最简单方法,就是检查是否存在withCredentials属性。再结合检测XDomainRequest对象是否存在

    eg:

      function createCORSRequest(method,url){

        var xhr = new XMLHttpRequest();

        if("withCredentials" in xhr){

          xhr.open(method,url,true)

        }else if(typeof XDomainRequest != "undefined"){    // IE

          xhr = new XDomainRequest

        }else{

          xhr = null

        }

        return xhr;         

      }

    var request = createCORSRequset("get","http://somewhere-else.com/page/")

    if(request){

      request.onload = function(){

        alert(request.responseText)

      }

      request.send()

    }

    

js-跨域源资源共享(CORS)的更多相关文章

  1. Atitit.js跨域解决方案attilax大总结 后台java php c#.net的CORS支持

    Atitit.js跨域解决方案attilax大总结 后台java php c#.net的CORS支持 1. 设置 document.domain为一致  推荐1 2. Apache 反向代理 推荐1 ...

  2. JS跨域:jsonp、跨域资源共享、iframe+window.name

    JS跨域:jsonp.跨域资源共享.iframe+window.name :https://www.cnblogs.com/doudoublog/p/8652213.html JS中的跨域 请求跨域有 ...

  3. 前端Js跨域方法汇总—剪不断,理还乱,是跨域

    1.通过jsonp跨域2.通过修改document.domain来跨子域(iframe)3.隐藏的iframe+window.name跨域4.iframe+跨文档消息传递(XDM)5.跨域资源共享 C ...

  4. ajax跨域请求解决方案 CORS和JSONP

    什么是跨域: 只要协议.域名.端口有任何一个不同,都会被当成不同的域.而由于浏览器的同源策略(同源策略:域名.协议.端口均相同),浏览器之间要隔离不同域的内容,禁止互相操作,不能执行其他网站的js.所 ...

  5. js跨域问题

    跨域概念:只要协议.域名.端口有任何一个不同,都被当作是不同的域. 跨域的主要原因是由于安全限制(同源策略, 即JavaScript或Cookie只能访问同域下的内容). 常用的跨域解决方案: 1.J ...

  6. 【前端】【转】JS跨域问题总结

    详情见原博客:详解js跨域问题 概念:只要协议.域名.端口有任何一个不同,都被当作是不同的域. 跨域资源共享(CORS) CORS(Cross-Origin Resource Sharing)跨域资源 ...

  7. js跨域问题解决方案

     跨域:当协议.域名.端口号任何一个不相同时,叫称为跨域.   HTML5  CORS(cross-origin-resource-sharing)跨域资源共享: 原理:当需要访问跨域的资源时,可以通 ...

  8. 【fetch跨域请求】cors

    当使用fetch 发起跨域请求时,CORS(跨域资源共享Cross-origin resource sharing) 请求fetch const body = {name:"Good boy ...

  9. c# WebApi之解决跨域问题:Cors

    什么是跨域问题 出于安全考虑,浏览器会限制脚本中发起的跨站请求,浏览器要求JavaScript或Cookie只能访问同域下的内容.由于这个原因,我们不同站点之间的数据访问会被拒绝. Cors解决跨域问 ...

随机推荐

  1. linux上部署SpringBoot项目及遇到的问题

    打开sftp步骤, 在显示的已连接的窗口上右键, 选择connect SFTP Session就可以打开文件上传的窗口 从windows上传文件到linux, 首先linux需要先切换到想要保存文件的 ...

  2. Java高级教程

    目录 1.Java面向对象方法 1.1. 创建类和对象的方法 1.2. this的使用 1.3. 静态域和静态方法 1.3.1. 静态域:属于类的级别 1.3.2.静态常量 1.3.3 静态方法 1. ...

  3. formbuild拖拽表单设计器

        formbuild拖拽表单设计器 表单设计器适用于OA系统.问卷调查系统.考试系统等系统,具体使用请前至官网API请点击 formbuild拖拽表单设计器     formbuild迭代几个功 ...

  4. 前端使用node.js+express+mockjs+mysql实现简单服务端,2种方式模拟数据返回

    今天,我教大家来搭建一个简单服务端 参考文章: https://www.jianshu.com/p/cb89d9ac635e https://www.cnblogs.com/jj-notes/p/66 ...

  5. Mysql的用户管理

  6. python写测试接口

    https://www.cnblogs.com/liuyl-2017/p/7815950.html

  7. Rancher3----安装部署rancher

    官方说:Rancher是使用一系列的Docker容器进行部署的.运行Rancher跟启动两个容器一样简单.一个容器作为管理服务器部署,另外一个作为集群节点的Agent部署 官方的意思是:学好docke ...

  8. linux命令中的“<”和“|”是什么意思?

    ”<” 表示的是输入重定向的意思,就是把<后面跟的文件取代键盘作为新的输入设备.”| ”则表示一个管道的意思,可以理解为东西从管道的一边流向另外一边.   cat file.json | ...

  9. CSAPP:第三章程序的机器级表示2

    CSAPP:程序的机器级表示2 关键点:算术.逻辑操作 算术逻辑操作1.加载有效地址2.一元二元操作3.移位操作 算术逻辑操作   如图列出了x86-64的一些整数和逻辑操作,大多数操作分成了指令类( ...

  10. mongodb创建用户(转发)

    参考文档: https://www.cnblogs.com/itxiongwei/p/5520863.html MongoDB 缺省是没有设置鉴权的,业界大部分使用 MongoDB 的项目也没有设置访 ...