-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
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 #28
Comments
缓存强缓存浏览器从本地缓存中获取数据,不需要与服务器交互。状态码200 Header 中的 Expires 和 Cache-Control 控制强缓存 Cache-Control:
Expires:
表示缓存的具体过期时间。超过这个时间后就会重新请求。由于这个时间是服务端计算的。如果服务端于客户端的时间存在偏差时,该功能可能会存在问题 协商缓存如果不走强缓存,就会走协商缓存。让服务器来确定缓存的资源是否可用 Etag 返回资源的唯一标识,当资源内容改动后,Etag会变化。 If-None-Match 浏览器再次请求同一资源时,会发送If-None-Match,值为缓存的Etag值。 如果值和服务端相同,则返回 If-None-Match 为 false,返回状态码 304.客户端继续使用本地缓存 不同返回 If-None-Match 为 true, 返回新的数据,状态码为200.客户端使用新返回的数据 Last-Modified 资源在服务器最后修改时间. 该功能相较于Etag 存在一些问题:
因此 Last-Modified 优先级低于Etag If-Modified-Since 功能和 If-None-Match 类似。客户端再次请求时,会发送至之前返回的 Last-Modified 时间。服务端会与文件最后修改时间进行判断。 如果时间一致,则返回 304, 本地使用缓存 如果时间不一致,则返回新内容。 返回状态码 200 |
HTTP连接过程和HTTPS连接过程WIP |
常见的状态码WIP |
HTTP 连接效率HTTP 1.0在 HTTP 1.0 时,每次链接都会建立一个TCP连接,连接成本大。浏览器限制同个域名的请求最多并发6个(Chrome),所以超出的请求只能在等待队列中进行排队。 HTTP 1.1在HTTP 1.1 时,引入了 Keep-Alive, 同一个域名的请求共用一个TCP连接,多个连接不会重新创建TCP链接。但是还是受限于最大并发数的限制,性能上相较于HTTP 1.0 有提升。 HTTP 1.1 还引入了 pipe, 用来解决最大并发数。 pipe允许将所有请求都发给服务器,服务器按顺序一个个响应。节省了发送的等待时间,但是如果有一个请求阻塞了,会导致后面的请求都会被阻塞。 优化HTTP 1.1 的请求速度
HTTP 2来到HTTP 2.0 时,由于HTTP 2.0基于二进制帧,不是基于文本的。可以做到无序传输。所有的请求都是建立在一个HTTP连接上的,由于所有数据都是流,不会存在互相阻塞的问题。实现了多路复用的功能。但是还是无法解决TCP队头阻塞的问题。 |
HTTP 版本
HTTP 1.0
无状态,无连接的应用层协议,每次请求都需要和服务器建立一个TCP连接
HTTP 1.1
1.0 的升级版,支持长连接,通过 Connection 字段设置 Keep-Alive 保持HTTP连接,避免每次连接都重复连接和断开TCP, 提高来连接效率
支持断点续传,请求头中新增 Range字段
支持 pipe 传输
支持长连接
HTTP 2
HTTP 3
1.基于UDP的QUIC协议
The text was updated successfully, but these errors were encountered: