【图解Http 学习摘要】三、HTTP 协议基础、四次挥手

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 【图解Http 学习摘要】三、HTTP 协议基础、四次挥手

HTTP 协议用于客户端和服务器端之间的通信,应用 HTTP 协议时,必定是一端担任客户端角色,另一端担任服务器端角色。


一、请求、响应报文


请求


1268169-20210704092539910-699645623.png


包含了:请求方法、请求 URI、协议版本、请求首部字段(可选)和内容实体。


响应


1268169-20210704092604225-2115000102.png


包含了:协议版本、状态码(比如200)、用以解释状态码的原因短语、响应首部字段(可选)以及实体主体。


二、HTTP 是无状态的


1. 无状态


HTTP 是一种不保存状态,即无状态(stateless)协议,对于发送过的请求或响应都不做持久化处理。


1268169-20210704093026557-1557061042.png


使用 HTTP 协议,每当有新的请求发送时,就会有对应的新响应产生。协议本身并不保留之前一切的请求或响应报文的信息。


这样的目的是更快地处理大量事务,确保协议的可伸缩性,特意把 HTTP 协议设 计成如此简单的。


不过,随着web的发展,因无状态而导致业务处理变得棘手的情况增多了。比如,用户登录到一家购物网站,即使他跳转到该站的其他页面后,也需要能继续保持登录状态。


HTTP/1.1 虽然是无状态协议,但为了实现期望的保持状态功能,于 是引入了 Cookie 技术。



Cookie 技术通过在请求和响应报文中写入Cookie 信息来控制客户端的状态。


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

1268169-20210704115754891-821367385.png

  • 服务器端发现客户端发送过来的 Cookie 后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。


1268169-20210704115841147-875137158.png

三、HTTP 方法


用于告知服务器意图。


  • GET:用来请求访问已被 URI 识别的资源。指定的资源经服务器 端解析后返回响应内容。
  • POST:POST 方法用来传输实体的主体
    虽然用 GET 方法也可以传输实体的主体,但一般不用 GET 方法进行传输,而是用 POST 方法。
    虽说 POST 的功能与 GET 很相似,但 POST 的主要目的并不是获取响应的主体内容。
  • PUT:用来传输文件。
    但是,鉴于 HTTP/1.1 的 PUT 方法自身不带验证机制,任何人都可以上传文件 , 存在安全性问题,因此一般的 Web 网站不使用该方法。
    若架构设计采用 REST(REpresentational State Transfer,表征状态转移)标准的同类 Web 网站,就可能会开放使用 PUT 方法。
  • HEAD:HEAD 方法和 GET 方法一样,只是不返回报文主体部分。用于确认 URI 的有效性及资源更新的日期时间等。
  • DELETE:DELETE 方法用来删除文件。
    但是,HTTP/1.1 的 DELETE 方法本身和 PUT 方法一样不带验证机制,所以一般的 Web 网站也不使用 DELETE 方法。
    当配合 Web 应用 程序的验证机制,或遵守 REST 标准时还是有可能会开放使用的。
  • OPTIONS:用来查询针对请求 URI 指定的资源支持的方法。
  • CONNECT:要求在与代理服务器通信时建立隧道,实现用隧道协 议进行 TCP 通信。主要使用 SSL(Secure Sockets Layer,安全套接层)和 TLS(Transport Layer Security,传输层安全)协议把通信内容加密后经网络隧道传输。


四、持久连接节省通信量


痛点


HTTP 协议的初始版本中,每进行一次 HTTP 通信就要断开一次 TCP 连接。


1268169-20210704094800304-81437917.png


但是随着发展,浏览一个 HTML 页面可能会包含很多内容,比如有多张图片,每次的请求都会造成无谓的 TCP 连接建立和断开,增加通信量的开销。


1268169-20210704095032259-1337637453.png


持久连接


为解决上述 TCP 连接的问题,相出了持久连接的方法,也称为HTTP keep-alive 或 HTTP connection reuse。


只要任意一端 没有明确提出断开连接,则保持 TCP 连接状态。在建立 1 次 TCP 连接后进行多次请求和响应的交互。

1268169-20210704101447481-909103814.png



四次挥手


这里补充一个知识点。


“挥手”即表示要说再见。在上图所示,断开TCP连接的时候看到有4次交互,这就是4次挥手。


这一过程由客户端或服务端任一方执行,图示里就是由服务器端主动发起的,客户端被动关闭:


  • 第一次:服务器端发送一个 FIN,用来关闭客户端到服务器的数据传送。
  • 第二次:客户端收到这个 FIN,它发回一个 ACK。
  • 第三次:客户端关闭与服务器端的连接,发送一个 FIN 给服务器端。
  • 第四次:服务器端发回 ACK 报文确认。


面试官爱追问:为什么连接的时候是三次握手,关闭的时候却是四次握手?


1268169-20210704114945227-1748969072.png


1)三次握手


被动方收到主动方的 SYN 连接请求报文后,可以直接发送SYN+ACK报文。


其中 ACK 报文是用来应答的,SYN 报文是用来同步的。


2)四次挥手


首先,四次挥手是为了确保数据能够完整传输。


被动方收到主动方的 FIN 报文通知时,它仅仅表示主动方没有数据再发送给被动方了。


但未必被动方所有的数据都完整的发送给了主动方,所以被动方不会马上关闭SOCKET,它可能还需要发送一些数据给主动方


全部发送完成后再发送 FIN 报文给主动方,告诉主动方同意关闭连接。


所以这里的 ACK 报文和 FIN 报文多数情况下都是分开发送的。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
13天前
|
XML API 网络安全
【安卓】在安卓中使用HTTP协议的最佳实践
【安卓】在安卓中使用HTTP协议的最佳实践
27 4
|
3天前
|
安全 网络协议 网络安全
IP代理的三大协议:HTTP、HTTPS与SOCKS5的区别
**HTTP代理**适用于基本网页浏览,简单但不安全;**HTTPS代理**提供加密,适合保护隐私;**SOCKS5代理**灵活强大,支持TCP/UDP及认证,适用于绕过限制。选择代理协议应考虑安全、效率及匿名需求。
|
2天前
|
缓存 负载均衡 NoSQL
Redis系列学习文章分享---第十四篇(Redis多级缓存--封装Http请求+向tomcat发送http请求+根据商品id对tomcat集群负载均衡)
Redis系列学习文章分享---第十四篇(Redis多级缓存--封装Http请求+向tomcat发送http请求+根据商品id对tomcat集群负载均衡)
8 1
|
2天前
|
安全 网络安全 数据安全/隐私保护
深入理解HTTP协议:工作原理与安全性
【6月更文挑战第28天】HTTP是互联网基础协议,用于浏览器与服务器通信。基于请求-响应模型,无状态且可扩展。但其明文传输、缺乏身份验证和数据完整性校验导致安全问题。HTTPS 加入SSL/TLS,提供加密、身份验证和完整性校验,保障网络安全。了解HTTP原理和安全至关重要。
|
2天前
|
数据安全/隐私保护
数据防护之=HTTPS协议增加了<数据加密>
数据防护之=HTTPS协议增加了<数据加密>
|
3天前
|
缓存 开发框架 网络协议
必知的技术知识:HTTP协议和SOCKS5协议
必知的技术知识:HTTP协议和SOCKS5协议
|
3天前
|
移动开发 缓存 网络协议
Beetlex实现完整的HTTP协议
Beetlex实现完整的HTTP协议
|
5天前
|
Web App开发 缓存 安全
HTTP协议 -JavaWeb基础必知
HTTP协议 -JavaWeb基础必知
13 0
|
9天前
|
机器学习/深度学习 安全 数据安全/隐私保护
【计算机网络】深度学习HTTPS协议
【计算机网络】深度学习HTTPS协议
19 0
|
9天前
|
机器学习/深度学习 前端开发 JavaScript
【计算机网络】深度学习使用应用层的HTTP协议
【计算机网络】深度学习使用应用层的HTTP协议
30 0