前端网络相关

112 阅读4分钟

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-typeapplication/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

待续...