图解HTTP

1995 年微软公司发布 Internet Explorer 1.0 和 2.0

HTTP 正式作为标准被公布是在 1996 年的 5 月,版本被命名为 HTTP/1.0

1997 年 1 月公布的 HTTP/1.1 是目前主流的 HTTP 协议版本

TCP/IP 协议族

通常使用的网络(包括互联网)是在 TCP/IP 协议族的基础上运作 的。而 HTTP 属于它内部的一个子集。、

计算机与网络设备要相互通信,双方就必须基于相同的方法。比如, 如何探测到通信目标、由哪一边先发起通信、使用哪种语言进行通 信、怎样结束通信等规则都需要事先确定。不同的硬件、操作系统之 间的通信,所有的这一切都需要一种规则。而我们就把这种规则称为 协议(protocol)

TCP/IP 是互联网相关的各类协议族的总称 协议中存在各式各样的内容。从电缆的规格到 IP 地址的选定方法、 寻找异地用户的方法、双方建立通信的顺序,以及 Web 页面显示需 要处理的步骤,等等。 像这样把与互联网相关联的协议集合起来总称为 TCP/IP。也有说法 认为,TCP/IP 是指 TCP 和 IP 这两种协议。还有一种说法认为,TCP/ IP 是在 IP 协议的通信过程中,使用到的协议族的统称

TCP/IP 协议族里重要的一点就是分层。TCP/IP 协议族按层次分别分 为以下 4 层:应用层、传输层、网络层和数据链路层

应用层决定了向用户提供应用服务时通信的活动。

TCP/IP 协议族内预存了各类通用的应用服务。比如,FTP(File Transfer Protocol,文件传输协议)和 DNS(Domain Name System,域 名系统)服务就是其中两类。

HTTP 协议也处于该层。

传输层

传输层对上层应用层,提供处于网络连接中的两台计算机之间的数据 传输。

在传输层有两个性质不同的协议:TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Data Protocol,用户数据报 协议)。
网络层(又名网络互连层)

网络层用来处理在网络上流动的数据包。数据包是网络传输的最小数 据单位。该层规定了通过怎样的路径(所谓的传输路线)到达对方计 算机,并把数据包传送给对方。

与对方计算机之间通过多台计算机或网络设备进行传输时,网络层所 起的作用就是在众多的选项内选择一条传输路线。

链路层(又名数据链路层,网络接口层)

用来处理连接网络的硬件部分。包括控制操作系统、硬件的设备驱 动、NIC(Network Interface Card,网络适配器,即网卡),及光纤等 物理可见部分(还包括连接器等一切传输媒介)。硬件上的范畴均在 链路层的作用范围之内。

负责传输的 IP 协议

IP 协议的作用是把各种数据包传送给对方。而要保证确实传送到对方 那里,则需要满足各类条件。其中两个重要的条件是 IP 地址和 MAC 地址(Media Access Control Address)。

IP 地址指明了节点被分配到的地址,MAC 地址是指网卡所属的固定 地址。IP 地址可以和 MAC 地址进行配对。IP 地址可变换,但 MAC 地址基本上不会更改。

使用 ARP 协议凭借 MAC 地址进行通信

IP 间的通信依赖 MAC 地址。在网络上,通信的双方在同一局域网 (LAN)内的情况是很少的,通常是经过多台计算机和网络设备中转 才能连接到对方。而在进行中转时,会利用下一站中转设备的 MAC 地址来搜索下一个中转目标。这时,会采用 ARP 协议(Address Resolution Protocol)。ARP 是一种用以解析地址的协议,根据通信方 的 IP 地址就可以反查出对应的 MAC 地址。

确保可靠性的TCP协议

按层次分,TCP 位于传输层,提供可靠的字节流服务。

所谓的字节流服务(Byte Stream Service)是指,为了方便传输,将大 块数据分割成以报文段(segment)为单位的数据包进行管理。而可 靠的传输服务是指,能够把数据准确可靠地传给对方。一言以蔽之, TCP 协议为了更容易传送大数据才把数据分割,而且 TCP 协议能够 确认数据最终是否送达到对方。

确保数据能到达目标 为了准确无误地将数据送达目标处,TCP 协议采用了三次握手 (three-way handshaking)策略。用 TCP 协议把数据包送出去后,TCP 不会对传送后的情况置之不理,它一定会向对方确认是否成功送达。

握手过程中使用了 TCP 的标志(flag) —— SYN(synchronize) 和 ACK(acknowledgement)。 发送端首先发送一个带 SYN 标志的数据包给对方。接收端收到后, 回传一个带有 SYN/ACK 标志的数据包以示传达确认信息。最后,发 送端再回传一个带 ACK 标志的数据包,代表“握手”结束。

若在握手过程中某个阶段莫名中断,TCP 协议会再次以相同的顺序发 送相同的数据包。

负责域名解析的 DNS 服务

DNS(Domain Name System)服务是和 HTTP 协议一样位于应用层的 协议。它提供域名到 IP 地址之间的解析服务。

计算机既可以被赋予 IP 地址,也可以被赋予主机名和域名。比如 www.hackr.jp。

用户通常使用主机名或域名来访问对方的计算机,而不是直接通过 IP 地址访问。因为与 IP 地址的一组纯数字相比,用字母配合数字的表 示形式来指定计算机名更符合人类的记忆习惯。

URI 统一资源标识符

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

URI例子

ftp://ftp.is.co.za/rfc/rfc1808.txt
http://www.ietf.org/rfc/rfc2396.txt 
ldap://[2001:db8::7]/c=GB?objectClass?one
mailto:John.Doe@example.com 
news:comp.infosystems.www.servers.unix 
tel:+1-816-555-1212 
telnet://192.0.2.16:80/ 
urn:oasis:names:specification:docbook:dtd:xml:4.1.2

URL 统一资源定位符

URI 用字符串标识某一互联网资源,而URL表示资源的地点(互联 网上所处的位置)。

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

响应报文基本上由协议版本、状态码(表示请求成功或失败的数字代 码)、用以解释状态码的原因短语、可选的响应首部字段以及实体主 体构成。稍后我们会对这些内容进行详细说明

HTTP 是不保存状态的协议

HTTP/1.1 虽然是无状态协议,但为了实现期望的保持状态功能,于 是引入了 Cookie 技术。有了 Cookie 再用 HTTP 协议通信,就可以管 理状态了

持久连接

为解决上述 TCP 连接的问题,HTTP/1.1 和一部分的 HTTP/1.0 想出了 持久连接(HTTP Persistent Connections,也称为 HTTP keep-alive 或 HTTP connection reuse)的方法。持久连接的特点是,只要任意一端 没有明确提出断开连接,则保持 TCP 连接状态。

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

在 HTTP/1.1 中,所有的连接默认都是持久连接,但在 HTTP/1.0 内并 未标准化。虽然有一部分服务器通过非标准的手段实现了持久连接, 但服务器端不一定能够支持持久连接。毫无疑问,除了服务器端,客 户端也需要支持持久连接。

状态码的类别 
类别 原因短语 
1XX Informational(信息性状态码) 接收的请求正在处理 
2XX Success(成功状态码) 请求正常处理完毕 
3XX Redirection(重定向状态码) 需要进行附加操作以完成请求

301 永久性重定向
该状态码表示请求的资源已被分配了新的 URI,以后 应使用资源现在所指的 URI。也就是说,如果已经把资源对应的 URI 保存为书签了,这时应该按 Location 首部字段提示的 URI 重新保存

301 临时性重定向。该状态码表示请求的资源已被分配了新的 URI,希望 用户(本次)能使用新的 URI 访问。 和 301 Moved Permanently 状态码相似,但 302 状态码代表的资源不 是被永久移动,只是临时性质的。换句话说,已移动的资源对应的 URI 将来还有可能发生改变。比如,用户把 URI 保存成书签,但不会 像 301 状态码出现时那样去更新书签,而是仍旧保留返回 302 状态码 的页面对应的 URI

303 状态码明确 表示客户端应当采用 GET 方法获取资源

304 Not Modified

4XX Client Error(客户端错误状态码) 服务器无法处理请求 
404 该状态码表明服务器上无法找到请求的资源
5XX Server Error(服务器错误状态码) 服务器处理请求出错

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

HTTP 通信时,除客户端和服务器以外,还有一些用于通信数据转发 的应用程序,例如代理、网关和隧道。它们可以配合服务器工作。
这些应用程序和服务器可以将请求转发给通信线路上的下一站服务 器,并且能接收从那台服务器发送的响应再转发给客户端。

代理代理是一种有转发功能的应用程序,它扮演了位于服务器和客户 端“中间人”的角色,接收由客户端发送的请求并转发给服务器,同时 也接收服务器返回的响应并转发给客户端。

网关网关是转发其他服务器通信数据的服务器,接收从客户端发送来的请 求时,它就像自己拥有资源的源服务器一样对请求进行处理。有时客 户端可能都不会察觉,自己的通信目标是一个网关。

隧道隧道是在相隔甚远的客户端和服务器两者之间进行中转,并保持双方 通信连接的应用程序

FTP(File Transfer Protocol) 传输文件时使用的协议。该协议历史久远,可追溯到 1973 年前 后,比 TCP/IP 协议族的出现还要早。虽然它在 1995 年被 HTTP 的 流量(Traffic)超越,但时至今日,仍被广泛沿用。

Range

对于只需获取部分资源的范围请求,包含首部字段 Range 即可告知服 务器资源的指定范围。上面的示例表示请求获取从第 5001 字节至第 10000 字节的资源

接收到附带 Range 首部字段请求的服务器,会在处理请求之后返回状 态码为 206 Partial Content 的响应。无法处理该范围请求时,则会返 回状态码 200 OK 的响应及全部资源

确保 Web 安全的 HTTPS

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

通过和 SSL(Secure Socket Layer,安全套接层)或 TLS(Transport Layer Security,安全层传输协议)的组合使用, 加密 HTTP 的通信内容

数字证书认证机构处于客户端与服务器双方都可信赖的第三方机构的 立场上。威瑞信(VeriSign)就是其中一家非常有名的数字证书认证 机构。我们来介绍一下数字证书认证机构的业务流程。

首先,服务器 的运营人员向数字证书认证机构提出公开密钥的申请。数字证书认证 机构在判明提出申请者的身份之后,会对已申请的公开密钥做数字签 名,然后分配这个已签名的公开密钥,并将该公开密钥放入公钥证书后绑定在一起。

服务器会将这份由数字证书认证机构颁发的公钥证书发送给客户端,
以进行公开密钥加密方式通信。公钥证书也可叫做数字证书或直接称 为证书。

接到证书的客户端可使用数字证书认证机构的公开密钥,对那张证书 上的数字签名进行验证,一旦验证通过,客户端便可明确两件事: 一,认证服务器的公开密钥的是真实有效的数字证书认证机构。二, 服务器的公开密钥是值得信赖的

1、服务器把自己的公开密钥给数字证书认证机构
2、数字证书认证机构用自己的私有密钥向服务器的公开密码署数字签名并颁发公钥证书(数字证书认证机构的公开密钥已事先植入到浏览器里了,Android app是怎么样的?)
3、客服端拿到服务器的公钥证书后,使用数字证书认证机构的公开密钥,向数字证书认证机构验证证书上的数字签名,以确认服务器公开密钥的真实性
4、使用服务器的公开密钥对报文加密后发送
5、服务器用私有密钥对报文解密

数字签名的原理

数字签名的计算方法:算出内容HASH值,然后用私钥加密,这就是数字签名。

客户收到信息后,用公钥解密数字签名得到HASH值,然后算出内容的HASH值,两者相对比

数字签名的作用: 不可抵赖与数据完整性

不可抵赖:如果公钥能解密,则内容一定是与该公钥对应的私钥加密而来,即可证明来源。

数据完整性:数字签名的HASH值和自己计算出的HASH值一致,即可证明该内容是完整的未经修改过。

SSL 和 TLS HTTPS 使用 SSL(Secure Socket Layer) 和 TLS(Transport Layer Security)这两个协议。

SSL技术最初是由浏览器开发商网景通信公司率先倡导的,开发 过 SSL3.0 之前的版本。目前主导权已转移到 IETF(Internet Engineering Task Force,Internet 工程任务组)的手中。

IETF 以 SSL3.0 为基准,后又制定了 TLS1.0、TLS1.1 和 TLS1.2。TSL是以 SSL为原型开发的协议,有时会统一称该协议 为 SSL。当前主流的版本是 SSL3.0 和 TLS1.0。

由于 SSL1.0 协议在设计之初被发现出了问题,就没有实际投入 使用。SSL2.0 也被发现存在问题,所以很多浏览器直接废除了 该协议版本。

SSL 速度慢吗

HTTPS 也存在一些问题,那就是当使用 SSL时,它的处理速度 会变慢。

  • 由于HTTPS还需要做服务器,客户端双方加密及解密处理,因此会消耗CPU和内存等硬件资源
  • SSL通讯部分消耗网络资源,耗时

HTTPS 比 HTTP 要慢 2 到 100 倍

SSL的慢分两种。一种是指通信慢。另一种是指由于大量消耗 CPU 及内存等资源,导致处理速度变慢。

和使用 HTTP 相比,网络负载可能会变慢 2 到 100 倍。除去和 TCP 连接、发送 HTTP 请求 • 响应以外,还必须进行 SSL通信, 因此整体上处理通信量不可避免会增加。

另一点是 SSL必须进行加密处理。在服务器和客户端都需要进行 加密和解密的运算处理。因此从结果上讲,比起 HTTP 会更多地 消耗服务器和客户端的硬件资源,导致负载增强。

针对速度变慢这一问题,并没有根本性的解决方案,我们会使用 SSL加速器这种(专用服务器)硬件来改善该问题。该硬件为 SSL通信专用硬件,相对软件来讲,能够提高数倍 SSL的计算速 度。仅在 SSL处理时发挥 SSL加速器的功效,以分担负载

为什么不一直使用 HTTPS

既然 HTTPS 那么安全可靠,那为何所有的 Web 网站不一直使用 HTTPS ?

其中一个原因是,因为与纯文本通信相比,加密通信会消耗更多的 CPU 及内存资源。如果每次通信都加密,会消耗相当多的资源,平 摊到一台计算机上时,能够处理的请求数量必定也会随之减少。

因此,如果是非敏感信息则使用 HTTP 通信,只有在包含个人信息 等敏感数据时,才利用 HTTPS 加密通信。

特别是每当那些访问量较多的 Web 网站在进行加密处理时,它们 所承担着的负载不容小觑。在进行加密处理时,并非对所有内容都 进行加密处理,而是仅在那些需要信息隐藏时才会加密,以节约资 源

除此之外,想要节约购买证书的开销也是原因之一。

消除 HTTP 瓶颈的 SPDY

Google 在 2010 年发布了 SPDY(取自 SPeeDY,发音同 speedy),其 开发目标旨在解决 HTTP 的性能瓶颈,缩短 Web 页面的加载时间 (50%)。

HTTP 的瓶颈

一条连接上只可发送一个请求。

请求只能从客户端开始。客户端不可以接收除响应以外的指 令。

请求 / 响应首部未经压缩就发送。首部信息越多延迟越大。

发送冗长的首部。每次互相发送相同的首部造成的浪费较 多

可任意选择数据压缩格式。非强制压缩发送。

SPDY的设计与功能

SPDY 没有完全改写 HTTP 协议,而是在 TCP/IP 的应用层与运输层之 间通过新加会话层的形式运作。同时,考虑到安全性问题,SPDY 规 定通信中使用 SSL。

SPDY 以会话层的形式加入,控制对数据的流动,但还是采用 HTTP 建立通信连接

HTTP

SPDY//会话层

SSL

TCP

IP

多路复用流

通过单一的 TCP 连接,可以无限制处理多个 HTTP 请求。所有请求 的处理都在一条 TCP 连接上完成,因此 TCP 的处理效率得到提高。

赋予请求优先级

SPDY 不仅可以无限制地并发处理请求,还可以给请求逐个分配优先 级顺序。这样主要是为了在发送多个请求时,解决因带宽低而导致响 应变慢的问题。

压缩 HTTP 首部

压缩 HTTP 请求和响应的首部。这样一来,通信产生的数据包数量和 发送的字节数就更少了。

推送功能

支持服务器主动向客户端推送数据的功能。这样,服务器可直接发送 数据,而不必等待客户端的请求。

服务器提示功能

服务器可以主动提示客户端请求所需的资源。由于在客户端发现资源 之前就可以获知资源的存在,因此在资源已缓存等情况下,可以避免发送不必要的请求

WebSocket 的设计与功能

WebSocket,即 Web 浏览器与 Web 服务器之间全双工通信标准。其 中,WebSocket 协议由 IETF 定为标准,WebSocket API 由 W3C 定为 标准。仍在开发中的 WebSocket 技术主要是为了解决 Ajax 和 Comet 里 XMLHttpRequest 附带的缺陷所引起的问题。

一旦 Web 服务器与客户端之间建立起 WebSocket 协议的通信连接, 之后所有的通信都依靠这个专用协议进行。通信过程中可互相发送 JSON、XML、HTML或图片等任意格式的数据。

由于是建立在 HTTP 基础上的协议,因此连接的发起方仍是客户端, 而一旦确立 WebSocket 通信连接,不论服务器还是客户端,任意一方 都可直接向对方发送报文

一旦 Web 服务器与客户端之间建立起 WebSocket 协议的通信连接, 之后所有的通信都依靠这个专用协议进行。通信过程中可互相发送 JSON、XML、HTML或图片等任意格式的数据。 由于是建立在 HTTP 基础上的协议,因此连接的发起方仍是客户端, 而一旦确立 WebSocket 通信连接,不论服务器还是客户端,任意一方 都可直接向对方发送报文

期盼已久的 HTTP/2.0

HTTP/2.0 在 2014 年 11 月实现标准化

HTTP/2.0 围绕着主要的 7 项技术进行讨论

压缩 SPDY、Friendly

多路复用 SPDY

TLS 义务化 Speed+ Mobility

协商 Speed+ Mobility,Friendly

客户端拉曳(Client Pull)/服务器推送 (Server Push) Speed+ Mobility

流量控制 SPDY

WebSocket Speed+ Mobility

HTML

HTML(HyperText Markup Language,超文本标记语言)是为了发送 Web 上的超文本(Hypertext)而开发的标记语言。超文本是一种文档 系统,可将文档中任意位置的信息与其他信息(文本或图片等)建立 关联,即超链接文本。标记语言是指通过在文档的某部分穿插特别的 字符串标签,用来修饰文档的语言。我们把出现在 HTML文档内的 这种特殊字符串叫做 HTML标签(Tag)。

平时我们浏览的 Web 页面几乎全是使用 HTML写成的。由 HTML构 成的文档经过浏览器的解析、渲染后,呈现出来的结果就是 Web 页 面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值