多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 1. 什么是跨域 1. 跨域,是指浏览器不能执行其它网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript实施的安全限制。 2. 简单来讲,就是从地址A加载的页面,不能访问地址B的服务。此时地址A与地址B不同源。 3. 所谓同源,就是**域名、协议、端口**均相同 ~~~ http://www.123.com/index.html 调用 http://www.123.com/abc.do (非跨域) http://www.123.com/index.html 调用 http://www.456.com/abc.do (主域名不同:123/456,跨域) http://abc.123.com/index.html 调用 http://def.123.com/server.do (子域名不同:abc/def,跨域) http://www.123.com:8080/index.html 调用 http://www.123.com:8081/server.do(端口不同:8080/8081,跨域) http://www.123.com/index.html 调用 https://www.123.com/server.do (协议不同:http/https,跨域) ~~~ ## **2. 解决跨域** ### **2.1 CORS** > 随着互联网的发展,同源策略严重影响了项目之间的连接,尤其是大项目,需要多个域名配合完成,因此W3C推出了CORS,即Cross-origin resource sharing(跨来源资源共享)。 > **CORS的基本思想就是使用额外的HTTP头部让浏览器与服务器进行沟通,从而决定是否接受跨域请求。** **1. cors需要浏览器和服务器同事支持** **2. 目前所有浏览器都支持cors,浏览器在跨域访问时,会自动添加HTTP头信息,或者发起预检请求,用户对此毫无感知** **3. 因此是否支持跨域请求,关键在于服务器是否做了CORS配置,允许跨域访问。** #### **2.1.1 cors处理简单请求** 同时满足以下两大条件的,就属于简单请求: * 请求方法是以下3种之一:GET、POST、HEAD * HTTP头信息不超出以下字段:AcceptAccept-LanguageContent-LanguageLast-Event-IDContent-Type:仅限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain 凡是不满足以上条件的,就属于非简单请求。如我们常用的json格式请求,由于其Content-Type的值为application/json,因此属于非简单请求。 对于这两种请求,浏览器的处理方式是不一样的。