HTTP协议
相关概念
报文
请求
第一行
- 请求方法
- URL
- 协议版本
Header
空行
请求的内容主体
响应
第一行
- 协议版本
- 状态码
- 描述
Header
空行
响应的内容主体
URL
U niform Resource Locator
- URI唯一标识一个资源,但可能未定义找的办法
- URL 在 URI 的基础上增加了定位能力
HTTP方法
分类
GET
- 获取资源
HEAD
- 获取报文首部
- 和 GET 方法类似,但不返回报文body部分
POST
- 传输实体主体
- POST 主要用来传输数据,而GET 主要用来获取资源
PUT
- 上传文件
PATCH
- 对资源进行部分修改
DELETE
- 删除文件
OPTIONS
- 查询服务器支持的方法
CONNECT
- 要求在与代理服务器通信时建立隧道
TRACE
- 发送请求时,在 Max-Forwards 首部字段中填入数值,每经过一个服务器就会减 1,当数值为 0 时就停止传输
GET VS POST
作用
- GET 用于获取资源,而 POST 用于传输实体主体
参数
GET 的参数是以查询字符串出现在 URL
非ASCII需要编码
POST 的参数存储在实体主体中
幂等性
一般来说,服务器不应该因为GET请求而改动(如数据库)
- GET幂等,不具有副作用
- POST不幂等
缓存需要满足的条件
- 方法本身可缓存
- 状态码可缓存
- Header的Cache-Control允许缓存
XMLHttpRequest
概念
- 提供了一个通过 URL 来获取数据的简单方式
- 在 AJAX 中被大量使用
- 不会使整个页面刷新
GET和POST的区别
- GET的HEADER和DATA一次性发送
- POST先后发送
状态码
响应报文的状态码
1XX
- Information
- 正在处理
2XX
- Success
- 正常处理完毕
3XX
- Redirection
- 需要额外操作以完成请求
4XX
- Client Error
- 服务器无法处理请求
5XX
- Sever Error
- 服务器处理请求时发生错误
常见状态码
200(OK)
3XX
- 301(永久重定向)
- 302(临时重定向)
4XX
- 400(语法错误)
- 401(Unauthorized)
- 403(Forbidden)
- 404(Not Found)
应用问题
连接
短连接
- HTTP 1.0
- 一次连接一次请求
长连接
- HTTP 1.1
- 一次连接多次请求
流水线
- 长连接上不等到收到回复就发送新的请求
Cookie
作用
- 会话状态管理
- 浏览器行为跟踪
创建过程
- 服务器发送的响应报文包含 Set-Cookie 首部字段
- 客户端之后对同一个服务器发送请求时,会从浏览器中取出 Cookie 信息并通过 Cookie 请求首部字段发送给服务器
分类
- 会话期Cookie
- 持久性Cookie
作用域
- Domain 标识指定了哪些主机可以接受 Cookie
- Path 标识指定了主机下的哪些路径可以接受 Cookie
HTTP ONLY
- 标记为 HttpOnly 的 Cookie 不能被 JavaScript 脚本调用
Cookie VS Session
Session
概念
- 用户信息通过 Cookie 存储在用户浏览器,利用 Session 存储在服务器端
过程
- 浏览器端存储Session ID,再次请求时Cookie中携带Session ID
禁用Cookie
- 将Session ID作为URL参数传递
Session更安全,但服务器开销更大
缓存
作用
- 降低服务器压力
- 提高客户端获取资源的速度
位置
- 客户端浏览器缓存
- 代理服务器缓存
Cache-Control
禁止缓存
- Cache-Control: no-store
强制确认缓存
- Cache-Control: no-cache
私有缓存和公有缓存
- Cache-Control: private(浏览器)
- Cache-Control: public(代理服务器)
过期机制
max-age
- 在请求报文中表示能接受的最大缓存时间
- 在响应报文中表示缓存在服务器中存在的时间
expires
内容
内容协商
类型
服务端驱动型
概念
- 服务端根据请求的首部字段Accept-Charset、Accept-Encoding等返回最合适的内容
存在的问题
- 需要额外的冗长的信息
- 缓存效率低
代理驱动型
- 300 Multiple Choices
- 406 Not Acceptable
Vary
格式
- Vary: Accept-Language
作用
- 只有当缓存服务器中的缓存满足内容协商条件时,才能使用该缓存,否则应该向源服务器请求该资源
内容编码
作用
- 将实体主体进行压缩,减少传输数据量
常见编码方式
- gzip
- compress
- deflate
- identity
范围请求
概念
- 客户端只请求一部分数据
字段
Range
GET /z4d4kWk.jpg HTTP/1.1
Host: i.imgur.com
Range: bytes=0-1023Accept-Range
Accept-Ranges: bytes
服务端的响应
- 206 Partial Content
- 416 Requested Range Not Satisfiable
- 200 OK(不支持范围请求)
Chunked Transfer Encoding
- 可以把数据分割成多块,让浏览器逐步显示页面
多部分对象集合
- 报文主体内可含有多种类型的实体同时发送
虚拟主机
- HTTP/1.1 使用虚拟主机技术,使得一台服务器拥有多个域名
通信数据转发
代理
作用
- 缓存
- 负载均衡
- 网络访问控制
- 访问日志记录
分类
正向代理
- 客户端可以感知代理的存在
- 代理客户端
反向代理
- 客户端难以感知代理的存在
- 代理服务端
网关
- 网关服务器会将 HTTP 转化为其它协议进行通信
隧道
- 使用 SSL 等加密手段,在客户端和服务器之间建立一条安全的通信线路
HTTPS
HTTP的安全问题
- 明文通信(被窃取)
- 不验证对方身份(身份伪装)
- 无法验证报文完整性(被篡改)
HTTPS的通信方式
- HTTP–>SSL–>TCP
功能
加密(防窃取)
对称密钥
- 速度快
- 无法把密钥安全的发送到对方手里
非对称密钥
- 速度慢
- 可以把公钥安全的发送到对方手里
两种加密方式结合
- 只用非对称加密方式传对称加密的密钥
认证(防伪装)
作用
- 向用户保证服务器的身份
- 向服务器保证用户的身份
完整性保护(防篡改)
- SSL报文摘要
HTTP 1.1/2.0
HTTP 1.x的缺陷
- 客户端需要使用多个连接才能实现并发和缩短延迟
- 不会压缩请求和响应首部,从而导致不必要的网络流量
- 不支持有效的资源优先级,致使底层 TCP 连接的利用率低下
HTTP 2.0
二进制分帧层
- HEADERS 帧
- DATA 帧
服务端推送附带相关资源
Header压缩避免重复传输