HTTP 实战(三) - HTTP 特性总览
2019-01-20 本文已影响45人
紫霞等了至尊宝五百年
0 联系我
image1.Q群【Java开发技术交流】:https://jq.qq.com/?_wv=1027&k=5UB4P1T
2.完整博客链接:www.shishusheng.com
3.知乎:http://www.zhihu.com/people/shi-shu-sheng-
4.gayhub:https://github.com/Wasabi1234
1 认识HTTP客户端
-
curl baidu.com
- curl www.baidu.com
- curl -v www.baidu.com
2 CORS跨域请求的限制与解决
server.jsserver2.js
test.html
模拟跨域场景,启动两个服务
-
修改内容类型
-
直接显示源码
8888服务提供的 html,html 文件中又向8887服务发送AJAX请求,这就是跨域了!
-
在 server.js 中加入该字段,并重启
-
此时,8888服务一切正常!
-
将其注释并重启
-
8888再请求,依旧报错
-
可是再看看8887服务
其实还是接收到了8888服务的请求,只是查询不到允许跨域请求头,于是直接将结果忽略并报错!
jsonp
不只添加字段可跨域访问,还可通过 jsonp 方式
-
修改 test.html 文件如下
-
无需重启服务,8888服务直接请求,成功!
-
修改8887服务如下,并重启
-
可成功访问,无跨域报错.
所以是允许向 link,img,script 标签等在标签上写一些路径加载内容时,是允许跨域的,不敢是否设置了头部字段.
所以 jsonp 的实现原理,就是在script 标签里去加载链接,链接访问了服务器的某个请求并且响应内容 -
如此设置跨域访问是不安全的,会使得所有第三方都有机会访问该服务
-
为实现允许特定访问请求,应修改如下
修改 test.html 文件
又是跨域报错
若是如此修改8887服务呢?
依旧报错,看来浏览器并不认为 localhost = 127.0.0.1
所以这样修改即可
3 CORS跨域限制以及预请求验证
事情远没有那么简单,浏览器还有很多限制
-
修改 test.html 文件如下
-
修改 8887服务如下