|
@@ -0,0 +1,599 @@
|
|
|
+> [TOC]
|
|
|
+
|
|
|
+# 1、浏览器发起HTTP请求的典型场景
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+# 2、HTTP协议
|
|
|
+
|
|
|
+## 2.1、定义
|
|
|
+
|
|
|
+ 一种无状态的、应用层的、以请求/应答方式运行的协议,它使用可扩展的语义和自描述消息格式,与基于网络的超文本信息系统灵活的互动
|
|
|
+
|
|
|
+## 2.2、基于ABNF定义的HTTP消息
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 2.3、网络为什么要分层?
|
|
|
+
|
|
|
+**OSI三次模型**
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+* 应用层:HTTP,P2P实际所在的层次,解决业务问题
|
|
|
+* 表示层:负责将网络消息转换为应用层可以读取的消息
|
|
|
+* 会话层:建立session,建立会话和管理
|
|
|
+* 传输层:进程之间的通讯,报文可达。TCP
|
|
|
+* 网络层:广域网,IP协议
|
|
|
+* 数据链路层:局域网中,二层路由器
|
|
|
+* 物理层:物理介质。交换机
|
|
|
+
|
|
|
+**TCP/IP协议**
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 2.4、HTTP解决了什么问题?
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 2.5、HTTP设计遵循的web架构原则
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+* a路径:代理+反向代理+服务器
|
|
|
+* b路径:直接到达服务器
|
|
|
+* c路径:代理+服务器
|
|
|
+
|
|
|
+# 3、五类架构风格推到出HTTP的REST架构
|
|
|
+
|
|
|
+## 3.1、架构风格
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+### 3.1.1、数据流风格
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+### 3.1.2、复制风格
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+### 3.1.3、分层风格
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+### 3.1.4、移动代码风格
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+### 3.1.5、点对点风格
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 3.2、风格演化(LCODC$SS)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+# 4、URI的基本格式以及与URL的区别
|
|
|
+
|
|
|
+## 4.1、什么是URI
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 4.2、URI的组成
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 4.3、URI的格式
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 4.4、相对URI
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 4.5、URI编码
|
|
|
+
|
|
|
+### 4.5.1、为什么要进行URI编码?
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+### 4.5.2、编码方式
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+# 5、HTTP请求行
|
|
|
+
|
|
|
+## 5.1、请求格式
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 5.2、常见方法
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+# 6、HTTP响应
|
|
|
+
|
|
|
+## 6.1、HTTP响应行
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 6.2、HTTP响应码
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+# 7、长连接与短连接
|
|
|
+
|
|
|
+## 7.1、简单的短连接
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 7.2、持久的长连接
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 7.3、connect注意事项
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+# 8、HOST头部
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 8.1、如何传递IP地址到服务器?
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+# 9、请求与响应的上下文
|
|
|
+
|
|
|
+## 9.1、User-Agent
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 9.2、Referer
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 9.3、From
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 9.4、Server
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 9.5、Allow 与Accept-Ranges
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+# 10、内容协商
|
|
|
+
|
|
|
+## 10.1、定义
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 10.2、分类
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+### 10.2.1、Proactive
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+### 10.2.2、Reactive
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 10.3、协商要素
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+# 11、HTTP包体的传输方式
|
|
|
+
|
|
|
+## 11.1、定义
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 11.2、传输方式
|
|
|
+
|
|
|
+### 11.2.1、方式一
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+### 11.2.2、方式二
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 11.3、其他头部
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+# 12、form表单提交协议
|
|
|
+
|
|
|
+## 12.1、定义
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 12.2、关键属性
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+# 13、断点续传与多线程下载
|
|
|
+
|
|
|
+## 13.1、实际场景
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 13.2、HHTP Range规范
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+> 若if-Range头部校验不通过,会返回0-end(end表示此次发送的结尾)这么多的数据
|
|
|
+>
|
|
|
+> 与if-match头部返回两次性能优化
|
|
|
+
|
|
|
+## 13.3、服务器响应
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+# 14、cookie的格式和约束
|
|
|
+
|
|
|
+## 14.1、定义
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 14.2、问题与限制
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+# 15、session
|
|
|
+
|
|
|
+## 15.1、cookie与session
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 15.2、三方cookie
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+# 16、浏览器的同源策略
|
|
|
+
|
|
|
+## 16.1、为什么需要?
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 16.2、定义
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 16.3、CSRF
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+**这个方式已经被破解,攻击者可以获取你的全部cookie**
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 16.4、CORS简介
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+# 17、条件请求
|
|
|
+
|
|
|
+## 17.1、定义
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 17.2、验证
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 17.3、应用场景
|
|
|
+
|
|
|
+### 17.3.1、缓存更新
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+### 17.3.2、增量更新
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+### 17.3.3、更新丢失
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 17.4、nginx模块如何条件验证
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+# 18、HTTP缓存的工作原理
|
|
|
+
|
|
|
+## 18.1、原理
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 18.2、私有与共享缓存
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 18.3、缓存原理
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 18.4、判断缓存是否过期
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 18.5、Age 头部及 current_age 的计算
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+# 19、Cache-Control 头部
|
|
|
+
|
|
|
+## 19.1、定义
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 19.2、请求的含义
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 19.3、响应的含义
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+# 20、什么样的响应会被缓存?
|
|
|
+
|
|
|
+## 20.1、定义
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 20.2、使用条件
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 20.3、如何缓存更新频率不同的资源
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+# 21、HTTP重定向
|
|
|
+
|
|
|
+## 21.1、为什么需要 URI 重定向?
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 21.2、重定向流程
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 21.3、重定向响应返回码
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 21.4、重定向循环
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+# 22、Http Tunnel 隧道
|
|
|
+
|
|
|
+## 22.1、目的
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 22.2、请求行
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 22.3、常见应用
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ 
|
|
|
+
|
|
|
+# 23、网络爬虫
|
|
|
+
|
|
|
+## 23.1、定义
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 23.2、对待爬虫的态度
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 23.3、网络爬虫如何抓取数据?
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+# 24、HTTP资源的认证
|
|
|
+
|
|
|
+## 24.1、定义
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 24.2、响应
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+# 25、DNS协议解析域名
|
|
|
+
|
|
|
+## 25.1、定义
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 25.2、结构
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+## 25.3、查询与响应
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|