我是靠谱客的博主 细心胡萝卜,最近开发中收集的这篇文章主要介绍TCP、IP 、HTTP——Http协议HTTP协议,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

HTTP协议

HyperText Transfer Protocol, 超文本传输协议

TCP/IP 协议族 ,HTTP 属于它内部的一个子集 ,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uDrx1kkI-1646803092774)(C:Users崔常菲AppDataRoamingTyporatypora-user-imagesimage-20211026101739835.png)]
应用层、 传输层、 网络层和数据链路层。

应用层决定了向用户提供应用服务时通信的活动。FTP(File Transfer Protocol, 文件传输协议) 和 DNS(Domain Name System, 域
名系统) 服务就是其中两类。

传输层有两个性质不同的协议: TCP(Transmission ControlProtocol, 传输控制协议) 和 UDP(User Data Protocol, 用户数据报
协议)

网络层用来处理在网络上流动的数据包。 数据包是网络传输的最小数据单位。

链路层用来处理连接网络的硬件部分。

TCP/IP 通信传输流

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CPUQanIG-1646803092775)(C:Users崔常菲AppDataRoamingTyporatypora-user-imagesimage-20211026102626895.png)]

利用 TCP/IP 协议族进行网络通信时, 会通过分层顺序与对方进行通信。 发送端从应用层往下走, 接收端则往应用层往上走。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3kbOqyPy-1646803092775)(C:Users崔常菲AppDataRoamingTyporatypora-user-imagesimage-20211026102814354.png)]
发送端在层与层之间传输数据时, 每经过一层时必定会被打上一个该层所属的首部信息。 反之, 接收端在层与层传输数据时, 每经过一层时会把对应的首部消去。
这种把数据信息包装起来的做法称为封装(encapsulate)

与 HTTP 关系密切的协议 : IP、 TCP 和DNS

IP 协议的作用是把各种数据包传送给对方。 而要保证确实传送到对方那里, 则需要满足各类条件。 两个重要的条件是 IP 地址和 MAC地址IP 地址指明了节点被分配到的地址MAC 地址是指网卡所属的固定地址。 IP 间的通信依赖 MAC 地址,会采用 ARP 协议(AddressResolution Protocol) 。 ARP 是一种用以解析地址的协议, 根据通信方的 IP 地址就可以反查出对应的 MAC 地址

TCP 位于传输层, 提供可靠的字节流服务。 为了方便传输, 将大块数据分割成以报文段(segment) 为单位的数据包进行管理。TCP简要过程:

发送端首先发送一个带 SYN 标志的数据包给对方。 接收端收到后,回传一个带有 SYN/ACK 标志的数据包以示传达确认信息。 最后, 发
送端再回传一个带 ACK 标志的数据包, 代表“握手”结束 。

DNS(Domain Name System) 服务是和 HTTP 协议一样位于应用层的协议。 它提供域名到 IP 地址之间的解析服务。 DNS 协议提供通过域名查找 IP 地址, 或逆向从 IP 地址反查域名的服务。

URI 和 URL

URI(Uniform Resource Identifier 统一资源标识符) 相比,URI 用字符串标识某一互联网资源, URL(UniformResource Locator, 统一资源定位符),URL表示资源的地点 。 URL是 URI 的子集

URI 的格式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XXO3Mgcc-1646803092775)(C:Users崔常菲AppDataRoamingTyporatypora-user-imagesimage-20211026104140849.png)]
Http请求报文

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tEHW4v0Z-1646803092775)(C:Users崔常菲AppDataRoamingTyporatypora-user-imagesimage-20211026105028275.png)]
Http响应报文

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zA56319J-1646803092776)(C:Users崔常菲AppDataRoamingTyporatypora-user-imagesimage-20211026105059182.png)]

HTTP 是一种不保存状态, 即无状态(stateless) 协议。 HTTP 协议自身不对请求和响应之间的通信状态进行保存。 也就是说在 HTTP 这个级别, 协议对于发送过的请求或响应都不做持久化处理。

HTTP 协议使用 URI 让客户端定位到资源

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jU2wTzJo-1646803092776)(C:Users崔常菲AppDataRoamingTyporatypora-user-imagesimage-20211026105245644.png)]

告知服务器意图的 HTTP 方法

GET : 获取资源 ,GET 方法用来请求访问已被 URI 识别的资源 。

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

PUT: 传输文件,PUT 方法用来传输文件。 就像 FTP 协议的文件上传一样, 要求在请求报文的主体中包含文件内容, 然后保存到请求 URI 指定的位置。

HEAD: 获得报文首部HEAD 方法和 GET 方法一样, 只是不返回报文主体部分。 用于确认URI 的有效性及资源更新的日期时间等 。

DELETE: 删除文件,DELETE 方法用来删除文件, 是与 PUT 相反的方法。 DELETE 方法按请求 URI 删除指定的资源 。

OPTIONS: 询问支持的方法,OPTIONS 方法用来查询针对请求 URI 指定的资源支持的方法。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9mJ0EcRc-1646803092776)(C:Users崔常菲AppDataRoamingTyporatypora-user-imagesimage-20211026105525361.png)]
TRACE: 追踪路径,TRACE 方法是让 Web 服务器端将之前的请求通信环回给客户端的方法。客户端通过 TRACE 方法可以查询发送出去的请求是怎样被加工修改/ 篡改的

CONNECT: 要求用隧道协议连接代理,CONNECT 方法要求在与代理服务器通信时建立隧道, 实现用隧道协议进行 TCP 通信。 主要使用 SSL(Secure Sockets Layer, 安全套接层) 和 TLS(Transport Layer Security, 传输层安全) 协议把通信内容加 密后经网络隧道传输。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6d1ap0Qd-1646803092777)(C:Users崔常菲AppDataRoamingTyporatypora-user-imagesimage-20211026105700694.png)]

持久连接节省通信量

持久连接(HTTP Persistent Connections, 也称为 HTTP keep-alive 或HTTP connection reuse) 的方法。 持久连接的特点是, 只要任意一端没有明确提出断开连接, 则保持 TCP 连接状态。 在 HTTP/1.1 中, 所有的连接默认都是持久连接。

持久连接的好处在于减少了 TCP 连接的重复建立和断开所造成的额外开销, 减轻了服务器端的负载。

管线化

管线化技术出现后, 不用等待响应亦可直接发送下一个请求。这样就能够做到同时并行发送多个请求, 而不需要一个接一个地等待
响应了。

Cookie 的状态管理

HTTP 是无状态协议, 它不对之前发生过的请求和响应的状态进行管理。

Cookie 技术通过在请求和响应报文中写入 Cookie 信息来控制客户端的状态
Cookie 会根据从服务器端发送的响应报文内的一个叫做 Set-Cookie 的首部字段信息, 通知客户端保存 Cookie。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dJw4F3jZ-1646803092777)(C:Users崔常菲AppDataRoamingTyporatypora-user-imagesimage-20211026110251967.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FOZjs4BP-1646803092777)(C:Users崔常菲AppDataRoamingTyporatypora-user-imagesimage-20211026110300871.png)]含有Cookie请求和响应报文

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0PnBnSOg-1646803092778)(C:Users崔常菲AppDataRoamingTyporatypora-user-imagesimage-20211026110314701.png)]

HTTP 报文

HTTP 报文大致可分为报文首部和报文主体两块。 两者由最初出现的空行(CR+LF 0X0D0A) 来划分。 通常, 并不一定要有报文主体。

报文结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KKPcYlF5-1646803092778)(C:Users崔常菲AppDataRoamingTyporatypora-user-imagesimage-20211026110455444.png)]
请求和响应报文首部
在这里插入图片描述
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-heZfKIcC-1646803092778)(C:Users崔常菲AppDataRoamingTyporatypora-user-imagesimage-20211026112655521.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1wMCC10v-1646803092778)(C:Users崔常菲AppDataRoamingTyporatypora-user-imagesimage-20211026140959336.png)]

编码提升传输速率

报文主体等于实体主体。 只有当传输中进行编码操作时, 实体主体的内容发生变化, 才导致它和报文主体产生差异。

HTTP 协议中有一种被称为内容编码 ,指明应用在实体内容上的编码格式, 并保持实体信息原样压缩。 内容编码后的实体由客户端接收并负责解码。

分割发送的分块传输编码

在 HTTP 通信过程中, 请求的编码实体资源尚未全部传输完成之前,浏览器无法显示请求页面。 在传输大容量数据时, 通过把数据分割成多块, 能够让浏览器逐步显示页面。

分块传输编码会将实体主体分成多个部分(块) 。 每一块都会用十六进制来标记块的大小, 而实体主体的最后一块会使用“0(CR+LF)”来标记。

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

multipart/form-data 在 Web 表单文件上传时使用。

multipart/byteranges 状态码 206(Partial Content, 部分内容) 响应报文包含了多个范围的内容时使用。

在 HTTP 报文中使用多部分对象集合时, 需要在首部字段里加上Content-type

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cjwtTdJO-1646803092778)(C:Users崔常菲AppDataRoamingTyporatypora-user-imagesimage-20211026140308790.png)]
获取部分内容的范围请求

实现该功能需要指定下载的实体范围。对指定范围发送的请求叫做范围请求( Range Request) 。

执行范围请求时, 会用到首部字段 Range 来指定资源的 byte 范围。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mExvy0Ca-1646803092779)(C:Users崔常菲AppDataRoamingTyporatypora-user-imagesimage-20211026140704974.png)]

针对范围请求, 响应会返回状态码为 206 Partial Content 的响应报文。

内容协商返回最合适的内容

访问相同 URI 的 Web 页面时,则会显示对应的英语版或中文版的 Web 页面。 这样的机制称为内容协商(Content Negotiation)

内容协商机制是指客户端和服务器端就响应的资源内容进行交涉, 然后提供给客户端最为适合的资源。

内容协商技术有以下 3 种类型 :

服务器驱动协商( Server-driven Negotiation) ,由服务器端进行内容协商

客户端驱动协商( Agent-driven Negotiation) 由客户端进行内容协商的方式。

透明协商( Transparent Negotiation)是服务器驱动和客户端驱动的结合体, 是由服务器端和客户端各自进行内容协商的一种方法。

返回结果的 HTTP 状态码

状态码类别:

在这里插入图片描述

2XX 成功

200 OK

表示从客户端发来的请求在服务器端被正常处理了 ,在响应报文内, 随状态码一起返回的信息会因方法的不同而发生改变。

204 No Content

该状态码代表服务器接收的请求已成功处理, 但在返回的响应报文中不含实体的主体部分。 另外, 也不允许返回任何实体的主体。

206 Partial Content

该状态码表示客户端进行了范围请求, 而服务器成功执行了这部分的GET 请求。 响应报文中包含由 Content-Range 指定范围的实体内容。

3XX 重定向

301 Moved Permanently

永久性重定向。 该状态码表示请求的资源已被分配了新的 URI, 以后应使用资源现在所指的 URI。

302 Found

临时性重定向。 该状态码表示请求的资源已被分配了新的 URI, 希望用户(本次) 能使用新的 URI 访问。

303 See Other

该状态码表示由于请求对应的资源存在着另一个 URI, 应使用 GET方法定向获取请求的资源。303 状态码和 302 Found 状态码有着相同的功能, 但 303 状态码明确表示客户端应当采用 GET 方法获取资源, 这点与 302 状态码有区别。

304 Not Modified

该状态码表示客户端发送附带条件的请求 2 时, 服务器端允许请求访问资源, 但未满足条件的情况。

307 Temporary Redirect

临时重定向,该状态码与 302 Found 有着相同的含义

4XX 客户端错误

4XX 的响应结果表明客户端是发生错误的原因所在。

400 Bad Request

该状态码表示请求报文中存在语法错误。 当错误发生时, 需修改请求的内容后再次发送请求。

401 Unauthorized

该状态码表示发送的请求需要有通过 HTTP 认证(BASIC 认证、DIGEST 认证) 的认证信息。

403 Forbidden

该状态码表明对请求资源的访问被服务器拒绝了。

404 Not Found

该状态码表明服务器上无法找到请求的资源。

5XX 服务器错误

5XX 的响应结果表明服务器本身发生错误

500 Internal Server Error

该状态码表明服务器端在执行请求时发生了错误。 也有可能是 Web应用存在的 bug 或某些临时的故障。

503 Service Unavailable

该状态码表明服务器暂时处于超负载或正在进行停机维护, 现在无法处理请求。

确保 Web 安全的HTTPS

HTTP 主要有这些不足,如下:

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

接收到的内容可能有误

按TCP/IP 协议族的工作机制, 通信内容在所有的通信线路上都有可能遭到窥视 。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PEcKhiC5-1646803092779)(C:Users崔常菲AppDataRoamingTyporatypora-user-imagesimage-20211026145203803.png)]
通信的加密

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

SSL组合使用的 HTTP 被称为 HTTPS(HTTPSecure, 超文本传输安全协议) 或 HTTP over SSL。

内容加密

还有一种将参与通信的内容本身加密的方式。 由于 HTTP 协议中没有加密机制, 那么就对 HTTP 协议传输的内容本身加密。 即把
HTTP 报文里所含的内容进行加密处理。

任何人都可发起请求

在 HTTP 协议通信时, 由于不存在确认通信方的处理步骤, 任何人都可以发起请求。 虽然使用 HTTP 协议无法确定通信方, 但如果使用 SSL则可以。

查明对手的证书

虽然使用 HTTP 协议无法确定通信方, 但如果使用 SSL则可以。

HTTP+ 加密 + 认证 + 完整性保护=HTTPS [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TBP009xw-1646803092779)(C:Users崔常菲AppDataRoamingTyporatypora-user-imagesimage-20211026150007003.png)]

HTTPS 并非是应用层的一种新协议。 只是 HTTP 通信接口部分用SSL(Secure Socket Layer) 和 TLS(Transport Layer Security) 协议代替而已。通常, HTTP 直接和 TCP 通信。 当使用 SSL时, 则演变成先和 SSL通信, 再由 SSL和 TCP 通信了。

加密方法

SSL采用一种叫做公开密钥加密(Public-key cryptography) 的加密处理方式。

加密和解密同用一个密钥的方式称为共享密钥加密(以共享密钥方式加密时必须将密钥也发给对方)

使用两把密钥的公开密钥加密 ,很难实现。

公开密钥加密使用一对非对称的密钥。 一把叫做私有密钥(private key) , 另一把叫做公开密钥(public key) 。

HTTPS 采用混合加密机制

HTTPS 采用共享密钥加密和公开密钥加密两者并用的混合加密机制。

交换密钥环节使用公开密钥加密方式, 之后的建立通信交换报文阶段则使用共享密钥加密方式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b2e5AZeD-1646803092780)(C:Users崔常菲AppDataRoamingTyporatypora-user-imagesimage-20211026150708100.png)]

证明公开密钥正确性的证书

可以使用由数字证书认证机构(CA, Certificate Authority) 和其相关机关颁发的公开密钥证书。

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HNn3ZfRK-1646803092780)(C:Users崔常菲AppDataRoamingTyporatypora-user-imagesimage-20211026151138934.png)]

HTTPS 的安全通信机制

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MsuLlPBQ-1646803092780)(C:Users崔常菲AppDataRoamingTyporatypora-user-imagesimage-20211026151207924.png)]
步骤 1: 客户端通过发送 Client Hello 报文开始 SSL通信。 报文中包含客户端支持的 SSL的指定版本、 加密组件(Cipher Suite) 列表(所使用的加密算法及密钥长度等) 。
步骤 2: 服务器可进行 SSL通信时, 会以 Server Hello 报文作为应答。 和客户端一样, 在报文中包含 SSL版本以及加密组件。 服务器的
加密组件内容是从接收到的客户端加密组件内筛选出来的。
步骤 3: 之后服务器发送 Certificate 报文。 报文中包含公开密钥证书
步骤 4: 最后服务器发送 Server Hello Done 报文通知客户端, 最初阶段的 SSL握手协商部分结束
步骤 5: SSL第一次握手结束之后, 客户端以 Client Key Exchange 报文作为回应。 报文中包含通信加密中使用的一种被称为 Pre-mastersecret 的随机密码串。 该报文已用步骤 3 中的公开密钥进行加密。
步骤 6: 接着客户端继续发送 Change Cipher Spec 报文。 该报文会提示服务器, 在此报文之后的通信会采用 Pre-master secret 密钥加密。
步骤 7: 客户端发送 Finished 报文。 该报文包含连接至今全部报文的整体校验值。 这次握手协商是否能够成功, 要以服务器是否能够正确解密该报文作为判定标准。
步骤 8: 服务器同样发送 Change Cipher Spec 报文。
步骤 9: 服务器同样发送 Finished 报文。
步骤 10: 服务器和客户端的 Finished 报文交换完毕之后, SSL连接就算建立完成。 当然, 通信会受到 SSL的保护。 从此处开始进行应用层协议的通信, 即发送 HTTP 请求。
步骤 11: 应用层协议通信, 即发送 HTTP 响应。
步骤 12: 最后由客户端断开连接。 断开连接时, 发送 close_notify 报文。 上图做了一些省略, 这步之后再发送 TCP FIN 报文来关闭与 TCP的通信 。

建立HTTPS过程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l9WZ2yAf-1646803092780)(C:Users崔常菲AppDataRoamingTyporatypora-user-imagesimage-20211026151354816.png)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QlfcSLif-1646803092780)(C:Users崔常菲AppDataRoamingTyporatypora-user-imagesimage-20211026151552885.png)]

一种是指通信慢。 另一种是指由于大量消耗CPU 及内存等资源, 导致处理速度变慢。 HTTPS 比 HTTP 要慢 2 到 100 倍 .

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

  1. 与纯文本通信相比, 加密通信会消耗更多的CPU 及内存资源。
  2. 证书是必不可少的。 而使用的证书必须向认证机构(CA) 购买。

最后

以上就是细心胡萝卜为你收集整理的TCP、IP 、HTTP——Http协议HTTP协议的全部内容,希望文章能够帮你解决TCP、IP 、HTTP——Http协议HTTP协议所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部