跨域总结

昨天总结了一下ajax,今天顺便把跨域也说了吧。

在正常的情况下。是不允许跨域的。因为保证安全。大家要准守同源策略
同源策略
  • 浏览器出于安全方面的考虑,只允许与本域下的接口交互。不同源的客户端脚本在没有明确授权的情况下,不能读写对方的资源。
  • 本域:相同的协议、 相同的域名、相同的端口

例:http://zhaobw.com:8080/test.html
http就是协议、zhaobw.com就是域名、8080就是端口。


跨域:
  • 在浏览器下,向不同的协议、域名、端口,发送请求获取数据。突破同源策略。

跨域的方法:
  • jsonp
  • 降域
  • cors
  • postMassage
详细介绍跨域方法
jsonp

html中script标签可以引入其他域下的js,比如引入线上的jquery库。利用这个特性,可实现跨域访问接口。需要后端支持

  • 定义数据处理函数_fun

  • 创建script标签,src的地址执行后端接口,最后加个参数callback=_fun

  • 服务端在收到请求后,解析参数,计算返还数据,输出 fun(data) 字符串。

  • fun(data)会放到script标签做为js执行。此时会调用fun函数,将data做为参数。。


CORS

CORS 全称是跨域资源共享(Cross-Origin Resource Sharing),是一种 ajax 跨域请求资源的方式,支持现代浏览器,IE支持10以上。 实现方式很简单,当你使用 XMLHttpRequest 发送请求时,浏览器发现该请求不符合同源策略,会给该请求加一个请求头:Origin,后台进行一系列处理,如果确定接受请求则在返回结果中加入一个响应头:Access-Control-Allow-Origin; 浏览器判断该相应头中是否包含 Origin 的值,如果有则浏览器会处理响应,我们就可以拿到响应数据,如果不包含浏览器直接驳回,这时我们无法拿到响应数据。所以 CORS 的表象是让你觉得它与同源的 ajax 请求没啥区别,代码完全一样。

   res.header("Access-Control-Allow-Origin", "http://a.jrg.com:8080"); 

降域

在主域名相同, 二级域名不同的情况下。可以通过domian来进行设定

   //qwe.a.html和asd.a.html
   document.domian = "a.html"

#######postMessage
允许跨窗口通信,不论这两个窗口是否同源。postMessage方法的第一个参数是具体的信息内容,第二个参数是接收消息的窗口的源(origin),即"协议+域名+端口"。也可以设为*,表示不限制域名,向所有窗口发送。

你可能感兴趣的:(跨域总结)