HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的 WWW 文件都必须遵守这个标准。
HTTP 是一种能够获取如 HTML 这样的网络资源,一般都浏览器这样的接受方发起的,一个完整的 web文档通常由不同的子文档拼接组成,像是文本、布局、图片、视频、脚本等等。
HTTP 是一个 基于TCP/IP通信协议 来传递数据(HTML 文件, 图片文件, 查询结果等)。
工作原理
client-server
协议,客户端发起请求,服务端接受请求并做出相应。requests
,被服务端响应的消息叫做 responses
。 特点
HTTP是基于客户端/服务端(C/S)的架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议。
一个HTTP"客户端"是一个应用程序(Web浏览器或其他任何客户端),通过连接到服务器达到向服务器发送一个或多个HTTP的请求的目的。
一个HTTP"服务器"同样也是一个应用程序(通常是一个Web服务,如Apache Web服务器或IIS服务器等),通过接收客户端的请求并向客户端发送HTTP响应数据。
HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接。
一旦建立连接后,数据消息就通过类似Internet邮件所使用的格式[RFC5322]和多用途Internet邮件扩展(MIME)[RFC2045]来传送。
客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成。
HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。
HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。
方法 | 描述 |
---|---|
GET | 获取资源 |
POST | 传输实体主体 |
PUT | 传输文件 |
DELETE | 删除文件 |
HEAD | 获取报文首部 |
OPTIONS | 询问支持的方法 |
TRACE | 追踪路径 |
CONNECT | 要求用隧道协议连接代理 |
LINK | 建立和资源之间的联系 |
UNLINKE | 断开连接关系 |
信息响应,表示接受的请求正在处理
成功响应,请求被正常处理
Content-Range
重定向,表明浏览器需要执行某些特殊的处理以正确的处理请求
客户端响应,客户端发生错误
服务端响应,服务器发生错误
缓存分为浏览器缓存和 HTTP 缓存。 HTTP 缓存分为两种:强缓存和协商缓存, 浏览器缓存分为本地储存(Cookie、WebStorage、indexDB等)和默认缓存(往返的BFCache) 这里只学习 HTTP 缓存
不会像服务器发送请求,直接从浏览器缓存中读取资源。
强制缓存在缓存数据未失效的情况下(即Cache-Control的max-age没有过期或者Expires的缓存时间没有过期),那么就会直接使用浏览器的缓存数据,不会再向服务器发送任何请求。强制缓存生效时,http状态码为200。
no-cache
是,不使用缓存,更具新鲜度来使用缓存max-age=300
时,则代表在这个请求正确返回时间(浏览器也会记录下来)的 5 分钟内再次加载资源,就会命中强缓存。优先级依次递减 Pragma
优先级最高
强缓存失效或不存在的时候,向服务器发送请求,由服务器决定是否使用缓存。
浏览器接受后,如果再次请求,会在将Last-Modified
字段,作为请求头中携带If-Modified-Since
字段的值发送给服务器。
服务器接受后会进行对比:
- 如果请求头中的这个值小于最后修改时间,说明是时候更新了。返回新的资源,跟常规的HTTP请求响应的流程一样。
- 否则返回304,告诉浏览器直接用缓存。
Respones Header
把值传改浏览器。浏览器则会在下次请求时,将 ETag
的值作为If-None-Match
字段的内容,发送给浏览器进行对比。总结流程
首先通过 Cache-Control 验证强缓存是否可用
缓存参考文档
也就是我们俗称的“跨域”