[Mis][HTTP] 何为跨域 - Gukie/learning GitHub Wiki

refer

何为跨域

  • 广义的,是两个不同的域名之间的访问,就是跨域
  • 狭义的,也是我们大家通常说的,只要不是同一个源过来的请求,就是跨域(即同源策略,Same Origin Policy,SOP)

所谓同源,就是 "协议+域名+端口",他们三个要一致才认为是同源,否则就不是; 即使两个域名指向同一个IP,也不能算是同源;

同源策略,是浏览器的一种安全策略,而非HTTP协议的一部分

非同源举例

URL                                      说明                    是否允许通信

http://www.domain.com/a.js
http://www.domain.com/b.js         同一域名,不同文件或路径           允许
http://www.domain.com/lab/c.js

http://www.domain.com:8000/a.js
http://www.domain.com/b.js         同一域名,不同端口                不允许
 
http://www.domain.com/a.js
https://www.domain.com/b.js        同一域名,不同协议                不允许
 
http://www.domain.com/a.js
http://192.168.4.12/b.js           域名和域名对应相同ip              不允许
 
http://www.domain.com/a.js
http://x.domain.com/b.js           主域相同,子域不同                不允许
http://domain.com/c.js
 
http://www.domain1.com/a.js
http://www.domain2.com/b.js        不同域名                         不允许

如何解决跨域问题

常用的,是使用CORS (Cross Origin Resource Sharing); 在服务端,设置Access-Control-Allow-Origin支持的域,前端无需做任何操作; 如果需要带上Cookie,则前后端都要进行设置