### 一. 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. Java教程01-基础语法

    目录 1. 基本概念 1.1. 环境变量 Path环境变量的作用->寻找命令 classpath变量的作用->寻找类文件 1.2. JDK里面有什么? 1.3. 什么是JRE? 2. Ja ...

  2. Java断言(Assertion)

    断言(Assertion)是Java中一条语句,包含一个布尔表达式,当该布尔值为真,程序则被认为是正确的:当布尔值为假,则系统会抛出错误. 断言默认禁用的,在开发时候可开启功能,有利于纠正错误,增加可 ...

  3. 数据合并处理concat

    var data = [ {name: '海门', value: 9}, {name: '鄂尔多斯', value: 12}, {name: '招远', value: 12}, {name: '舟山' ...

  4. C#深度学习の枚举类型(IEnumerator,IEnumerable)

    一.关于枚举的含义 .Net提供了可枚举类型的接口IEnumerable和枚举器接口IEnumerator,程序集System.Collections 另: IQueryable 继承自IEnumer ...

  5. CAS适用场景

    转载:http://www.jb51.net/article/86192.htm 下面小编就为大家带来一篇Java并发编程总结——慎用CAS详解.小编觉得挺不错的, 现在就分享给大家,也给大家做个参考 ...

  6. TortoiseHg 学习笔记

    0.前言     TortoiseHg是分布式的源代码管理工具Mercurial的GUIclient. mercurial 作为3大主流的分布式源代码管理工具.已经被广泛的使用.比如 googleco ...

  7. [Python] 练习代码

    # from random import randrange # num = int(input('摇几次骰子: ')) # sides=int(input('筛子有几个面: ')) # sum=0 ...

  8. [matlab] 21.灰色预测、线性回归分析模型与最小二乘回归 (转载)

    灰色预测的主要特点是只需要4个数据,就能解决历史数据少,序列的完整性以及可靠性低的问题,能将无规律的原始数据进行生成得到规律性较强的生成序列,易于检验 但缺点是只适合中短期的预测,且只适合指数级增长的 ...

  9. Python代码分行问题

    可以用“\”符号把一行过长的Python代码分解成几行,多个语句也可以写在同一行,语句之间要用“;”隔开.

  10. ESP8266 HTTP 项目(1)在刻度盘上进行ESP8266 NodeMCU模拟读取的步骤

    https://circuits4you.com/2018/02/03/esp8266-nodemcu-adc-analog-value-on-dial-gauge/ ESP8266(NodeMCU) ...