计网基础知识
发展历程 :
- HUB(集线器) 做数据的转发,让接收设备自己判断这个数据是不是发给自己的 。但如果有两个设备同时发送就处理不了了,他可能会一股脑全部发送给接收设备,于是出现了CMSA/CD 每次只能有一台设备发送数据
属于物理层
2 SW (交换机)
记录地址和端口的映射关系,地址:MAC地址,物理地址,出厂时设定好的,全球唯一
属于数据链路层,这一层的数据中包括数据头和数据,数据头中写着目的地址
交换机之间可以进行桥接
容量几千个的端口吧,交换机之间需要广播,网络规模大时效率低
3 路由器/网关
进行不同网络设备之间的数据转发
IP地址:标识网络或者设备
1. OSI七层网络参考模型 TCP/IP网络模型
带位填充的首尾标记法
01111110 标记发送开始和结束
为防止发送的数据中的01111110影响判断
发送方在连续发送5个1后填充一个0,接收方在连续接收5个1后删除接收到的下一个0
7应用层
1物理层 数据
2数据链路层 比特封装成帧 加上MAC地址(物理地址) 交换机完成地址的定向传输 网卡对应物理地址
流控制
3网络层
http相关知识
跨域
浏览器的同源策略要求协议、域名和端口都必须相同才属于同源,只是域名和端口相同但协议不同仍然属于跨域。
如何解决跨域
1. jsonp
html中带src属性的标签
仅限GET
2. CROS
后端实现
CORS (Cross-Origin Resource Sharing,跨域资源共享)是一个系统,它由一系列传输的HTTP头组成,这些HTTP头决定浏览器是否阻止前端 JavaScript 代码获取跨域请求的响应
CORS 实现起来非常方便,只需要增加一些 HTTP 头,让服务器能声明允许的访问来源
3. Proxy
react18
在package.json中写
"proxy":"{要请求的地址}"
如果有多个需要代理的地址,在src路径下创建setupProxy.js
在项目中,用api1/api2区分对不同服务器的请求,在发送请求前用pathrewrite重写请求的url
const { createProxyMiddleware } = require('http-proxy-middleware')
module.exports = function (app) {
app.use(
createProxyMiddleware('/api1', {
target: 'http://localhost:5000',
changeOrigin: true,
pathRewrite: { '^/api1': '' }
}),
// changeOrigin设置为true时,服务器收到的请求头中的host为:localhost:5000//请求目标地址
// changeOrigin设置为false时,服务器收到的请求头中的host为:localhost:3000//项目地址
// changeOrigin默认值为false
createProxyMiddleware('/api2', {
target: 'http://localhost:5001',
changeOrigin: true,
pathRewrite: { '^/api2': '' }
}),
)
}