什么是跨域请求

Python052

什么是跨域请求,第1张

1.浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域

2.只要协议、域名、端口有任何一个不同,都被当作是不同的域,之间的请求就是跨域操作。

协议http和https不同,端口80还是81,域名更好理解

跨域限制主要是为了安全考虑

浏览器的同源策略会导致跨域,这里同源策略又分为以下两种DOM同源策略:

1.禁止对不同源页面DOM进行操作。这里主要场景是iframe跨域的情况,不同域名的iframe是限制互相访问的。

2.XmlHttpRequest同源策略:禁止使用XHR对象向不同源的服务器地址发起HTTP请求。

https://blog.csdn.net/tjcjava/article/details/76468225

基本原理就是通过动态创建script标签,然后利用src属性进行跨域。

这么说比较模糊,我们来看个例子:// 定义一个fun函数

返回的js脚本,直接会执行。所以就执行了事先定义好的fun函数了,并且把数据传入了进来。

当然,这个只是一个原理演示,实际情况下,我们需要动态创建这个fun函数,并且在数据返回的时候销毁它。因为在实际使用的时候,我们用的各种ajax库,基本都包含了jsonp的封装,不过我们还是要知道一下原理,不然就不知道为什么jsonp不能发post请求了

浏览器有跨域限制,但是服务器不存在跨域问题,所以可以由服务器请求所要域的资源再返回给客户端。

对于主域名相同,而子域名不同的情况,可以使用document.domain来跨域 这种方式非常适用于iframe跨域的情况,直接看例子吧 比如a页面地址为 http://a.yourhost.com b页面为 http://b.yourhost.com 。 这样就可以通过分别给两个页面设置 document.domain = http://yourhost.com 来实现跨域。 之后,就可以通过 parent 或者 window[‘iframename’]等方式去拿到iframe的window对象了。

window.name跨域同样是受到同源策略限制,父框架和子框架的src必须指向统一域名。window.name的优势在于,name的值在不同的页面(或者不同的域名),加载后仍然存在,除非你显示的更改。并且支持的长度达到2M.

通常情况下的话,可以用url的参数来实现。这需要两个站点有一套固定的规则。比如用户访问A站点之后,A站点向url添加一个参数。参数包括了cookie的内容或代表的id,然后重定向到B站点。B站点才能根据A站点传送的参数解析cookie并进行设置。