越写代码越不敢对外宣称 自己是写代码的(发现不懂的太多 代码还有太多需要优化的地方)
咳咳闲话不多说 聊一聊跨域吧!
----------------------------------------------------------------
1.啥是跨越
一个域就相当一个房子 前端的界面 后台的逻辑 数据全在房子A里 咋开心咋玩随便
但是这时候 突然A房子的前端界面想去 B房子 请求点数据玩玩可就 不行 因为不住一个房子那那么好拿!
2.如何解决
较常见解决方法
第一种jsonp ,调试接口懒可以暂时用一用并不推荐(响应速度慢,且只支持GET)
第二种CORS 后端为特有前端传来的origin 修改header头信息 为access+【允许跨域域名】 (同理可以在配置Apache 或者nginx 服务器)允许跨域
3.其中坑点
对于多半业务场景了解到如何设置允许跨域域名 基本就已经足以解决这一问题
但由于之前公司的数据日志校验 却让我发现 其实跨域并没有这么简单!!!!
比如我的这个接口域名叫做
guruiqin.test.com
前端每发起一次请求我便在日志中记录下前端所发送的参数
1.{name:"王大锤1号"}
2.{name:"王大锤2号"}
3.{name:"王大锤3号"}
.... n号
理论上来说每发起一次请求 我记录一次请求内容 那么有n 次请求
就应该会有n条日志 在nginx 的log中也应该是n 条日志
但是在后期校验nginx 访问日志时却发现日志数量是2n!!!!
且日志内容非常诡异 第一条未记录下传递的任何参数 而第二条则于我们记录的日志一样
才发现其实我们由于在跨域时其实是会存在两种请求方式的
1.简单请求 (1.HTTP 方法仅为
HEAD
GET
POST 2.Http 头仅修改 Accept
Accept-Language
Content-Language
Last-Event-ID
Content-Type,但仅能是下列之一
application/x-www-form-urlencoded
multipart/form-data
text/plain)
Accept-Language
Content-Language
Last-Event-ID
Content-Type,但仅能是下列之一
application/x-www-form-urlencoded
multipart/form-data
text/plain)
2.非简单请求(比如头信息修改了额外字段的)
在这里我们的请求就属于非简单请求
而每次发起请求 由浏览器首先 发起一次option 请求 (获取类似一个token)
后再真正携带参数发起请求