当前位置: 首页 > news >正文

深入理解HTTP的基础知识:请求-响应过程解析

首先,我们从网络协议的最顶层开始讲解,即应用层。在网络通信中,应用层是最接近用户的一层,它负责为特定的网络应用提供服务和功能。应用层协议定义了数据交换的规则和格式,以便不同的应用程序能够相互通信和交换信息。

我们可以通过在浏览器地址栏中输入网站的域名来访问该网站的内容,这就是万维网(WWW)应用。该应用使用超文本传输协议(HTTP)作为相关的应用层协议。此外,在开发过程中,我们经常使用RESTful风格的接口,同样也是使用HTTP进行远程调用。还有一些专门用于远程调用的中间框架,如Rabbin,也是基于HTTP进行调用。

HTTP基本概念

HTTP 是指超文本传输协议,全称为HyperText Transfer Protocol。它的名称可以分为三个部分:

超文本:指的是不仅仅限于文本的多样性,例如包括图片、视频等。
传输:表示数据的传输。
协议:规定了通信双方的规范。
image

超文本

HTTP 传输的内容是「超文本」。

在互联网的早期阶段,文本仅指简单的字符文字。然而,如今,文本的定义已经扩展到包括图片、视频、压缩包等内容。在HTTP中,这些内容都被归类为超文本。

超文本是指超越普通文本的文本形式。它是文字、图片、视频等的混合体,最关键的是它包含超链接,可以从一个超文本跳转到另一个超文本。

HTML是最常见的一种超文本格式。它本身是纯文本文件,但通过使用各种标签来定义图片、视频等内容的链接,经过浏览器解析后,呈现给我们的是一个拥有文字和图像的网页。

传输

所谓的「传输」,非常容易理解,就是将数据从 A 点传到 B 点,或者从 B 点移动到 A 点。

HTTP 协议是一种单向无状态协议,这意味着只有客户端向服务器端发送请求时,服务器才会响应并返回数据给客户端。然而,服务器并不会主动发送HTTP请求返回给客户端。因此,单向通信有对应的双向通信方式,通过某些技术和扩展,HTTP协议也可以实现类似于双向通信的效果。

例如,通过长轮询(Long Polling),客户端可以发送一个请求并保持连接打开,直到服务器有新的数据可用时才返回响应。这种方式使得服务器能够向客户端推送数据,从而实现了类似于双向通信的效果。

WebSockets是一种全双工通信协议,它允许客户端和服务器之间进行双向通信。通过建立持久的连接,WebSockets实现了更实时的双向通信。

另外,事件监听(Event Listening)也是一种常见的方法。如果你曾经实现过类似于gpt那样的聊天打字机效果,你应该对这种方式非常熟悉。在事件监听中,服务器会监听特定的事件,并在事件发生时向客户端发送数据。这种方式也能实现类似于双向通信的效果。

当我们使用互联网进行浏览网页的时候,浏览器扮演着请求方 A 的角色,而百度网站则是应答方 B。双方之间通过约定使用 HTTP 协议进行通信,因此浏览器将请求的数据发送给网站,而网站则会返回一些数据给浏览器。最终,浏览器会将这些数据渲染在屏幕上,使我们能够看到图片和视频等内容。

image

数据的传输不仅仅是在A和B之间进行,还可以经过其他中间节点进行中转或接力。就好像第一排的同学想要传递纸条给最后一排的同学,这个过程中需要经过许多中间人(同学),所以数据的传输方式从"A <— > B"变成了"A <-> L <-> K <-> B"。

在HTTP中,中间人需要遵守HTTP协议,并且只要不干扰基本的数据传输,就可以添加任意的额外内容。通过这种传输方式,我们可以进一步理解HTTP。HTTP是一个在计算机世界中用于在两点之间传输数据的约定和规范。

协议

协议在生活中非常常见,我最早接触的是三方协议,之后在工作中又接触到了租房协议。

image

生活中的协议与计算机中的协议本质上是相同的。协议的特点是需要有多个人来遵守,如果只有自己一个人,就不需要协议了。同时,协议中还会规定一系列的行为约定和规范。比如在三方协议中,规定了试用期的期限和毁约金的金额等;在租房协议中,规定了租期的期限、每月租金的金额以及违约的处理方式等。

HTTP是计算机世界中的一种协议。它使用计算机可理解的语言,确立了计算机之间进行交流和通信的规范,同时也规定了各种控制和错误处理方式。

OK,通过对HTTP这三个名词的详细解释,可以给出更准确、更具技术含量的答案:HTTP是一种在计算机世界中约定和规范了在两个点之间传输超文本数据(如文字、图片、音频、视频等)的协议。

HTTP 请求响应过程

让我们通过一个具体的例子来深入探讨一下HTTP的请求响应过程。假设我们要访问的URL地址是:

http://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzUyNTE4MTY2Mw==&action=getalbum&album_id=3104224530761236485#wechat_redirect

当我们在浏览器地址栏输入完网址后,点击回车,浏览器内部会进行以下操作:

  1. 首先,DNS域名解析器会解析你输入的域名(mp.weixin.qq.com),将其对应的IP地址确定下来。可以通过在线工具或者使用cmd命令窗口ping域名获取IP。

  2. 浏览器会使用默认的80端口与服务器建立HTTP连接。同时,浏览器客户端会随机选择一个可用的端口作为客户端端口。在客户端和服务器进程之间,会建立一个套接字用于通信。

  3. HTTP客户端通过套接字向服务器发送一个HTTP请求报文。这个请求报文中包含了请求的资源路径(mp/appmsgalbum),而问号后面则是我们需要的参数。关于HTTP请求报文的详细内容,我们稍后会进行详细讨论。

  4. HTTP服务器通过套接字接收到这个请求报文后,会对请求进行解析,并从存储器(RAM或磁盘)中检索出请求的对象(mp.weixin.qq.com/mp/appmsgalbum)。然后,服务器会将检索到的对象封装到HTTP响应报文中,并通过套接字发送给客户端。

  5. HTTP服务器会通知TCP断开连接。实际上,TCP连接的断开需要等到客户端完全接收完响应报文后才会断开连接。

  6. 当HTTP客户端接收完响应报文后,TCP连接会关闭。客户端会从响应报文中提取出响应的文件,并对HTML文件进行检查。然后,客户端会循环检查报文中的其他内部对象。

  7. 在检查完成后,HTTP客户端会将相应的资源通过显示器呈现给用户。

至此,通过在浏览器地址栏输入网址并按下回车的全过程就结束了。上述过程描述的是一种简单的请求-响应的完整过程,实际的请求-响应情况可能比上述过程更加复杂。

总结

本文介绍了HTTP协议的基本概念和请求响应过程。HTTP是一种用于在计算机之间传输超文本数据的协议,它包括超文本、传输和协议三个要素。超文本指的是除了文本外还包括图片、视频等内容,而传输是指数据从一个点传输到另一个点的过程。协议是指通信双方遵守的规范和约定。在请求响应过程中,浏览器首先通过DNS解析确定要访问的服务器的IP地址,然后与服务器建立HTTP连接。浏览器发送HTTP请求报文给服务器,服务器解析请求报文并返回包含请求的资源的HTTP响应报文。最后,浏览器接收响应报文并将资源呈现给用户。整个过程中涉及到的细节和步骤还有很多,但基本流程就是这样。


我是努力的小雨,一名 Java 服务端码农,潜心研究着 AI 技术的奥秘。我热爱技术交流与分享,对开源社区充满热情。同时也是一位腾讯云创作之星、阿里云专家博主、华为云云享专家、掘金优秀作者。

💡 我将不吝分享我在技术道路上的个人探索与经验,希望能为你的学习与成长带来一些启发与帮助。

🌟 欢迎关注努力的小雨!🌟

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Google Ads投放 | 如何分析竞争对手的谷歌广告?
  • 【仿真与实物设计】基于51单片机设计的打地鼠游戏机——程序源码原理图proteus仿真图PCB设计文档演示视频元件清单等(文末工程资料下载)
  • 黑神话悟空,高清壁纸、原画,游戏截图
  • EXCEL格式转化
  • ARM 裸机与 Linux 驱动对比及 Linux 内核入门
  • 特斯拉电动卡车事故引发安全调查,汽车制造商电动车战略调整
  • 【网络编程】第八章 传输层-udp(netstat+pidof+upd协议)
  • 继Ollama之后,Go在AI领域再下一城
  • Vue3学习——Node环境安装(一)
  • 【Redis】数据结构和内部编码
  • 模型量化方法-GPTQ
  • python中%s是什么
  • 【每日刷题】Day105
  • JavaScript 原型与原型链
  • oracle 事务回滚
  • [笔记] php常见简单功能及函数
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • 0x05 Python数据分析,Anaconda八斩刀
  • 30秒的PHP代码片段(1)数组 - Array
  • javascript从右向左截取指定位数字符的3种方法
  • JavaScript实现分页效果
  • Java到底能干嘛?
  • mongo索引构建
  • mysql外键的使用
  • Object.assign方法不能实现深复制
  • PAT A1092
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • SpingCloudBus整合RabbitMQ
  • 机器学习中为什么要做归一化normalization
  • 入手阿里云新服务器的部署NODE
  • 实战|智能家居行业移动应用性能分析
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 运行时添加log4j2的appender
  • 关于Android全面屏虚拟导航栏的适配总结
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #mysql 8.0 踩坑日记
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • ( 10 )MySQL中的外键
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (21)起落架/可伸缩相机支架
  • (C#)一个最简单的链表类
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (二)springcloud实战之config配置中心
  • (黑马C++)L06 重载与继承
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (顺序)容器的好伴侣 --- 容器适配器
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (一)插入排序
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • .axf 转化 .bin文件 的方法
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全