解密HTTP 协议

HTTP 协议

无论说用 webservice 还是做 rest 框架,都离不开 http 协议。

什么是协议

双方都遵守的标准。

HTTP 是一种不保存状态,即无状态(stateless)协议

HTTP 协议工作流程

在这里插入图片描述

GET

在这里插入图片描述

POST

在这里插入图片描述

请求

  • 请求行
  • 头信息
  • 主体信息(可以没有):需要content-type进行描述

请求行

  • 请求方法:GET,POST,HEAD(一般仅需要状态码),PUT,DELETE,TRACE(获取服务器获取到的URL),OPTIONS(探测支持的方法)
  • 请求路径:URL 一部分
  • 协议:HTTP/1.1

Post 比 GET 多了主体信息

响应

  • 响应行:协议,状态码,状态文字
  • 响应头信息
  • 响应主体
状态码定义说明
1XX信息接收到请求,继续处理
2XX成功操作成功
3XX重定向为了完成请求,需要进行进一步的措施
4XX客户端错误请求有语法或者不能被满足
5XXXX服务端错误服务端在完成有效请求时出错

重要状态码:

  • 200 - 成功
  • 204 - No Content 请求处理成功,无资源需要返回
  • 206 - Partial Content部分请求,返回部分内容
  • 301/2 - 永久/临时重定向
  • 304 - 未修改,促使浏览器使用缓存
  • 307- 重定向仍然保持原先的请求方法
  • 400 - Bad Request 请求报文中存在语法错误
  • 401 - Unauthorized 未认证
  • 403 - Forbidden 对请求资源的访问被服务器拒绝了
  • 404 - 页面找不到
  • 500 - Internal Server Error 一般是bug
  • 503 - 服务器暂时不可用
  • 500 - 服务器内部错误

HTTP 传输分层图

在这里插入图片描述
在这里插入图片描述

URI

统一资源标识符。

URI 就是由某个协议方案表示的资源的定位标识符。协议方案是指访问资源所使用的协议类型名称。采用 HTTP 协议时,协议方案就是 http。除此之外,还有 ftp等。

请求报文是由请求方法、请求 URI、协议版本、可选的请求首部字段和内容实体构成的。

响应报文 基本上由协议版本、状态码(表示请求成功或失败的数字代码)、用以解释状态码的原因短语、可选的响应首部字段以及实体主 体构成

方法

  • GET:获取资源
  • POST:传输实体的主体
  • HEAD:获得报文首部
  • OPTIONS:询问支持的方法
  • PUT:传输文件
  • DELETE:删除文件
  • TRACE:追踪路径
  • CONNECT:要求用隧道协议连接代理

连接

原始的HTTP协议,每每通信一次就会断开连接:

每次的请求都会造成无谓的 TCP 连接建立和断开,增加通信量的开销

持久连接的好处在于减少了 TCP 连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载。另外,减少开销的那部分时间,使HTTP 请求和响应能够更早地结束,这样 Web 页面的显示速度也就相应提高了。

管线化

从每次发送需等到上一次请求返回变为一次可以发送多个请求:

COOKIE

Cookie 会根据从服务器端发送的响应报文内的一个叫做 Set-Cookie 的首部字段信息,通知客户端保存 Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入 Cookie 值后发送出去。

CHUNK

分快传输,针对报文主体较大是,将报文分块编码后进行发送,最后由接收端进行解码。

内容协商

内容协商机制是指客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最为适合的资源。内容协商会以响应资源的语言、字符集、编码方式等作为判断的基准

代理

缓存服务器是代理服务器的一种,并归类在缓存代理类型中。

使用代理服务器的理由有:

  • 利用缓存技术(稍后讲解)减少网络带宽的流量
  • 组织内部针对特定网站的访问控制
  • 以获取访问日志为主要目的

HTTP 首部

首部字段名说明
Cache-Control控制缓存的行为
Connection逐跳首部、连接的管理
Date创建报文的日期时间
Pragma报文指令
Trailer报文末端的首部一览
Transfer-Encoding指定报文主体的传输编码方式
Upgrade升级为其他协议
Via代理服务器的相关信息
Warning错误通知
下方为请求首部字段
Accept用户代理可处理的媒体类型text/html, text/plain, text/css
Accept-Charset优先的字符集iso-8859-5, unicode-1-1
Accept-Encoding优先的内容编码gzip, deflate
Accept-Language优先的语言(自然语言)zh-cn,zh;q=0.7,en-us,en;q=0.3
AuthorizationWeb认证信息通常存放 token 信息
Expect期待服务器的特定行为
From用户的电子邮箱地址
Host请求资源所在服务器
If-Match比较实体标记(ETag)当服务器etag与值相同才会响应
If-Modified-Since比较资源的更新时间如未更新,返回304 Not Modified
If-None-Match比较实体标记(与 If-Match 相反)
If-Range资源未更新时发送实体 Byte 的范围请求与Etag如果相等,作为范围处理,否则全部返回
If-Unmodified-Since比较资源的更新时间(与If-Modified-Since相反)
Max-Forwards最大传输逐跳数
Proxy-Authorization代理服务器要求客户端的认证信息
Range实体的字节范围请求
Referer对请求中 URI 的原始获取方
TE传输编码的优先级
User-AgentHTTP 客户端程序的信息
响应首部字段
Accept-Ranges是否接受字节范围请求
Age推算资源创建经过时间
ETag资源的匹配信息
Location令客户端重定向至指定URI
Proxy-Authenticate代理服务器对客户端的认证信息
Retry-After对再次发起请求的时机要求120 秒后再来访问
ServerHTTP服务器的安装信息
Vary代理服务器缓存的管理信息
WWW-Authenticate服务器对客户端的认证信息
实体首部字段
Allow资源可支持的HTTP方法
Content-Encoding实体主体适用的编码方式
Content-Language实体主体的自然语言
Content-Length实体主体的大小(单位:字节)
Content-Location替代对应资源的URI
Content-MD5实体主体的报文摘要
Content-Range实体主体的位置范围
Content-Type实体主体的媒体类型
Expires实体主体过期的日期时间
Last-Modified资源的最后修改日期时间
Cookie客户端携带 cookie 访问服务器
Set-Cookie服务器发往客户端的 cookie
Content-Disposition

Cache-Control

缓存控制

Cache-Control: no-cache 在浏览器使用缓存前,会往返对比 ETag,如果 ETag 没变,返回 304,则使用缓存

Cache-Control: no-store 彻底禁用缓冲,所有内容都不会被缓存或存入临时文件中

Cache-Control: max-age=604800 缓存资源的缓存时间数值比指定时间的数值更小,那么客户端就接收缓存的资源

Cache-Control: min-fresh=60 过了 60 秒的资源都无法作为响 应返回了

...

https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Cache-Control

Connection

  • 控制不再转发给代理的首部字段
  • 管理持久连接
Connection: XXX 不再转发的首部字段名

Connection: close 服务端明确想要关闭链接

Connection: Keep-Alive HTTP/1.1 默认

Transfer-Encoding

Transfer-Encoding: chunked  分块传输

Via

每一个经过的代理都会将信息留存在 Via 中,使用首部字段 Via 是为了追踪客户端与服务器之间的请求和响应报文的传输路径。

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页