HTTP|HTTP 协议

HTTP协议是TCP/IP协议的一部分

  • HTTP数据(应用层,客户端请求)
  • TCP首部(传输层,对HTTP数据进行分割处理,使得大数据更容易传送)
  • IP首部(网络层,地址相关信息)
  • 以太网首部(链路层)
  • IP协议:IP地址(可以改变)、MAC地址(基本不变)
  • DNS协议:通过域名查找IP地址
  • URI:用字符串标识某一互联网资源;
  • URL:标识资源地址
  • HTTP是无状态的协议(即对发送过的请求或者相应都不做持久化处理)(可以通过cookie技术解决状态不保存问题)
  • 在首部字段的Host中保存着请求的网络域名或IP地址
    • GET /index.html HTTP/1.1
    • Host: www.bilibili.com
  • HTTP method
method 内容
GET 获取资源
POST 传输数据
PUT 传输文件(不太使用)
HEAD 获取报文首部
DELETE 删除文件(不太使用)
OPTIONS 询问(服务器)支持的方法
TRACE 查询发出去的请求如何被加工处理/篡改(危险,不常使用)
CONNET 要求用隧道协议连接代理(主要使用SSL/TLS协议把内容机密后经网络隧道传输)
LINK 建立和资源之间的联系
UNLINE 断开连接关系
解决HTTP的非持久连接
  • 管线化(pipelining):不用等待响应亦可发送下一个请求
  • Cookie:
    • 服务器在响应时通知客户端保存Cookie
    • 客户端在再次请求时会自动将Cookie内容加入请求报文(request-message)
首部之间的换行符是\r\n;首部与主体之间的换行符是\r\n\r\n(即之间有一个空行)
Request Response
报文首部(请求行等) 报文首部(状态行等)
空行(CR+LF) 空行(CR+LF)
报文主体 报文主体
  • 报文(message)
  • 实体(entity)
  • 范围请求(Range Request):在请求中指定需求的范围
  • 内容协商(Content Negotiation):响应时提供给客户端最为合适的资源
状态码
状态码 类别 原因
1XX Information(信息性状态码) 接收到的请求正在处理
2XX Success(成功状态码) 请求正常处理完毕
3XX Redirection(重定向状态码) 需要进行附加操作以完成请求
4XX Client Error (客户端错误状态码) 服务器无法处理请求
5XX Server Error (服务器错误状态码) 服务器处理请求出错
具体状态码
状态码 名称 解释
200 OK
204 No Content
206 Partial Content
301 Moved Permanently 请求的资源已被分配新的URI(需要更新标签)
302 Found 临时性分配到新的URI
303 See Other 应当采用GET方法获取资源
304 Not Modified 为满足请求条件,返回中不包含任何相应的主体部分
307 Temporary Redirect
400 Bad Request
401 Unauthorized
403 Forbidden
404 Not Found
500 Internal Server Error 服务器出现问题
503 Service Unavailable 服务器忙
  • 代理:具有转发功能的应用程序
    • 源服务器 vs 代理服务器
    • 缓存代理:缓存源服务器响应资源
    • 透明代理:不对报文做任何加工
  • 网关:转发其他服务器通信数据的服务器
  • 隧道:客户端和服务器间进行中转(以保持双方的连接)
HTTP首部字段
首部字段
通用首部字段 请求报文和响应报文都会使用的首部
请求首部字段
响应首部字段
实体首部字段
通用首部字段
首部字段 解释
Cache-Control 操作缓存工作机制
Connection 控制不再转发给代理的首部字段
管理持久连接
Date 表明创建HTTP报文的日期和时间
Trailer 说明在报文主体后记录了哪些首部字段
Transfer-Encoding 规定了传输报文主体时采用的编码方式
Upgrade 检测是否可以使用更高版本的协议进行通信
Via 追踪传输路径(常和TRACE方法一起使用)
Warning
请求首部字段
首部字段 解释
Accept 通知服务器用户代理(如浏览器)能够处理的媒体类型及相对优先级
Accept-Charset 通知服务器用户代理支持的字符集类型及相对优先级
Accept-Encoding 通知服务器用户代理支持的内容编码及相对优先级
Accept-Language 通知服务器用户代理能够处理的自然语言集及相对优先级
Authorization 告知服务器用户代理的认证信息(证书值)
Expect 告知服务器期望出现的某种特定行为
From 告知服务器用户代理的用户电子邮箱
Host 区分运行在同一服务器(相同IP)下的不同虚拟主机
If-xxx 服务器只执行判定条件为真的请求
Max-Forwards 指定可经过的服务器的最大数目
Range 告知服务器请求资源的指定范围
Referer 告知服务器请求的原始资源的URI(处于安全考虑,一般不用)
User-Agent 将创建请求的浏览器和用户代理名称等信息传达给服务器
响应首部字段
首部字段 解释
Accept-Ranges 告知客户端是否能处理范围请求
Age 告知客户端源服务器多久前创建了响应
ETag
Location 配合3XX(Redirection)的响应,提供重定向的URI
Retry-After 告知客户端应该多久后再次发送请求
Server
Vary 对缓存进行控制
实体首部字段
首部字段 解释
Allow 同时客户端能够支持Request-URI指定资源的所有HTTP method
Content-Encoding 告知客户端服务器对实体的主体部分选用的内容编码方式
Content-Language 告知客户端实体的主题使用的自然语言
Content-Length 实体主体的大小(单位是字节)
Content-Loacation 报文主体返回资源的对应URI(同首部字段Location不一样)
Content-Range
Content-Type 实体主体内对象的媒体类型
Expires 告知客户端资源的实效日期
Last-Modified 资源最后一次修改时间
Cookie服务的首部字段
首部字段名 说明 首部类型
Set-Cookie 开始状态管理所使用的Cookie信息 响应首部字段
Cookie 服务器接收到的Cookie信息 请求首部字段
HTTP协议的不足
  • 通信使用明文,内容可能会被窃听
    • 可以使用SSL(Secure Socket Layer)或者TLS(Transport Layer Security)的组合加密HTTP的通信内容
    • HTTP和SSL的组合被称为HTTPS(HTTP Secure)或者HTTP over SSL
  • 不验证通信方的身份,因此可能遭遇伪装
    • 服务器伪装、客户端伪装、DoS(Denial of Service)
    • SSL可以确定通信的双方
  • 无法证明报文的完整性,所以可能遭受篡改
    • 没有办法确认发出的请求/响应和接收到的请求/响应时前后相同的:MITM(Man-in-the-Middle attack)
【HTTP|HTTP 协议】HTTPS=HTTP+加密+认证+完整性保护
SSL是当今世界上应用最为广发的网络安全技术
以上内容皆出自《图解HTTP》

    推荐阅读