-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
HTTP知识点总结
HTTP
HTTP报文结构
- 起始行:
GET /home HTTP/1.1(请求)HTTP/1.1 200 OK(响应) - 头部
- 空行:用来区分头部和实体,第一个空行后的内容全部认为是实体
- 实体
注意事项
- 字段名不区分大小写
- 字段名不允许出现空格,不可以出现下滑线
_ - 字段名后面必须紧接着
:
Content-Type / Accept
- text: text/html, text/plain, text/css
- image: image/gif, image/jpeg, image/png
- audio: audio/video: audio/mpeg, video/mp4
- multipart: multipart/form-data
- application: application/json, application/javascript, application/pdf, application/x-www-form-urlencoded
Content-Encoding / Accept-Encoding
- gzip
- deflate
- br
Content-Language / Accept-Language
// 发送端
Content-Language: zh-CN, zh, en
// 接收端
Accept-Language: zh-CN, zh, en代理
- Via: 代理服务器转发记录,多个代理按转发顺序排列,用
,隔开 - X-Forwarded-For: 记录请求方的IP,客户端或代理服务器Ip
- X-Real-IP: 获取用户真实IP
URI结构
scheme://user:password@host:port/path/to/somewhere?key=value#fragment
状态码
1xx
表示目前是协议处理的中间状态,还需要后续操作
比如post请求一般是先发送head部分,服务器返回100(continue)再发送body
- 100
- 101 Switching Protocols: HTTP升级为WebSocket时服务器返回101
2xx
- 200
- 204 No Content
3xx
- 301 永久重定向:当网站从HTTP升级为HTTPS时之前的URL被废弃时应返回301,浏览器会做缓存优化,下次自动访问新地址
- 302 临时重定向
- 304 Not Modified 命中协商缓存
4xx
- 400 Bad Request 请求出错,原因位置
- 403 Forbidden 服务器禁止访问
- 404 Not Found 找不到资源
- 405 Method Not Allowed
5xx
- 500 Internal Server Error:服务器出错,原因位置
- 502 Bad Gateway
- 503 Service Unavailable:服务器当前很忙,暂时无法响应服务
HTTP/2
- 头部压缩: HTTP/1可以根据
Content-Encoding对实体部分压缩,HTTP/2实现了对头部的压缩 - 多路复用:
- 同域名下所有通信都在单个连接中完成。
- 单个连接可以承载任意数量的双向数据流。
- 数据流以消息的形式发送,而消息又由一个或多个帧组成,多个帧之间可以乱序发送,因为根据帧首部的流标识可以重新组装。
- 二进制分桢: HTTP/2将报文全部转为二进制,多个二进制帧之间不存在前后关系,因此不会有阻塞问题
- 服务器推送: TCP连接建立后,服务器可以主动将客户端之后需要的数据直接推送,不需要先等待客户端的请求
HTTPS
证书验证阶段
- 客户端发起HTTPS请求
- 服务器返回HTTPS证书(包含公钥)
- 客户端验证证书是否合法,如果不合法则提示警告
数据传输阶段
- 验证证书合法后,在本地生成一个随机数
- 通过公钥将随机数加密后发送至服务器
- 服务器通过私钥对随机数解密
- 服务器通过随机数构造对称加密算法,对返回数据加密
- 客户端通过随机数对数据解密
缓存
强缓存
命中强缓存直接读取本地资源,不会向服务器发请求
- Expires: 值是一个日期,表示资源过期时间,本地时间可能与服务器时间不一致,优先级最低
- Cache-Control
- max-age: 单位是秒,表示缓存有效时间。
max-age=10000 - no-cache: 不使用强缓存
- no-store: 禁止缓存(包括强缓存和协商缓存)
- private: 只允许客户端缓存,不允许代理服务器或CDN缓存
- public: 允许客户端、代理服务器、CDN缓存
- must-revalidate: 在缓存过期前可以使用,过期后必须向服务器验证
- max-age: 单位是秒,表示缓存有效时间。
- Pragma: 只有一个值(no-cache,与Cache-Control的no-cache一致),优先级最高
协商缓存
命中协商缓存返回304
- ETag/If-None-Match: 值是一串hash,服务器资源发生变化时hash值也会改变
- Last-Modified/If-Modified-Since: 值代表文件最后的修改时间,前者存在于响应头中,后者存在于请求头中
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels