TCP
三次握手:SYN 连接请求
client握手:SYN:i seq:x
server握手:SYN:i ack_number: client.seq+1 seq:y//用于确认信息
client握手:ACK:1 seq:client.seq+1 ack_number:server.seq+1
四次挥手:FIN 断连请求
服务器之间会再一定时间内未收到信息,再次发出同样的请求。所以第二次挥手避免这种现象。并多出时间去处理可能未完成的发送数据
client挥手:FIN:j seq=y+1 ack=x+2
server挥手:ack=x+3 //确认收到,不用再发
server挥手:FIN:j seq=y+1 //处理完之前未发送完成的东西后 发送断连确认
client挥手:ack=y+2 //确认断连 并等待一会看是否服务器没有收到并再次发送
HTTP
缓存
no-cache和no-store的区别
no-cache 不是直接使用,而是先比对浏览器资源是否更新
no-store 无论是否更新都重新请求
浏览器缓存块: memory cache tab未关闭/ disk cache 永久保存
缓存类型:
强缓存:cache-control(max-age: ) expires 未超过缓存时间则直接使用memory,直接减少请求
协商缓存:Etag last-modified 超过缓存时间,拿到缓存的Etag和服务器做对比。如果一致返回304。 减少响应体以及响应时间
HTTP常用请求头
\请求行
url 协议版本 method
通用型
date:UTC
cache-control
connection:tcp连接是否保持 keep-alive/close
**实体标头:**描述消息正文内容
-
Content-Type 实体中消息的类型
-
Content-Length 实体报头指示实体主体的大小,以字节为单位,发送到接收方。
-
Content-Language 实体报头描述了客户端或者服务端能够接受的语言。
-
Content-Encoding 这又是一个比较麻烦的属性,这个实体报头用来压缩媒体类型。Content-Encoding 指示对实体应用了何种编码。
常见的内容编码有这几种: gzip、compress、deflate、identity ,这个属性可以应用在请求报文和响应报文中
请求标头:
HOST:当前页面的host
referer:浏览器记录的当前页面的来源地址。默认是当前origin
cookie:cookie信息
content-type: application/json
multipart/form-data text/html
响应标头:
expires: 过期时间 (304/200)
etag: 缓存标记,标记未变则未更新(304/200)
last_modified: 最后一次更新时间 (304/200)
cache-control: 已知Expires的缺点之后,在HTTP/1.1中,增加了一个字段Cache-control,该字段表示资源缓存的最大有效时间,在该时间内,客户端不需要向服务器发送请求
这两者的区别就是前者是绝对时间,而后者是相对时间。如下:
Cache-control: max-age=2592000
下面列举一些 Cache-control
字段常用的值:(完整的列表可以查看 MDN)
max-age
:即最大有效时间,在上面的例子中我们可以看到must-revalidate
:如果超过了max-age
的时间,浏览器必须向服务器发送请求,验证资源是否还有效。no-cache
:虽然字面意思是“不要缓存”,但实际上还是要求客户端缓存内容的,只是是否使用这个内容由后续的对比来决定。no-store
: 真正意义上的“不要缓存”。所有内容都不走缓存,包括强制和对比。public
:所有的内容都可以被缓存 (包括客户端和代理服务器, 如 CDN)private
:所有的内容只有客户端才可以缓存,代理服务器不能缓存。默认值。
请求体
数据
响应码
200 成功
301 永久重定向
302 临时重定向
304 内容未修改,可直接使用缓存。不用返回response信息
400 前端请求的request数据不符合服务端规定
403 被拒绝,没有访问权限
404 访问url不存在
500 服务端错误
503 服务被占用,服务不可用
https
ssl+http
client 需要和你建立SSL连接 server
client 返回ssl协议证书+公钥 server
client 使用公钥非对称加密本地随机数 server
client 使用私钥解密得出客户端随机数 server
client 使用该随机数对称加密内容传输 server
client 使用本地的随机数对称解密获取内容server
http2-http1
主要做了:格式化数据和改变数据传输方式
压缩头部:1.zip等压缩 2.只传一次后面通过索引维护
二进制数据+优先级算法:head. body都使用二进制格式传输,数据更小错误更少。一个个二进制帧。
多路复用:1.允许同时发送多个request+response 2.避免长应用的堵塞
get post的区别
get
get请求cache
get params直接接在url上
get 只有一个tcp数据包
post
不会默认缓存
post请求放在请求体中
post有两个tcp数据包:1.head包response: 100 continue 2.body包传输
前端缓存机制
cookie
localStorage