HTTP实用指南 | 青训营笔记
这是我参与「第四届青训营 」笔记创作活动的第6天
初识HTTP
OSI Reference Model TCP/IP Conceptual Layers Application <--HTTP--> Application
定义: 超文本传输协议
组成:响应+请求
POST/upload HTTP/1.1
Host:www.example.org
Content-Type:application/json
Content-Length:15
{"msg":"hello"}
特点: 简单可扩展、无状态
协议分析
发展
1、HTTP/0.9单行协议
- 请求GET/mypage.html
- 相应只有HTML文档
2、HTTP/1.0构建可扩展性
- 增加了Header
- 有了状态码
- 支持多种文档类型
3、HTTP/1.1标准化协议
- 链接复用
- 缓存
- 内容协议
4、HTTP/2更优异的表现
- 二进制协议
- 压缩header
- 服务器推送
5、HTTP/3草案
报文
Method
- HTTP/0.9
只有一种方法,GET后跟文档地址和可选的端口地址,并以回车 (CR) 和换行 (LF) 结束
有四个术语:连接、断开连接、请求和响应
- HTTP/1.0
每个请求都附加了 HTTP 版本,在响应开始时发送状态代码,请求和响应都包含 HTTP 报文头
内容类型能够传输 HTML 文件以外的文档
支持三种请求方法:GET,Head,和POST。它还有其他术语:消息、资源、实体、客户端、用户代理、服务器、源服务器、代理、网关、隧道和缓存
- HTTP/1.1
使用TCP长连接的方式改善了 HTTP/1.0 短连接造成的性能开销;
支持管道(pipeline)网络传输,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,可以减少整体的响应时间
- HTTP/2
HTTP/2 构建了对流量的并行化、优先化和流量控制,通信是通过单个 TCP 连接与任意数量的双向流进行的
是一个多路复用协议,并行请求通过同一连接处理
提供了将一种资源优先于另一种资源的能力,从而将其置于响应行的头部,它允许主动将表示从服务器推送到客户端
使用二进制协议而不是文本。这使其成为机器可读的并提高了性能。它还提高了整体的安全性 请求和响应头被压缩,帧在流上传送,数据帧有效载荷受流控制。
状态码
200 OK - 客户端请求成功
301 - 资源(网页等) 被永久转移到其它 URL
302 - 临时跳转
401 Unauthorized - 请求未经授权
404-请求资源不存在,可能是输入了错误的 URL
500-服务器内部发生了不可预期的错误
504 Gateway Timeout-网关或者代理的服务器无法在规 定的时间内获得想要的响应。
常见请求头
Accept 接收类型,表示浏览器支持的MIME类型(对标服务端返回的Content-Type)
Content-Type 客户端发送出去实体内容的类型
Cache-Control 指定请求和响应遵循的缓存机制,如no-cache
If-Modified-Since 对应服务端的Last-Modified, 用来匹配看文件是香变动,只能精确到1S之内
Expires 缓存控制,在这个时间内不会请求,直接使用缓存.服务端时间
Max-age 代表资源在本地缓存多少秒,有效时间内不会请求,而是使用缓存
If-None-Match 对应服务端的ETag,用来匹配文件内容是否改委(非常精确)
Cookie 有cookie并且同域访问时会自动带上
Referer 该页面的来源URL(适用于所有类型的请求,会精确到详细页面地址,csr拦截常用到这个字段)
Origin 最初的请求是从哪里发起的 (只会精确到端口)Origin比Referer更尊重隐私
User-Agent 用户客户端的一些必要信息,如UA头部等
常见响应头
Content-Type 服务端返回的实体内容的类型
Cache-Control 指定请求和响应遵循的缓存机制.如no-cache
Last-Modified 请求资源的最后修改时间
Expires 应该在什么时候认为文档巴经过期从而不再缓存它
Max-age 客户端的本地资源应该缓存多少秒.开启了 Cache -Control后有效
ETag 资源的特定版本的标识符,Etags类似于指纹
Set-Cookie 设置和页面关联的cookie,服务器通过这个头部把cookie传给客户端
Server 服务器的一些相关信息
Access-Control-Allow-Origin 服务器端允许的请求Origin头部(譬如为*)
缓存
缓存分为强缓存 和协商缓存两种
强缓存相关Header
- Expires时间戳,到期时间
- Cache-Control
- 可缓存性
- no-cache:协商缓存验证
- no-store:不使用任何缓存
- 到期
- max-age:单位是秒,存储的最大周期,相对于请求的时间
- 重新验证,重新加载
- must-revalidate:一旦资源过期,在成功向原始服务器验证之前,不能使用
协商缓存
- Etag/if-None-Match :资源的特定版本的标识符,类似于指纹
- Last-Modified/if-Modified-Since:最后修改时间
场景分析
跨域
CORS 设置相关跨域的响应头来解决跨域
代理服务器
- 同源策略是服务器对于浏览器的安全策略,不是对HTTP的,服务器之间没有同源策略
- 部署一台和当前浏览器域名相同的服务器,然后浏览器通过发送给代理服务器来转发请求给服务器