这是我参与「第四届青训营 」笔记创作活动的第4天
前言
认识和记录浏览器中http请求的各个细节。
http的基本概念
HTTP:Hyper Text Transfer Protocol 超文本传输协议
是一个客户端和服务器端请求和应答的标准(TCP),用于从 WWW 服务器传输超文本到本地浏览器的超文本传输协议。
HTTP版本
HTTP/1.1标准化协议包含了链接复用,缓存,内容协商等功能;
HTTP/2版本 为了更高要求的用户体验,在传输上更加快速和稳定,具备更优异的表现,包含二进制协议,压缩header,服务器推送,···等
协议分析
协议报文包含请求和响应,Method,状态码
RESTful API表示一种API的设计风格
- 每一个url代表一种资源
- 客户端和服务器之间,传递这种资源的某种表现层;
- 客户端通过HTTP method,对服务器端资源进行操作,实现表现层状态转化。
状态码
常用请求头 和 常用响应头
缓存
强缓存 这个资源本地已经有了直接用就可以了;
Expires,时间戳Cache-Control-
- 可缓存性
no-cache协商缓存验证,no-store不使用任何缓存
- 可缓存性
-
- 到期
max-age:单位是s,存储的最大周期,相对于请求时间
- 到期
- 重新验证,重新加载:
must-revalidate,一旦资源过期,在成功向原始服务器验证之前,不能使用
协商缓存 这个缓存能不能用,是否是最新的,需要验证,有通信协商过程
- Etag/If-None-Match:资源特定版本的标识符,类似于指纹
- Last-Modified/If-Modified-Since:最后修改时间
http/2
更快,更稳定,更简单
帧(frame):Http/2通信的最小单位,每个帧都包含帧头,至少也会标识出当前帧所属的数据流。
二进制传输
消息:与逻辑请求或响应消息对应的完整的一系列帧;数据流:已建立的链接内的双向字节流,可以承载一条或多条消息。
Http连接都是永久的,而且仅需要每个来源一个连接; 流控制:阻止发送方向接收方发送大量数据的机制; 服务器推送
https介绍
在http的基础上加入了TSL/SSL加密,安全性更高
对称加密 加密和解密都是使用同一个密钥
非对称加密 加密和解密需要使用两个不同的密钥:公钥和私钥
工作原理
cross-origin 跨源问题
同源策略,是浏览器对 JavaScript 实施的安全限制,只要协议、域名、端口有任何一个不同,都被当作是不同的域。
CROS跨域资源共享
代理服务器
同源策略是浏览器的安全策略,不是HTTP的
dns域名解析
1、DNS为什么用UDP?
更正确的答案是 DNS 既使用 TCP 又使用 UDP。当进行区域传送(主域名服务器向辅助域名服务器传送变化的那部分数据)时会使用 TCP,因为数据同步传送的数据量比一个请求和应答的数据量要多,而 TCP 允许的报文长度更长,因此为了保证数据的正确性,会使用基于可靠连接的 TCP。
当客户端向 DNS 服务器查询域名 ( 域名解析) 的时候,一般返回的内容不会超过 UDP 报文的最大长度,即 512 字节。用 UDP 传输时,不需要经过 TCP 三次握手的过程,从而大大提高了响应速度,但这要求域名解析器和域名服务器都必须自己处理超时和重传从而保证可靠性。
2、递归查询和递归查询区别?
递归查询: 如果主机所询问的本地域名服务器不知道被查询域名的 IP 地址,那么本地域名服务器就以 DNS 客户端的身份,向其他根域名服务器继续发出查询请求报文,即替主机继续查询,而不是让主机自己进行下一步查询。
迭代查询: 当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的IP 地址,要么告诉本地服务器下一步应该找哪个域名服务器进行查询,然后让本地服务器进行后续的查询。
3、讲讲DNS解析过程?
浏览器缓存=>系统hosts文件=>本地DNS解析器缓存=>本地域名服务器(本地配置区域资源、本地域名服务器缓存)=>根域名服务器=>主域名服务器=>下一级域名域名服务器 客户端=>本地域名服务器(递归查询) 本地域名服务器=>DNS服务器的交互查询是迭代查询
总结
http协议本次只写了大概,还有很多细节的地方没有写到,应当继续加强学习和认识。