HTTP && HTTPS 含义及工作原理(1)

121 阅读5分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第17天,点击查看活动详情

这两天在看组里系统资料的时候,注意到在文档中,涉及到一些请求时,特意强调是 HTTP 还是 HTTPS。包括之前在开会给我介绍系统技术的时候,在会上也有专门强调。以前对这两个的概念不是很清晰,正好今天捋一下.....

HTTP 概念

HTTP,Hyper Text Transfer Protocol,超文本协议。它是一种协议,是用于从 www 服务器传输超文本到本地浏览器的传送协议。

它被用于在 Web 浏览器和网站服务器之间传递信息,HTTP 协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了 Web 浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP 协议不适合传输一些敏感信息。

HTTP 特点

  1. 无状态:协议对客户端没有状态存储,对事物处理没有“记忆”能力,比如访问一个网站需要反复进行登录操作;
  2. 无连接:HTTP/1.1 之前由于无状态特点,每次请求需要通过 TCP 三次握手四次挥手,和服务器重新建立连接。比如某个客户机在短时间多次请求同一个资源,服务器并不能区别是否已经响应过用户的请求,所以每次需要重新响应请求,需要消耗不必要的时间和流量;
  3. 基于请求和响应:基本特性,由客户端发起请求,服务端响应;
  4. 简单快速、灵活;
  5. 通信使用明文,请求和响应不会对通信双方进行确认,无法保护数据的完整性。

HTTP 通信传输

1. 建立 TCP 连接
2. Web 浏览器Web 服务器 发送请求命令。Get/example/HelloWorld.jsp HTTP/1.1
3. Web 浏览器 发送请求头信息。如 user-agent,host 等关于自身的信息,最后发送一个空请求头代表请求头信息发送完毕。如果是 Post 请求,会继续提交请求体。
4. Web 服务器 应答。应答第一部分是版本号和协议状态码:HTTP/1.1 200 OK
5. Web 服务器 发送应答头信息。关于它自己的信息及被请求的文档,最后发送一个空白行表示头信息发送结束。
6. Web 服务器浏览器 发送数据。以 Content-Type 应答头信息所描述的格式发送用户所请求的实际数据。
7. Web 服务器 关闭 TCP 连接。一旦 Web 服务器浏览器 发送了请求数据,它就要关闭 TCP 连接。如果添加 Connection:keep-alive,TCP 连接在发送后将仍然保持打开状态。

客户端在浏览器输入 URL 回车后,DNS 解析域名得到服务器的 IP 地址,服务器在 80 端口监听客户端请求,端口通过 TCP/IP 协议(可以通过 Socket 实现)建立连接。HTTP 属于 TCP/IP 模型中的应用层协议,所以通信的过程其实是对应数据的入栈和出栈。

image.png

报文从 应用层 传送到 运输层,运输层通过 TCP 三次握手和服务器建立连接,四次挥手释放连接。

TCP 三次握手

image.png

三次握手,防止已失效的连接请求报文突然又传送到服务端,从而产生错误。

举个栗子,假设 客户端 Client 发出的第一个连接请求报文并没有丢失,而是在某个网络节点长时间的滞留了,导致延误到连接释放以后的某个时间才到达 服务端 Server。本来这是一个早已失效的报文,但 Server 收到此失效的连接请求报文后,误以为是 Client 再次发出的一个新的连接请求,就继续向 Client 发出确认报文,同意建立连接。如果不采用 三次握手,只要 Server 发出确认,新的连接就建立了,由于 Client 并没有发出建立连接的请求,因此不会理睬 Server 的确认,也不会向 Server 发送数据,但 Server 却以为新的运输连接已经建立,并一直等待 Client 发来数据,一直等.....导致 Server 资源白白浪费。

四次挥手

image.png

TCP 是全双工模式,当 客户端 Client 发出 FIN 报文时,只是表示 Client 已经没有数据要发送了,Client 是想告诉 服务端 Server,数据已经全部发送完毕;但是,这时候 Client 还是可以继续接受来自 Server 的数据;当 Server 返回 ACK 报文时,表示它已经知道 Client 没有数据发送了,但是 Server 还是可以发送数据到 Client 的;当 Server 也发送 FIN 报文时,就表示 Server 也没有数据要发送了,就会告诉 Client,我的数据也发送完毕了,如果 Client 确认报文,之后两者就会中断这次的 TCP 连接。

梳理下来,东西还是比较多的,一次很难梳理全,今天就先简单梳理了 HTTP,重点在于理解,理解其工作流程。
希望本文能够帮到你,如有错误,望指正!
我向你敬礼啊,Salute!