这是我参与「第四届青训营 」笔记创作活动的的第9天
1.什么是http
http是基于超文本传输协议的无状态,它位于应用层是基于tcp协议的传输。 基本的http包含了请求头和响应头两部分组成
2.http发展历程
http1以前
- 只有简单的get和post两种请求
http1.0
- 添加多种请求方式put,delelte update等
- 添加了请求头字段
- 添加了状态码
http1.1
- 添加缓存机制
- 添加内容协商
- 添加链路复用:tcp建立建立后,长连接。不会四次挥手耗费性能
http2
- 服务器推送
- header字段压缩
- 二进制协议
3.状态码
- 2xx:表示成功的状态码
- 3xx: 有关重定向和缓存的状态码
- 4xx: 客户端发生的错误
- 5xx: 服务端发生的错误
4. 常用请求头
accept: 判断浏览器可以接收的请求头 cache-control: 设置是否缓存的字段 origin: 判断请求的来源 use-agent: 客户端的一些重要信息
5.缓存机制
- 访问浏览器,浏览器判断是否有缓存,没有则请求后端服务器资源
- 如果有缓存,首先判断是否存在强缓存,如果有,则直接输出状态码304
- 如果强缓存失效,时间过期。则判断是否有弱缓存,此时弱缓存有两类。
- 首先判断etag是否存在,如果则判断上次服务器修改的和最新的服务器资源是否相同,如果相同,则返回状态码304.否则,重新加载服务器资源,更改etag字段
- etag如果不存在,则判断last-modify字段,如果这个字段,对比上次修改的时间是否和当前服务器最新的数据时间相同,如果相同,返回状态码304.否则请求后端数据
6.发起请求
AJAX之XHR (XHR: XMLHttpRequest)
AJAX之Fetch
- XMLHttpRequest的升级版
- 使用Promise
- 模块化设计, Response, Request, Header对象
- 通过数据流处理对象, 支持分块读取
标准库: HTTP/HTTPS
- 默认模块, 无需安装其他依赖
- 功能有效/不是十分友好
常用的请求库: axios
- 支持浏览器, nodejs环境
- 丰富的拦截器
7.请求方式
8.缓存
- 强缓存
-
- 两个请求头 Expires,时间戳;Cache-Control
- 协商缓存
-
- Etag/lf-None-Match :资源的特定版本的标识符,类似于指纹
- Last-Modified/lf-Modified-Since:最后修改时间
9.HTTP/2
- 帧(frame) :HTTP/2通信的最小单位,每个帧都包含帧头,至少也会标识出当前帧所属的数据流。可以交错发送,接收方再重组织
- 消息:与逻辑请求或响应消息对应的完整的一系列帧。
- 数据流:已建立的连接内的双向字节流,可以承载一条或多条消息。
- HTTP/2连接都是永久的,而且仅需要每个来源一个连接
- 流控制︰阻止发送方向接收方发送大量数据的机制
10.HTTPS
11.WebSocket
- 浏览器与服务器进行全双工通讯的网络技术
- 典型场景∶实时性要求高,例如聊天室
- URL使用ws://或wss://等开头
12.使用Http协议访问Web过程
当用户在浏览器地址栏输入URL,browser进程处理URL信息后向浏览器内核发送请求,请求经过应用层->传输层->网络层->链路层到达服务器端,相应的服务器端返回响应,浏览器内核读取响应并进行渲染,最终页面加载完成。
13.与http密不可分的三个协议:IP、TCP和DNS
- 负责传输的IP协议:ip(internet protocol)网际层协议,把各种数据包传送给对方,中间会涉及到跨网段传输,用到ARP技术,奖逻辑网络地址转化昵称mac地址。
- 确保可靠性传输的TCP协议:TCP位于传输层,提供可靠的字节流服务,TCP协议会通过三次握手建立连接。
- 负责域名解析的DNS服务:DNS将域名转换成IP地址。
14.常用请求头
- Accept 接收类型,表示浏览器支持的MIME类型(对标服务端返回的Content-Type)
- Content-Type 客户端发送出去实体内容的类型
- Cache-Control 指定请求和响应遵循的缓存机制,如no-cache
- lf-Modified-Since 对应服务端的Last-Modified,用来匹配看文件是否变动,只能精确到1s之内
- Expires 缓存控制,在这个时间内不会请求,直接使用缓存,服务端时间
- Max-age 代表资源在本地缓存多少秒,有效时间内不会请求,而是使用缓存
- lf-None-Match 对应服务端的ETag,用来匹配文件内容是否改变(非常精确)
- Cookie 有cookie并且同域访问时会自动带上
- Referer 该页面的来源URL(适用于所有类型的请求,会精确到详细页面地址, csrf拦截常用到这个字段)
- Origin 最初的请求是从哪里发起的(只会精确到端口) ,Origin比Referer更尊重隐私
- User-Agent 用户客户端的一些必要信息,如UA头部等
15.常用响应头
- Content-Type 服务端返回的实体内容的类型
- Cache-Control 指定请求和响应遵循的缓存机制,如no-cache
- Last-Modified 请求资源的最后修改时间
- Expires 应该在什么时候认为文档已经过期,从而不再缓存它
- Max-age 客户端的本地资源应该缓存多少秒,开启了Cache-Control后有效
- ETag 资源的特定版本的标识符, Etags类似于指纹
- Set-Cookie 设置和页面关联的cookie,服务器通过这个头部把cookie传给客户端
- Server 服务器的一些相关信息
- Access-Control- 服务器端允许的请求Origin头部(譬如为*)
- Allow-Origin-Allow-Origin 服务器端允许的请求Origin头部(譬如为*)