跨域相关知识

之前一直在网上看浏览器因为安全问题,不允许JS跨域请求,之前做的项目遇到跨域问题,就直接在后台进行处理(比如用PHP的crul请求到数据后,返回给前台即可),今天学习跨域的相关概念,在这里记录学习,下面来看看相关概念。

一、跨域是什么?
浏览器出于安全性考虑,会限制JS的跨站请求,即浏览器会限制跨域名的请求。比如使用XMLHttpRequest对象发起的HTTP请求必须遵守同源策略。实际上浏览不会拦截请求,只是把返回的响应给拦截了。
参考文章: https://developer.mozilla.org/en/Same_origin_policy_for_JavaScript 说的简单点就是:URL中协议,域名,端口其中有任意一个不同就可以认为是不同的域。

二、URL概念简述:
URL是统一资源定位符,用来表示从网上得到的资源的位置和访问资源的方法,即通过URL来确定资源的位置,可以理解为URL是资源在网络中的一个别名。
URL标准格式是:
 
   
scheme://host[:port#]/path/.../[;url-params][?query-string][#anchor]
下面来简单说说格式中的参数所表示的含义:
 
   
scheme:表示使用的协议常见的有http,ftp,https协议
host:表示主机的IP或域名
port:表示主机的端口
path:表示资源的路径
url-params:表示所带的参数
query-string:表示发送给http服务器的参数
anchor:表示锚点信息
下面来看看一个URL的图解来加深理解:


三、判断是否跨域:
可以看出跨域实际上是与URL的协议,主机,端口有关,只要其中的一个不同都可以认为,是不同的域。
下面来看看一些例子:
 
   
URL 说明 是否允许通信
http://www.a.com/a.js
http://www.a.com/b.js 同一域名下 允许
http://www.a.com/lab/a.js
http://www.a.com/script/b.js 同一域名下不同文件夹 允许
http://www.a.com:8000/a.js
http://www.a.com/b.js 同一域名,不同端口 不允许
http://www.a.com/a.js
https://www.a.com/b.js 同一域名,不同协议 不允许
http://www.a.com/a.js
http://70.32.92.74/b.js 域名和域名对应ip 不允许
http://www.a.com/a.js
http://script.a.com/b.js 主域相同,子域不同 不允许
http://www.a.com/a.js
http://a.com/b.js 同一域名,不同二级域名(同上) 不允许(cookie这种情况下也不允许访问)
http://www.cnblogs.com/a.js
http://www.a.com/b.js 不同域名 不允许
这里值得注意的地方是:
在判断跨域的时候,只是判断URL中的内容,而不是判断域名所绑定的是不是同一个IP;如上述的例子中的11行和12行的判断
四、 解决跨域的一些方案:
因为没有使用和涉及到,这里只是简单将一些别人的博客地址记录下载,便于后面的学习

猜你喜欢

转载自blog.csdn.net/zp_00000/article/details/51306422