图解HTTP

章节一:了解Web及网络基础

** 1.1 使用HTTP协议访问web**

  • 客户端(client):通过发送请求获取服务器资源的web浏览器。


    Snip20170427_6.png
  • WWW(World Wide Web,万维网)三项构建技术
    • 把 SGML(Standard Generalized Markup Language,标准通用标记语言)作为页面的文本标 记语言HTML(HyperText Markup Language,超文本标记语言)。

    • 作 为文档传递协议的 HTTP;

    • 指定文档所在地址的 URL(Uniform Resource Locator,统一资源定位符)

TCP/IP协议

  • 计算机与网络要互相通信,双方就必须基于相同的方法,不同的硬件,操作系统都需要一种规则,我们把这种规则称之为协议(protocol)。


    TCP/IP协议群.png
  • 互联网相关联的协议集合起来总称为 TCP/IP。也有说 法认为,TCP/IP 是指 TCP 和 IP 这两种协议。还有一种说法认为,TCP/ IP 是在 IP 协议的通信过程中,使用到的协议族的统称.

TCP/IP 分层管理

  • 应用层:
    • HTTP ,FTP, DNS(Domain Name System, 域名系统)
  • 传输层
- 网络层
 - ```网络层用来处理在网络上流动的数据包。数据包是网络传输的最小数据单位。该层规定了通过怎样的路径(所谓的传输路线)到达对 方计算机,并把数据包传送给对方。 与对方计算机之间通过多台计算机或网络设备进行传输时,网络层 所起的作用就是在众多的选项内选择一条传输路线。```
- 链路层(网络接口层)
 - ```用来处理连接网络的硬件部分。包括控制操作系统、硬件的设备驱动、NIC(Network Interface Card,网络适配器,即网卡),及光纤等物理可见部分(还包括连接器等一切传输媒介)。硬件上的范畴 均在链路层的作用范围之内**```
![Snip20170427_8.png](http://upload-images.jianshu.io/upload_images/2319649-b459f8a15f50413b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
**与HTTP相关的IP,TCP,DNS协议**
- IP: 
   - 属于网络层,不要和IP地址混淆,它是一种协议
   - 它的作用是把数据包传送给对方。确保能传递准确和成功的两个重要条件是:IP地址和MAC地址。
   - IP地址指的是节点分配地址,可变换,MAC地址基本不会更改

https://bbs.hupu.com/bxj
bbs.hupu.com/bxj就是指节点分配地址,还是bxj是节点地址,希望有看到的朋友请指教

-  ARP 协议凭借 MAC 地址进行通信
 ```IP 间的通信依赖 MAC 地址。在网络上,通信的双方在同一局域网 (LAN)内的情况是很少的,通常是经过多台计算机和网络设备中转才 能连接到对方。而在进行中转时,会利用下一站中转设备的 MAC 地址 来搜索下一个中转目标。这时,会采用 ARP 协议(Address Resolution Protocol)。ARP 是一种用以解析地址的协议,根据通信方的 IP 地址就
可以反查出对应的 MAC 地址。
  • 路由选择
    在到达通信目标前的中转过程中,那些计算机和路由器等网络设备 只能获悉很粗略的传输路线。这种机制称为路由选择(routing),所以无论哪台计算机或哪台网络设备都无法掌握全面的细节
  • TCP协议位于网络层,提供可靠的的字节流服务
    • 字节流服务:将数据库切割成报文段(segment)的单位数据,TCP 协议为了更容易传送大数据才把数据分割。
    • 可靠性:准确的送达到对方
  • 三次握手:确保数据传输的可靠性
回传一个带有 SYN/ACK 标志的数据包以示传达确认信息。最后,发送 端再回传一个带 ACK 标志的数据包,代表“握手”结束。
若在握手过程中某个阶段莫名中断,TCP 协议会再次以相同的顺序 发送相同的数据包。```
![Snip20170427_10.png](http://upload-images.jianshu.io/upload_images/2319649-b1dc99a585701d1d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
- DNS协议:提供通过域 名查找 IP 地址,或逆向从 IP 地址反查域名的服务。
![Snip20170427_11.png](http://upload-images.jianshu.io/upload_images/2319649-3cb1df1be3307294.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
**HTTP与各种协议的关系**
![Snip20170427_12.png](http://upload-images.jianshu.io/upload_images/2319649-a97d224c2f734b04.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
```client发送URL请求,首先DNS会将解析对应的IP地址,HTTP协议生成针对目标服务器的HTTP请求报文,TCP协议将报文割成文段,按序号分为多个数据包,可靠的发给对方(三次握手),通过ARP协议解析IP地址的MAC地址,发给对方(IP协议),此处会有通过路由中转的过程。服务器接收数据包,再以TCP协议按序号顺序重组报文,HTTP解析报文,服务器处理内容在以相同的方式向用户进行回传

URI/URL

  • URI(Uniform Resource Locator,统一资源定位符)
  • URL 是URI的子集
  • URL的格式:


    Snip20170427_13.png
  • RFC(Request for Comments)HTTP协议技术的标准文档

章节二:HTTP 协议用于客户端和服务器端之间的通信

通过请求和响应交换达成协议

  • 请求报文:

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


      Snip20170427_15.png
  • 响应报文

    • 请求内容的处理结果以响应的形式返回
      Snip20170427_17.png

      HTTP是一种不保存状态
  • HTTP 是一种不保存状态,即无状态(stateless)协议。HTTP 协议 自身不对请求和响应之间的通信状态进行保存。

  • 协议本身并不保留之前一切的请求或响应报文的信息。这是为了更快地处理大量事务,确保协议的可伸缩性,而特意把 HTTP 协议设计成 如此简单的。

  • 为了保持状态,HTTP1.1引入Cookie概念。
    告知服务器意图的 HTTP 方法

  • GET :获取资源
    GET 方法用来请求访问已被 URI 识别的资源。指定的资源经服务器端解析后返回响应内容。也就是说,如果请求的资源是文本,那就保 持原样返回;如果是像 CGI(Common Gateway Interface,通用网关接 口)那样的程序,则返回经过执行后的输出结果。

  • POST:传输实体主体
    POST 的功能与 GET 很相似,但 POST 的主要目的并不是获取响应的主体内容。

  • PUT :传输文件

  • HEAD:获得报文首部
  • DELETE:删除文件
但是,HTTP/1.1 的 DELETE 方法本身和 PUT 方法一样不带验证机 制,所以一般的 Web 网站也不使用 DELETE 方法```
- OPTIONS 方法用来查询针对请求 URI 指定的资源支持的方法。
- TRACE 方法 是让 Web 服务器端将之前的请求通信环回给客户端的 方法。
- CONNECT:要求用隧道协议连接代理
![Snip20170427_18.png](http://upload-images.jianshu.io/upload_images/2319649-54dac7e7aed8b5be.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
**HTTP长连接**
- 每次的请求都会造成无谓的 TCP 连接建立和断开, 增加通信量的开销
- HTT持久倡长连接只要任意一端没 有明确提出断开连接,则保持 TCP 连接状态
- 管线化:持久连接使得多数请求以管线化(pipelining)方式发送成为可能。 从前发送请求后需等待并收到响应,才能发送下一个请求。管线化技术 出现后,不用等待响应亦可直接发送下一个请求。
![管线化.png](http://upload-images.jianshu.io/upload_images/2319649-fffb37cccc128494.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
**使用 Cookie 的状态管理**
- Cookie 技术通过在请求和响应报文中写入 Cookie 信息来控制客户端的状态
```Cookie 会根据从服务器端发送的响应报文内的一个叫做 Set-Cookie 的首部字段信息,通知客户端保存 Cookie。当下次客户端再往该服务器 发送请求时,客户端会自动在请求报文中加入 Cookie 值后发送出去。
服务器端发现客户端发送过来的 Cookie 后,会去检查究竟是从哪 一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前 的状态信息

Cookie

HTTP报文内的HTTP信息

  • HTTP报文大致可分为报文首部,报文主两块。通常,并不一定要有报文主体。


    报文结构.png

    报文结构详解.png
  • 请求报文和响应报文的组成
    • 请求行
      包含用于请求的方法,请求 URI 和 HTTP 版本。
    • 状态行
      包含表明响应结果的状态码,原因短语和 HTTP 版本。
    • 首部字段
      包含表示请求和响应的各种条件和属性的各类首部。

编码提升传输效率

  • 报文
    • 基本单位:8位字节流
  • 实体
    • 作为请求或响应的有效载荷数据(补充项)被传输,其内容由实 体首部和实体主体组成。

压缩传输内容编码

  • 内容编码指明应用在实体内容上的编码格式,并保持实体信息原样压缩。内容编码后的实体由客户端接收并负责解码。
  • 常用的内容编码格式:
    • gzip
    • compress(UNIX 系统的标准压缩)
    • deflate(zlib)
    • identity(不进行编码)

分割发送的分块传输编码

  • 分块传输编码
    在 HTTP 通信过程中,请求的编码实体资源尚未全部传输完成之 前,浏览器无法显示请求页面。在传输大容量数据时,通过把数据分割 成多块,能够让浏览器逐步显示页面,这种实体分块功能称为传块编码
    分块传输.png
  • 分块传输会将实体主体分为多个部分,每一部分用16进制开标记块的大小,而实体主体的最后一块会使用“0(CR+LF)”
  • HTTP/1.1 中存在一种称为传输编码(Transfer Coding)的机制,它 可以在通信时按某种编码方式传输,但只定义作用于分块传输编码中来标记。

发送多种数据的多部分对象集合

  • MIME(Multipurpose Internet Mail Extensions,多用途因特网 邮件扩展)机制
    多部分对象集合包含的对象如下
  • multipart/form-data
    在 Web 表单文件上传时使用。
  • multipart/byteranges
    状态码 206(Partial Content,部分内容)响应报文包含了多个范 围的内容时使用。
  • multipart/form-data
  • multipart/byteranges

获取部分内容的范围请求
内容协商返回最合适的内容

  • 当浏览器的 认 为 或中文, 问相同 URI 的 Web 页面时, 会显示对应的 版或中文版的 Web 页面。这样的机制 为内容协
  • 请求报文中首部字段的判断基准
    • Accept
    • Accept-Charset
    • Accept-Language
    • Content-Language
  • 内容协 技术有以 3 种
    • 服务器 动协商(Se e - i en Negotiation)
    • 客户端 动协商(Agent- i en Negotiation)
    • 明协商(T ans a ent Negotiation)

HTTP返回结果状态码

状态码的职 是当客户端向服务器端发送请求时, 返回的请求 结果。借助状态码,用户可以知道服务器端是正常 理了请求,还是出 现了 。

响应的状态码.png

  • 以3位数字和原因组成的短语叫做状


    状态类别.png

用单台虚拟主机实现多个域名

  • HTTP/1.1 许一 HTTP 服务器 建多个 Web 站点
  • 即使 理 面只有一 服务器,但只要使用 主机的功能, 可 以 想已具有多 服务器。
  • 在相同的 IP 地 ,由于 主机可以 存多个不同主机名和域 名的 Web 网站,因此在发送 HTTP 请求时, 在 Host 首部内完整指 定主机名或域名的 URI。
虚拟主机

通讯数据转发程序:代理 网关 隧道

  • 代理

    • 代理服务器最基本的行为就是接受客户端发送给他的请求


      代理
    • 在 HTTP 通信过程中,可级联多 代理服务器。请求和响应的 发 会经过数 一样 接起来的代理服务器。 发时,需要 加 Via 首部字段以标记出经过的主机信

      • 代理使用方法的两种基类分类
        • 缓存代理

当代理再 接 到对相同资源的请求时,就可以不从源服务器那里 资源,而是将之前缓存的资源作为响应返回。```

- 透明代理

发请求或响应时,不对报文做 何加工的代理 被 为透明代 理(Transparent Pro y)。 之,对报文内容进行加工的代理被 为 透明代理

  • 网关
    - 网关的工作机制和代理十分相似。网关能使通信路上的服务器提供非HTTP协议的服务。
    - 利用网关能提高通信的安全 ,因为可以在客户端与网关之间的通 信 路上加密以确保 接的安全。 如,网关可以 接数据 ,使用 S L   查 数据。另外,在 Web   网站上进行信用 结 时,网
    关可以和信用 结   联动。
- 隧道
   ```隧道是在相隔甚远的客户端和服务器之间进行中转的,并保持双方通讯链接的应用程序。
 - 隧道可 要求建立起一 与其他服务器的通信 路, 时使用 SSL 等加密手段进行通信。隧道的目的是确保客户端能与服务器进行安全的 通信。
 - 隧道不会解析HTTP请求,原样转给服务器,隧道会在客户端和服务器断开连接时结束。

保存资源的缓存

  • 缓存服务器的 在于利用缓存可 多 从源服务器 发资源。 因此客户端可就 从缓存服务器上 资源,而源服务器也不 多 理相同的请求了。

HTTP 首部

HTTP报文首部

请求报文结构
  • 在请求中,HTTP报文由方法 URL HTTP版本 HTTP首部字段构成。


    请求报文
响应报文结构

4种HTTP首部字段类型

  • 通用首部字段
    • 请求报文和响应报文两方都会使用的首部。如协议版本号
  • 请求首部字段
    • 从客户端向服务器端发送请求报文时使用的首部。 了请求的加内容、客户端信 、响应内容相关 先级等信 。
  • 响应首部字段
    • 从服务器端向客户端返回响应报文时使用的首部。 了响应的 加内容,也会要求客户端 加 外的内容信 。
  • 实体首部字段
    • 对请求报文和响应报文的实体部分使用的首部。 了资源内容 更新时间等与实体有关的信 。
      HTTP 首部字段一览

非HTTP/1.1首部字段

  • 在 HTTP 协议通信交互中使用到的首部字段,不 于 RFC2616 中 定义的 47 种首部字段。还有 Cookie、Set-Cookie 和 Content-Disposition 等在其他 RFC 中定义的首部字段,它们的使用 也很高。
    这些 正式的首部字段 一 在 RFC4229 HTTP Header Field Registrations 中。

End-to-end首部 和 Hop by hop首部
HTTP/1.1通用首部字段

  • Cache-Control
    通过指定首部字段 Cache-Control 的指令,就能 作缓存的工作机制。指令的 数是可 的,多个指令之间通过“,”分 。首部字段,Cache-Control 的指令可用于请求及响应时。

    Cache-Control

    响应缓存

  • Connetion

    • 控制不在转发给代理的首部字段
      • Connection: 不再发的首部字段


        Snip20170502_42.png
    • 管理持久链接
      • HTTP/1.1 之前的 HTTP 版本的 认 接都是 持 接。为此, 如果想在 版本的 HTTP 协议上维持持 接, 需要指定 Connection 首部字段的值为 Keep-Alive。
  • Date

    • 首部字段 Date 表明 建 HTTP 报文的日 和时间。
  • Pragma

    • Pragma 是 HTTP/1.1 之前版本的 史 留字段,仅作为与 HTTP/1.0 的向后 容而定义。
    • 该首部字段 于通用首部字段,但只用在客户端发送的请求中。客 户端会要求所有的中间服务器不返回缓存的资源。
    • EG: Pragma:no-cache
  • Trailer

    • 首部字段 Trailer 会 先说明在报文主体后记 了哪些首部字段。该 首部字段可应用在 HTTP/1.1 版本分 编码时。
  • Transfer - Encoding

    • 规定了报文主体采用的编码方式
  • Upgrade

    • 首部字段 Upgrade 用于检 HTTP 协议及其他协议是否可使用更高 的版本进行通信,其 数值可以用来指定一个完全不同的通信协议。
  • Via

    • 使用首部字段 Via 是为了 客户端与服务器之间的请求和响应报 文的 路 。
  • Warning

请求首部字段
请求首部字段是从客户端 服务器端发送请求报文中所使用的字 段,用于 请求的 加信 、客户端信 、对响应内容相关的 先级 等内容。

  • Accept
    Accept 首部字段可通知服务器,用户代理能 理的 体 及 体 的相对 先级。 可使用 type/subtype 这种形式,一 指定多种 体 。
    • 文本文件,图片文件...
    • text/html, text/plain, text/css ...
    • q表示权重 0-1的小数,默认1,以分好;分割。 quality factor 质量因数
  • Accept-Charset
    • 首部字段可用来通知服务器用户代理支持的字 及字 的相对 先顺序。另外,可一 指定多种字 。与首部字 段 Accept 相同的是可用权重 值来表示相对先级。
    • 该首部字段应用于内容协 机制的服务器 动协 。
  • Accept-Encoding
    • 首部字段用来 知服务器用户代理支持的内容编 码及内容编码的 先级顺序。可一 指定多种内容编码
  • Accept - Language
    • 首部字段 Accept-Language 用来 知服务器用户代理能 理的自 然 (指中文或 文等),以及自然 的相对 先级。可一 指定多种自然 。q表示权重
  • Authorization
  • Expect
    • 客户端使用首部字段 Expect 来 知服务器, 望出现的某种特定 行为。因服务器无法理解客户端的 望作出回应而发生 时,会返回 状态码 417 E pectation Failed。
  • From
    • 首部字段 From 用来 知服务器使用用户代理的用户的 件地 。 通常,其使用目的就是为了显示 引 等用户代理的 人的 件联 方式。使用代理时,应 可能包含 From 首部字段(但可 能会因代理不同,将 件地 记 在 User-Agent 首部字段内)。
  • Host
    • 首部字段 Host 会 知服务器,请求的资源所 的互联网主机名和 端 。Host 首部字段在 HTTP/1.1 内是 一一个 被包含在请 求内的首部字段。

为cookie服务的首部字段

HTTP的缺点

  • HTTP的不足
    • 通信使用明文(不加密),内容可能会被窃听
    • 不验证通信方的身份,因此有可能遇到伪装
    • 无法验证报文的完整性,所以有可能已遭篡改

加密策略

  • 通信的加密
    一种方式就是讲通信加密。HTTP协议中没有加密机制但可以通 过和SSL(Secure Socket Layer,安全 接 )或TLS(Transport Layer Security,安全 协议)的 使用,加密 HTTP 的通信内容。
  • 内容加密
    对HTTP报文内容进行加密

不验证通信方的身份就会可能遭遇伪装

  • HTTP协议非常简单,但是存在各种隐患
    • 无法确定请求发送 目 的 Web 服务器是 是 实意图返回 响应的 台服务器。有可能是已伪装的 Web 服务器
    • 无法确定正在通信的对方是否具备访问权限。
    • 无法判断请求来自何方,出自谁手
    • 即使是无意义的请求也会照单全收。

查看对手的证书

SSL.png

HTTP +加密+认证+ 完整性保护 = HTTPS

  • HTTPS不是一种新的应用层协议。只是HTTP部分通信接口用SSL和TLS
  • HTTP 接和 TCP 通信。当使用 SSL 时, 变成先和 SSL 通信,再由 SSL 和 TCP 通信了。简 之,所谓 HTTPS,其实就是 身 SSL 协议这 外 的 HTTP


    HTTPS
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容