0%

跨域笔记

##在将项目前后端分离的时候,首当其冲的就是跨域问题;此篇笔记 用来记录什么是跨域、如何解决跨域、以及一个实例;免得自己以后忘记了还需要去搜索
###什么是跨域
http为了提高安全,禁止非同域访问
什么是同域:满足下三条才是同域 1:同端口 ip,2:同样的协议,3:如果是子域名 也要一样 否则就是非同域 不能直接互相访问,必须通过一些安全设置或者技巧去访问如jsonp、cors等方案
###解决跨域
####1:jsonp 方式
首先jsonp和json是没有任何关系的 ;
由于浏览器对js、图片不会做跨域限制
jsonp就是相当于把数据下载下来解析,利用script标签去下载数据 然后解析
就是用javascript动态加载一个script文件,如何去解析这个文件 例如json字符串
######局限性:只能get请求 如果需要post、put等其他请求 无法满足

###2:cors跨域(重点)
cors是w3c定义的一种新的标准 用来适应跨域数据请求的
当浏览器发现是跨域请求 会自动在报头添加一些跨域信息 如option等
cors跨域分为简单请求和负责请求 但是只要在服务端设定合适 区别不是特别大
当满足如下条件就是简单的cors跨域请求 不满足则是复杂cors请求
1:请求方式:get、post、head
2:报头限制:只能包含如下报头信息 超过则是复杂请求Accept、Accept-Language、Content-Language、Last-Event-ID、Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain|
也就是意味者如果要自定义报头、发送cookie等功能 都是复杂请求
不管是复杂请求还是简单请求 在服务端设置的时候 复杂请求设置是涵盖了简单请求需要的设置的
######简单cors跨域

1
发送简单请求-->服务端检验请求合法性-->请求合法就和正常请求一样、不合法返回跨域错误提示

######复杂cors跨域

1
发送预检请求-->服务端检验请求是否合法-->请求合法 发送正式请求、不合法 结束 提示请求不符合服务端检验要求

学习地址:http://www.ruanyifeng.com/blog/2016/04/cors.html