We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Http:
Https:
传输层安全协议(TSL)
安全套接层协议(SSL)
HTTP + SSL(TLS) = HTTPS
ssl
tcp
私钥A
公钥A
密钥X
每次进行HTTPS请求时都必须在SSL/TLS层进行握手传输密钥吗?
sessionID
TSL握手阶段
每次请求
携带sessionID
中间人攻击
公钥B
私钥B
如何证明浏览器拿到的公钥一定是该网站的公钥?
数字证书
CA机构
公钥
证书本身的传输过程中,如何防止被篡改?
数字签名
私钥
明文数据T
hash值
数字签名s
明文和数字签名
明文T
hash算法
网站B
网站A
拦截到了A传给浏览器的证书
替换成自己的证书
B的证书里的公钥
请求网站
证书中
SSL/TSL:
SSL
TLS
网站和公司信息
密钥对
对称加密
非对称加密
AES-128, AES-192、AES-256
ChaCha20
RSA
HTTP请求报文
请求⾏:
GET /index.html HTTP/1.1。
请求头部:
空⾏
请求体
post put
HTTP响应报文
HTTP/1.1 200 OK
UDP
应用层
传输层
UDP 协议
网络层
IP
TCP和UDP的区别
TCP
TCP三次握手
发送能力
接收能力
CLOSED
LISTEN
SYN=1报文段(同步位)
sep(初始序列号)
SYN-SENT
SYN
ACK(acknowledgement 确认)
ack( Acknowledge number确认号)(对应客户端的seq+1)
seq
SYN-RCVD
ACK=1
ack(对应服务端seq+1)
ESTABLISHED
ACK
ack
TCP四次挥手
FIN=1
seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1)
FIN-WAIT-1
ACK=1、ack=u+1
seq=v
CLOSE-WAIT
FIN-WAIT-2
FIN=1、ack=u+1
seq=w
LAST-ACK
TIME-WAIT
ACK=1 ack=w+1
seq=u+1
MSL
Maximum Segment Lifetime,报文最大生存时间
2XX(Success 成功状态码)
201 - Created 文档创建成功,比如新增一个user成功
201 - Created
202 - Accepted 请求已被接受,但相应的操作可能尚未完成。这用于后台操作,例如数据库压缩等异步操作
202 - Accepted
204 - No Content 该状态码表示客户端发送的请求已经在服务器端正常处理了,但是没有返回的内容,响应报文中不包含实体的主体部分。一般用于只需要从客户端往服务器端发送信息,而服务器端不需要往客户端发送内容时使用。
204 - No Content
206 Partial Content 该状态码表示客户端进行了范围请求,而服务器端执行了这部分的 GET 请求。响应报文中包含由 Content-Range 指定范围的实体内容。
206 Partial Content
3XX(表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。)
300 - Multiple Choices 针对请求,服务器可执行多种操作
300 - Multiple Choices
301 - Moved Permanently 请求的网页已永久移动到新位置
301 - Moved Permanently
302 - redirect 代表暂时性转移,一些旧客户端会将请求方法错误的更改为GET(尽管302标准禁止post变化get,但实际使用时大家并不太遵守)(http1.0的协议状态码)
302 - redirect
post
get
http1.0
303 - See Other 该状态码表示由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源(302状态码有着相同的功能,但是303明确表示客户端应当采用GET方法获取资源,把POST请求变为GET请求进⾏重定向)(http1.1的协议状态码)
303 - See Other
302
303
GET
http1.1
304 - Not Modified 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容
304 - Not Modified
305 - Use Proxy 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理。
305 - Use Proxy
307 - Temporary Redirect 代表暂时性转移,不会更改请求方法和消息主体(与302有相同的含义)(http1.1的协议状态码)
307 - Temporary Redirect
4XX(Client Error 客户端错误状态码)
400 - Bad Request
401 - Unauthorized
403 - Forbidden
405 - Method Not Allowed
406 - Not Acceptable
413 - Request Entity Too Large
5XX(Server Error 服务器错误状态码)
500 - Internal Server Error
503 - Service Unavailable
强缓存
status code : 200 不和服务器交互
status code : 200
status code
不和服务器交互
协商缓存
status code : 304 强缓存失效就走协商缓存 与服务器交互
status code : 304
强缓存失效就走协商缓存
与服务器交互
响应头
Last-Modified
Etag
Etag / If-None-Match
Last-Modified / If-Modified-Since
缓存位置
图像和网页
disk cache
操作系统缓存文件(如.JS)
memory cache
Memory Cache
HTTP/2
service-worker
会话(Session)
二进制分帧层
HTTP2
1.x
1.1
2.0
多路复用
TCP连接
流(stream)
并发
头部压缩
HTTP2为此采用HPACK压缩格式来压缩首部。头部压缩需要在浏览器和服务器端之间:
静态字典
例如要传输method:GET,那我们只需要传输静态字典里面method:GET对应的索引值就可以了,一个字节搞定。
method:GET
像user-agent、cookie这种静态字典里面只有首部名称而没有值的首部,第一次传输需要user-agent在静态字典中的索引以及他的值,值会采用静态Huffman编码来减小体积。第一次传输过user-agent之后呢,浏览器和服务器端就会把它添加到自己的动态字典中。后续传输就可以传输索引了,一个字节搞定。
user-agent、cookie
user-agent
Huffman
服务器端推送
index.htm
.js
.css
参考: 「2021」高频前端面试题汇总之计算机网络篇
参考:
「2021」高频前端面试题汇总之计算机网络篇
HTTP Request Header 常见的请求头:
HTTP Responses Header 常见的响应头:
GET方法URL长度限制的原因
URL
url
2083
(2K+35)
IE
GET和POST的请求的区别
POST
应用场景: GET 请求是一个幂等的请求,一般 Get 请求用于对服务器资源不会产生影响的场景,比如说请求一个网页的资源。而 Post 不是一个幂等的请求,一般用于对服务器资源会产生影响的情景,比如注册用户这一类的操作
Get
Post
RFC
POST和PUT请求的区别
PUT
OPTIONS请求方法及使用场景
OPTIONS
HTTP
CORS
DNS 协议是什么
DNS完整的查询过程
DNS查询过程例子
www.baidu.com
DNS
.com
.baidu
迭代查询与递归查询
OSI七层模型
OSI
HTTPS
FTP
POP3
SMTP
base64
表示层
运输层
Internet
据链路层
数据链路层
对等层
The text was updated successfully, but these errors were encountered:
No branches or pull requests
网络层知识点
HTTP和HTTPS
Http:
Https:
传输层安全协议(TSL)
或安全套接层协议(SSL)
对通讯协议进行加密,也就是HTTP + SSL(TLS) = HTTPS
ssl
通信后,ssl
再和tcp
通信私钥A
和公钥A
,公钥A
传给浏览器密钥X
,用公钥A
将密钥X
加密,传给服务器私钥A
解密出密钥X
,这样双方都有密钥X
密钥X
进行加密解密每次进行HTTPS请求时都必须在SSL/TLS层进行握手传输密钥吗?
sessionID
,在TSL握手阶段
传给浏览器sessionID
下每次请求
都会携带sessionID
,服务器通过sessionID找到对应的密钥,进行加密解密操作中间人攻击
私钥A
和公钥A
,公钥A
传给浏览器公钥A
换成自己的公钥B
(同时也拥有私钥B
),传给浏览器密钥X
,使用公钥B
加密密钥X密钥X
,其根本原因是浏览器无法确认收到的公钥是不是网站自己的如何证明浏览器拿到的公钥一定是该网站的公钥?
数字证书
CA机构
申领一份数字证书
,数字证书中由公钥信息、持有者信息等,服务器把证书传给浏览器,浏览器从证书中获取对应网站的公钥
证书本身的传输过程中,如何防止被篡改?
数字签名
公钥
和私钥
明文数据T
获取hash值
私钥
加密,得到数字签名s
明文和数字签名
共同组成数字证书
,颁发给网站明文T
和数字签名s
公钥
将数字签名
进行解密,得到hash值hash算法
将明文T
进行hash,得到计算后的hash值
hash值
相等,证书可信网站B
也拿到了CA机构认证的证书,它想劫持网站A
的信息。于是它成为中间人拦截到了A传给浏览器的证书
,然后替换成自己的证书
,传给浏览器,之后浏览器就会错误地拿到B的证书里的公钥
了,会有这种情况吗?请求网站
的域名与证书中
的域名进行比对,就知道有没有被掉包SSL/TSL:
SSL
被更名为TLS
网站和公司信息
绑定到加密密钥,每一个密钥对
都有一个私有密钥一个共有密钥,用私钥
解密公钥
加密的信息对称加密
和非对称加密
两种形式。对称加密
AES-128, AES-192、AES-256
和ChaCha20
。非对称加密
RSA
加密算法是最重要的、最出名的一个HTTP请求报文
请求⾏:
GET /index.html HTTP/1.1。
请求头部:
空⾏
请求体
post put
等请求携带的数据HTTP响应报文
HTTP/1.1 200 OK
。TCP相关与UDP
UDP
应用层
将数据传递给传输层
的UDP 协议
,UDP
只会给数据增加一个UDP
头,标识下是 UDP 协议,然后就传递给网络层
了UDP
对应用程序交下来的报文,在添加首部后就向下交付IP
层。UDP
对应用层
交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。因此,应用程序必须选择合适大小的报文TCP和UDP的区别
TCP
是一个面向连接的、可靠的、基于字节流的传输层协议,UDP
是一个面向无连接的传输层协议UDP
相比TCP
三大核心特征:TCP三次握手
发送能力
和接收能力
CLOSED
状态,服务端监听某个端口,变成LISTEN
状态SYN=1报文段(同步位)
,随机产生sep(初始序列号)
,要求建立连接,变成SYN-SENT
状态SYN
和ACK(acknowledgement 确认)
都为1,以及ack( Acknowledge number确认号)(对应客户端的seq+1)
,为自己随机产生seq
,变成SYN-RCVD
状态ACK=1
以及ack(对应服务端seq+1)
,状态变成ESTABLISHED
ACK
和ack
,对比ack
是否和seq
值相同,状态变成ESTABLISHED
,连接建立TCP四次挥手
ESTABLISHED
状态,当客户端主动关闭,服务端被动关闭(双方都可主动与另一方释放连接)FIN=1
,seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1)
客户端进入FIN-WAIT-1
ACK=1、ack=u+1
并生成seq=v
,状态变为CLOSE-WAIT
。服务器通知上层的应用进程,客户端向服务器的方向连接关闭,此时TCP连接处于半关闭状态,虽然此时客户端已经没有数据要发送了,但是服务器如果要发送数据给客户端,客户端还是要接受。FIN-WAIT-2
状态。等待服务器发送连接释放报文。FIN=1、ack=u+1
,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w
,进入LAST-ACK
状态.TIME-WAIT
状态,然后发送ACK=1 ack=w+1
给服务端,而自己的序列号是seq=u+1
。MSL
(Maximum Segment Lifetime,报文最大生存时间
)(4分钟), 在这段时间内如果客户端没有收到服务端的重发请求,那么表示 ACK 成功到达,挥手结束,否则客户端重发 ACK。常见http错误码
2XX(Success 成功状态码)
201 - Created
文档创建成功,比如新增一个user成功202 - Accepted
请求已被接受,但相应的操作可能尚未完成。这用于后台操作,例如数据库压缩等异步操作204 - No Content
该状态码表示客户端发送的请求已经在服务器端正常处理了,但是没有返回的内容,响应报文中不包含实体的主体部分。一般用于只需要从客户端往服务器端发送信息,而服务器端不需要往客户端发送内容时使用。206 Partial Content
该状态码表示客户端进行了范围请求,而服务器端执行了这部分的 GET 请求。响应报文中包含由 Content-Range 指定范围的实体内容。3XX(表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。)
300 - Multiple Choices
针对请求,服务器可执行多种操作301 - Moved Permanently
请求的网页已永久移动到新位置302 - redirect
代表暂时性转移,一些旧客户端会将请求方法错误的更改为GET(尽管302标准禁止post
变化get
,但实际使用时大家并不太遵守)(http1.0
的协议状态码)303 - See Other
该状态码表示由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源(302
状态码有着相同的功能,但是303
明确表示客户端应当采用GET
方法获取资源,把POST请求变为GET请求进⾏重定向)(http1.1
的协议状态码)304 - Not Modified
自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容305 - Use Proxy
请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理。307 - Temporary Redirect
代表暂时性转移,不会更改请求方法和消息主体(与302有相同的含义)(http1.1
的协议状态码)4XX(Client Error 客户端错误状态码)
400 - Bad Request
参数错误401 - Unauthorized
未被授权403 - Forbidden
请求被拒绝405 - Method Not Allowed
请求类型错误,例如不支持post但用post请求406 - Not Acceptable
服务器不支持请求的content-type413 - Request Entity Too Large
请求体太大不支持,一般是上传的文件超出了限定导致的5XX(Server Error 服务器错误状态码)
500 - Internal Server Error
表示服务端在执行请求时发生了错误。 可能是服务器或者应用存在bug503 - Service Unavailable
服务不可用,现在无法处理请求。缓存
强缓存
协商缓存
响应头
Last-Modified
响应头
Etag
Etag / If-None-Match
优先级高于Last-Modified / If-Modified-Since
,同时存在则只有Etag / If-None-Match
生效缓存位置
图像和网页
等资源主要缓存在disk cache
,操作系统缓存文件(如.JS)
等资源大部分都会缓存在memory cache
中。具体操作浏览器自动分配,看谁的资源利用率不高就分给谁。Memory Cache
胜在容量和存储时效性上。HTTP/2
中的内容,当以上三种缓存(以上两种和service-worker
)都没有命中时,它才会被使用。它只在会话(Session)
中存在,一旦会话结束就被释放,并且缓存时间也很短暂,在Chrome浏览器中只有5分钟左右,同时它也并非严格执行HTTP头中的缓存指令。Http2.0
二进制分帧层
HTTP2
是二进制协议,他采用二进制格式传输数据而不是1.x
的文本格式。1.1
响应是文本格式,而2.0
把响应划分成了两个帧,HEADERS(首部)和DATA(消息负载)多路复用
HTTP2
建立一个TCP连接
,一个连接上面可以有任意多个流(stream)
,所有的通信都在一个TCP连接上完成,真正实现了请求的并发
头部压缩
HTTP2为此采用HPACK压缩格式来压缩首部。头部压缩需要在浏览器和服务器端之间:
例如要传输
method:GET
,那我们只需要传输静态字典里面method:GET
对应的索引值就可以了,一个字节搞定。像
user-agent、cookie
这种静态字典里面只有首部名称而没有值的首部,第一次传输需要user-agent
在静态字典中的索引以及他的值,值会采用静态Huffman
编码来减小体积。第一次传输过user-agent
之后呢,浏览器和服务器端就会把它添加到自己的动态字典中。后续传输就可以传输索引了,一个字节搞定。服务器端推送
index.htm
,服务器端能够额外推送.js
和.css
。常见请求头和响应头
HTTP Request Header 常见的请求头:
HTTP Responses Header 常见的响应头:
请求方法相关
GET
方法URL
长度限制的原因get
方法请求的url
长度进行限制,这个限制是特定的浏览器及服务器对它的限制。2083
字节(2K+35)
。由于IE
浏览器对URL
长度的允许值是最小的,所以开发过程中,只要URL
不超过2083
字节GET
和POST
的请求的区别应用场景:
GET
请求是一个幂等的请求,一般Get
请求用于对服务器资源不会产生影响的场景,比如说请求一个网页的资源。而 Post 不是一个幂等的请求,一般用于对服务器资源会产生影响的情景,比如注册用户这一类的操作Get
请求缓存,但很少对Post
请求缓存。Get
请求的报文中实体部分为空,Post
请求的报文中实体部分一般为向服务器发送的数据。Get
请求可以将请求的参数放入url
中向服务器发送,这样的做法相对于Post
请求来说是不太安全的,因为请求的url
会被保留在历史记录中。url
长度的限制,所以会影响get
请求发送数据时的长度。这个限制是浏览器规定的,并不是RFC
规定的。post
的参数传递支持更多的数据类型。POST
和PUT
请求的区别PUT
请求是向服务器端发送数据,从而修改数据的内容,但是不会增加数据的种类等,也就是说无论进行多少次PUT
操作,其结果并没有不同。(可以理解为时更新数据)POST
请求是向服务器端发送数据,该请求会改变数据的种类等资源,它会创建新的内容。(可以理解为是创建数据)OPTIONS
请求方法及使用场景HTTP
请求方法;CORS
跨域资源共享时,对于复杂请求,就是使用OPTIONS
方法发送嗅探请求,以判断是否有对指定资源的访问权限。DNS
DNS 协议是什么
DNS完整的查询过程
DNS查询过程例子
www.baidu.com
的 IP 地址DNS
服务器向根域名服务器发送一个请求,根域名服务器返回负责.com
的顶级域名服务器的IP
地址的列表DNS
服务器再向其中一个负责.com
的顶级域名服务器发送一个请求,负责.com
的顶级域名服务器返回负责.baidu
的权威域名服务器的IP
地址列表迭代查询与递归查询
网络模型
OSI七层模型
OSI
参考模型中最靠近用户的一层,是为计算机用户提供应用接口,也为用户直接提供各种网络服务。我们常见应用层的网络服务协议有:HTTP
,HTTPS
,FTP
,POP3
、SMTP
等。应用层
数据的编码和转换功能**,确保一个系统的应用层发送的数据能被另一个系统的应用层识别base64
对数据进行编解码。如果按功能来划分,base64
应该是工作在表示层。表示层
实体之间的通信会话。TCP
UDP
就是在这一层。端口号既是这里的“端”。IP
寻址来建立两个节点之间的连接,为源端的运输层
送来的分组,选择合适的路由和交换节点,正确无误地按照地址传送给目的端的运输层
。这一层就是我们经常说的IP
协议层。IP
协议是Internet
的基础。网络层
规定了数据包的传输路线,而传输层
则规定了数据包的传输方式。网络层
与数据链路层
的对比,通过上面的描述,我们或许可以这样理解,网络层
是规划了数据包的传输路线,而数据链路层
就是传输路线。不过,在数据链路层上还增加了差错控制的功能。对等层
进行通信,这种通信方式称为对等层通信**。在每一层通信过程中,使用本层自己协议进行通信**。The text was updated successfully, but these errors were encountered: