跨域
为什么跨域?
目前市场 IT 项目的开发模式:
- 集成开发
- 请求本公司的其他服务器
- 请求第三方服务器资源
- jsonp (老项目)
- 前后端分离
- 请求本公司的其他服务器
- 请求第三方服务器资源
- jsonp (老项目)
由于同源策略策略的原因,浏览器为了保护服务器出台了同源策略
同源策略 (same origin policy)
协议、域名、端口号都相同被视为同源
- 协议 (tcp/ip)
- 文件协议
- file
- 网络协议
- http
- https
- 传输协议
- SMTP
- 文件协议
- 域名
- 端口号
常见协议的分类
- FTP 传输文件
- SMTP 收发邮件
- TCP 网络协议
- UDP 应用传输协议
抓包工具
- Wireshark tcp udp
- Fiddler http https
- Web 开发者工具
- chrome 开发者工具
- firebug
客户端 服务端 解释 http://www.baidu.com https://www.baidu.com 协议不同,需要跨域访问 files:///c:/a.html http://a.html 协议不同 http://www.baidu.com:80 http://www.baidu.com:8080 端口不同 http://www.baidu.com http://www.baidu.cn 域名不同 http://www.baidu.com http://m.baidu.com 域名不同
怎么跨域?
* PROXY (vue、react)
vue-vue.comfig.js
1 | module.exports = { |
JSONP
由于 html 标签中,带有 src 的属性,不受同源策略的约束,我们就可以通过,动态创建 script 标签来实现跨域
区分 JSONP 和 XHR
- 看请求类型
- 看参数有没有 callback
主要利用了回调函数,步骤如下:
- 前端向服务端传递一个回调函数
- 服务端调用函数,传入参数
1 | app.get("/api", (req, res) => { |
1 | function jsonp(url, opt = {}, callback) { |
URL 编码:
encodeURI
decodeURI
encodeURIComponent
decodeURIComponent
函数 描述 FF N IE decodeURI() 解码某个编码的 URI。 1 4 5.5 decodeURIComponent() 解码一个编码的 URI 组件。 1 4 5.5 encodeURI() 把字符串编码为 URI。 1 4 5.5 encodeURIComponent() 把字符串编码为 URI 组件。 1 4 5.5 window.onload
DomContentLoaded
query.ready | $.ready
数据类型
- json
- xml (了解)
CORS
cors 被称为服务端跨域,说白了就是服务器允许某个地址访问
下面通过 nodejs 小型 web 服务器 express 举一个例子:
1 | // 原生nodejs |
服务器代理
- 正向代理
由于服务器请求服务器的数据,不受同源策略的影响,我们可以通过 http.request 来请求目标服务器数据,然后响应给前端。
1 | app.get("/getSingerList", async (req, res) => { |
- 反向代理
伪造请求
AJAX
1 | function ajax(url, callback) { |
I'm so cute. Please give me money.
- Post link: https://blog.gaocaipeng.com/2020/06/19/pdzb4f/
- Copyright Notice: All articles in this blog are licensed under unless otherwise stated.