这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天
Http使用指南
一、初识HTTP
HTTP(Hyper Text Transfer Protocol)超文本传输协议,它是应用层协议,基于TCP协议。
Http网络协议包:
在基于B/S结构下互联网通信过程中,所有在网络中传递信息都是保存在http网络协议包中。
分为Http请求协议包和Http响应协议包。
Http请求协议包
Http请求协议包内部空间,自上而下分为4个空间
-
请求行
url:请求地址 method:请求方式(Post/Get) -
请求头
请求参数信息(Get请求) -
空白行
没有任何内容,起到隔离作用 -
请求体
请求参数信息(Post请求)
Http响应协议包
Http请求协议包内部结构,自上而下分为四个空间
-
状态行
Http状态码 -
响应头
content-type:指定浏览器采用对应编译器对响应体二进制数据进行解析 -
空白行
没有任何内容,起到隔离作用 -
响应体
可能是被访问的静态资源文件内容 可能是被访问的静态文件命令 可能是被访问的动态资源文件运行结果 **** 都是以二进制形式 ****
二、协议分析
持续发展
- Http/0.9 单行协议
- 请求GET/myspace.html
- 响应只有HTML文档
- Http/1.0 构建可扩展性
- 增加了Header
- 有了状态码
- 支持多种文档类型
- Http/1.1 标准化协议
- 链接复用
- 缓存
- 内容协商
- Http/2
- 二进制协议
- 压缩header
- 服务器推送
- Http/3 草案
报文解析
Method
状态码
常见状态码:
| 常见状态码 | |
|---|---|
| 200 | OK-客户端请求成功 |
| 301 | 资源(网页等)被永久转移到其他URL |
| 302 | 临时跳转 |
| 401 | Unauthorized-请求未经授权 |
| 404 | 请求资源不存在,可能是输入了错误的URL |
| 500 | 服务器内部发生了不可预期的错误 |
| 504 | Gateway Timeout-网关或者代理的服务器无法在规定的时间内获得想要的响应 |
RESTful API
一种API设计风格
- 每一个URL代表一种资源
- 客户端和服务器之间,传递这种资源的某种表现层
- 客户端通过HTTP method,对服务器端资源进行操作,实现“表现层状态转化”
常用请求头
| 常用请求头 | |
|---|---|
| Accept | 接受类型,表示浏览器支持的MIME类型(对标服务端返回的Content-Type) |
| Content-Type | 客服端发送出去实体内容的类型 |
| Cache-Controll | 指定请求和响应遵循的缓存机制,如no-cache |
| If-Modified-Since | 对应服务端的Last-Modified,用来匹配看文件是否变动,只能精确到1s之内 |
| Expires | 缓存控制,在这个时间内不会请求,直接使用缓存,服务端时间 |
| Max-age | 代表资源在本地缓存多少秒,有效时间内不会请求,而是使用缓存 |
| If-None-Match | 对应服务端的ETag,用来匹配文件内容是否改变(非常精确) |
| Cookie | 有cookie并且同域访问时会自动带上 |
| Referer | 该页面的来源URL(适用于所有类型的请求,会精确到详细页面地址,csrf拦截常用到这个字段) |
| Origin | 最初的请求是从哪里发起的(只会精确到端口),origin比referer更尊重隐私 |
| User-Agent | 用户客户端的一些必要信息,如UA头部 |
常用响应头
缓存
-
强缓存
-
Expires,时间戳
-
Cache-Controll
no-cache:协议缓存验证
no-store:不使用任何缓存
-
到期
Max-age:单位是秒,存储的最大周期,相对于请求的时间
-
重新验证*重新加载
must-revalidate:一旦资源过期,在成功向原始服务器验证之前,不能使用
-
-
协商缓存
- Etag/If-None-Match:资源的特定版本的标识符,类似于指纹
- Last-Modified/If-Modified-Since:最后修改时间