什么是跨域?常见的跨域的方式都有哪几种

时间:2024-04-06 13:57:13

跨域指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。
同源就是指,域名,协议,端口均相同。

什么是跨域?常见的跨域的方式都有哪几种
http://www.123.com:8080/index.html 调用 http://www.123.com:8081/server.php (端口不同:8080/8081,跨域)

http://www.123.com/index.html 调用 https://www.123.com/server.php (协议不同:http/https,跨域)

这里要注意一下,localhost和127.0.0.1虽然都指向本机,但也属于跨域。
localhost也叫local ,正确的解释是:本地服务器
127.0.0.1在windows等系统的正确解释是:本机地址(本机服务器)
他们的解析通过本机的host文件,windows自动将localhost解析为127.0.0.1

常见的跨域方式

  1. 利用jsonp进行跨域。(至于json与jsonp之间的区别,我在另一篇文章中描述过)这种方法就不用介绍了,这也是最常见的跨域方式之一。

  2. window.name+iframe window.name通过在iframe(一般动态创建i)中加载跨域HTML文件来起作用。然后,HTML文件将传递给请求者的字符串内容赋值给window.name。然后,请求者可以检索window.name值作为响应。

  3. window.postMessage() HTML5新特性,可以用来向其他所有的 window 对象发送消息。需要注意的是我们必须要保证所有的脚本执行完才发送 MessageEvent,如果在函数执行的过程中调用了它,就会让后面的函数超时无法执行。

  4. WebSocket WebSocket protocol 是HTML5一种新的协议。它实现了浏览器与服务器全双工通信,同时允许跨域通讯,是server push技术的一种很棒的实现。相关文章,请查看:WebSocket WebSocket-SockJS

  5. 图片ping或script标签跨域 图片ping常用于跟踪用户点击页面或动态广告曝光次数。script标签可以得到从其他来源数据,这也是JSONP依赖的根据。
    缺点:只能发送Get请求 ,无法访问服务器的响应文本(单向请求)

具体详情请参照八种方式实现跨域请求