你应该知道如何跨域

前言

我们提供的服务有:网站设计、成都网站制作、微信公众号开发、网站优化、网站认证、延寿ssl等。为近1000家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的延寿网站制作公司

转眼就是秋招季啦。经历了几场笔试面试,屡次被问到关于如何实现跨域。老实说,之前都是纸上谈兵,也没有项目需要跨域,甚至觉得这个东西没什么意义。直到今天项目中遇到了跨域问题,看了不少资料才理解跨域的普遍性和意义。特写此篇文章整理自己所得。

转自个人博客: 关于跨域

什么是跨域

一般来说,如果你在开发中需要进行跨域操作(从一个非同源网站发送请求获取数据),一般而言,你在浏览器控制台看到的结果为:

XMLHttpRequest cannot load http://external-domain/service. No ‘Access-Control-Allow-Origin’ header is present on the requested resource. Origin ‘http://my-domain’ is therefore not allowed access.

同源策略

说到跨域就不得不提“同源策略”。

同源策略是Web浏览器针对恶意的代码所进行的措施,为了防止世界被破坏,为了保护世界的和平,Web浏览器,采取了同源策略,只允许脚本读取和所属文档来源相同的窗口和文档的属性。

那么,怎么判断文档来源是否相同呢?很简单,看三个部分: 协议、主机、端口号。只要其中一个部分不同,则不同源。

跨域的应用场景

  1. 来自 home.cdxwcx.com 的文档里的脚本读取 developer.cdxwcx.com载入的文档的属性。
  2. 来自 home.cdxwcx.com 的文档里的脚本读取 text.segmentfault.com载入的文档的属性。

如何跨域

设置domain属性

针对上述应用场景的***种情况,可以设置Document对象的domain属性。但是设置时使用的字符串必须具有有效的域前缀或者它本身。

PS: domain值中必须有一个点号。

PS: domain不能由松散的变为紧绷的。

 
 
  1. //初始值 "home.cdxwcx.com" 
  2. document.domain = "cdxwcx.com"; //OK
  3. document.domain = "home.cdxwcx.com"; //NO,不能由松散变紧绷
  4. document.domain = "example"; //NO,必须有一个点号
  5. document.domain = "another.com"; //NO, 必须是有效域前缀或其本身 

JSONP

JSONP由两部分组成: 回调函数和数据。

原理:通过动态