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

news2024/11/13 9:58:16

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

我们可以通过在浏览器地址栏中输入网站的域名来访问该网站的内容,这就是万维网(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 技术的奥秘。我热爱技术交流与分享,对开源社区充满热情。同时也是一位腾讯云创作之星、阿里云专家博主、华为云云享专家、掘金优秀作者。

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2065330.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Xenu 网站死链接检测工具下载以及使用指南

引言 Xenus Link Sleuth&#xff08;简称 Xenu&#xff09;是一款功能强大的网站死链接检测工具。由于其绿色蜗牛形状的图标&#xff0c;Xenu 被广大的 SEO 人员亲切地称为“绿蜗牛”。 随着网站的发展&#xff0c;可能会因为删除过期内容或改版而导致一些死链接的产生。死链…

扫描包得到所有Bean的Class对象

文章目录 1.任务介绍以及类加载器1.介绍2.类加载器1.介绍2.自己程序的类路径 2.新建一个模块sun-spring用来写自己的spring容器1.新建模块2.查看是否交给父模块管理3.引入日志 3.具体实现1.目录2.Component.java3.ComponentScan.java4.MonsterDao.java5.MonsterService.java6.S…

第三期书生大模型实战营 进阶岛第3关LMDeploy 量化部署进阶实践

环境准备 conda create -n lmdeploy python3.10 -y conda activate lmdeploy conda install pytorch2.1.2 torchvision0.16.2 torchaudio2.1.2 pytorch-cuda12.1 -c pytorch -c nvidia -y pip install timm1.0.8 openai1.40.3 lmdeploy[all]0.5.3为方便文件管理&#xff0c;我…

Vue(一) 插值与指令语法、数据代理、MVVM模式、事件处理

文章目录 1. 初始Vue2. 模板语法2.1 插值语法2.2 指令语法 3. el与data的两种写法3.1 el的两种写法3.2 data的两种写法 4. MVVM模式5. 数据代理5.1 Object.defineProperty()5.2 何为数据代理5.4 vue中的数据代理 6. 事件处理6.1 v-on6.2 事件修饰符6.3 键盘按键事件 1. 初始Vue…

【C语言】预处理的使用

预处理 一、预处理-宏定义1、程序编译过程(1) 编写源程序(2) 程序编译过程说明 2、预处理3、宏的概念4、无参宏5、带参宏6、带参宏的副作用7、宏定义中的符号粘贴 二、预处理.条件编译1、无值宏定义2、条件编译3、条件编译的使用场景 三、预处理.头文件1、头文件的作用2. 头文件…

RTSP/Onvif安防视频监控平台EasyNVR在欧拉系统中启动失败的原因排查

视频安防监控平台EasyNVR可支持设备通过RTSP/Onvif协议接入&#xff0c;并能对接入的视频流进行处理与多端分发&#xff0c;包括RTSP、RTMP、HTTP-FLV、WS-FLV、HLS、WebRTC等多种视频流格式。平台支持轻量化部署&#xff0c;可兼容各类操作系统&#xff0c;包括Windows、Linux…

Admin.NET源码学习(4:基于Furion的后台服务启动方式浅析)

Admin.NET为前后端分离架构&#xff0c;后台服务的入口项目为Admin.NET.Web.Entry&#xff0c;其与其它项目的依赖关系如下图所示。   由于项目采用Furion框架&#xff0c;后台服务启动方式、注册方式、配置方式等方面与常规的asp.net core项目差异明显&#xff0c;初步接触…

计算机的错误计算(七十)

摘要 讨论大数的正割函数 sec(x)的错误计算。 例1. 已知 在 Maple 中计算 在 Maple中输入&#xff1a; restart; sec(30^54.8); 则输出&#xff1a; -5.214386310 若输入&#xff1a; Digits : 16;evalf[16](sec(30^54.8)); 则输出&#xff1a; 1.324455078865824…

中年人开发语言学习之路,反其道而行之

大家都更愿意学习新技术、新架构&#xff0c;代表着新方向新趋势&#xff0c;当大家都这么想的时候&#xff0c;注定了竞争就会激烈。有一部分中年程序员&#xff0c;反其道而行之&#xff0c;学习一些老掉牙的开发语言&#xff0c;向哪些近乎被遗忘的老旧系统进军。 市面上依…

一文了解Ansible原理以及常见使用模块

ansible使用手册 1. 简述 Ansible 是一种开源的自动化工具&#xff0c;主要用于配置管理、应用程序部署和任务自动化。 它使用简单的 YAML 语言来定义自动化的任务【playbook】&#xff0c;使得配置和部署变得更加直观和易于管理。 基于SSH协议连接到远程主机来执行指令。 2…

图像数据处理21

五、边缘检测 5.2基于二阶导数的边缘检测 一阶导数&#xff08;如Sobel、Prewitt算子&#xff09;能够捕捉到灰度值的快速变化&#xff0c;但有时会因检测到过多的边缘点而导致边缘线过粗。为了更加精确地定位边缘位置&#xff0c;可以利用二阶导数的零交叉点。零交叉点是是函…

触想工业一体机辅助DR系统提升医学影像诊断效率

一、行业发展背景 早期X线摄影依赖胶片成像&#xff0c;不便于图像存储管理&#xff0c;且显影过程长&#xff0c;无法进行后期处理&#xff0c;诊断质量和效率受到局限。 随着数字化技术的发展&#xff0c;DR系统问世&#xff0c;利用平板探测器将X射线图像转化为数字信号&…

推荐一款功能全面的层次化笔记应用,支持自由拖拽、缩放、旋转,可视化非常牛逼(附源码)

背景 不知道各位大佬日常生活中笔记软件用的多不&#xff0c;小编在工作中常常用笔记来记录每天的收获和安排。笔记软件的好坏直接影响了工作的心情和效率。今天给大家介绍的这款笔记软件&#xff0c;以其强大的笔记功能为基础&#xff0c;创造性地融入了画布式的自由编辑特性…

关于武汉芯景科技有限公司的RS232通信接口芯片XJ3243EEUI开发指南(兼容MAX3243EEUI)

一、芯片引脚介绍 1.芯片引脚 2.引脚描述 二、典型应用电路 三、功能描述 1.Transmitter 通过T1&#xff0c;T2可以将TTL电平转换为RS232电平 2.Receiver 通过R1&#xff0c;R2可以将RS232电平转换为TTL电平 3.工作模式控制 4.INVALID引脚

EDKII之安全启动详细介绍

文章目录 安全启动简介安全启动流程介绍签名过程BIOS实现小结 安全启动简介 安全启动&#xff08;Secure Boot&#xff09;是一种计算机系统的安全功能&#xff0c;旨在确保系统启动过程中只能加载经过数字签名的受信任的操作系统和启动加载程序。通过使用安全启动&#xff0c…

数据结构之串与KMP算法详解

串 一. 定义&#xff08;了解&#xff09; 串&#xff0c;即字符串&#xff0c;是计算机系统和网络传输中最常用的数据类型&#xff0c;任何非数值型的处理都会以字符串的形式存储和使用。 串&#xff08;String&#xff09;是由零个或多个字符组成的有限序列&#xff0c;一…

多选类型项,点击亮或不亮

用于菜单下拉 多选项 。 <div style"display: flex; flex-wrap: wrap;margin: 0 auto;"><div v-for"(item, index) in prpductnames" :key"item.id"><span :class"{ selected: selectArr.includes(item.id) }" click&q…

《计算机操作系统》(第4版)第7章 文件管理 复习笔记

第7章 文件管理 一、文件和文件系统 1. 数据项、记录和文件 数据组成可分为数据项、记录和文件三级&#xff0c;它们之间的层次关系如图7-1所示。 图7-1 文件、记录和数据项之间的层次关系 (1)数据项 在文件系统中&#xff0c;数据项是最低级的数据组织形式&#xff0c;可以分为…

Grove Vision AI V2之GPIO

一、说明 实现一个LED闪烁的Demo&#xff0c;Grove Vision AI V2开发板上有一个USER_LED&#xff0c;由GPIO SEN_D2驱动&#xff0c;SEN_D2为高电平是USER_LED亮&#xff0c;SEN_D2为低电平时USER_LED灭。 USER_LED部分电路如下&#xff1a; 二、创建例程 1、创建文件 在See…

MySQL的源码安装及基本部署(基于RHEL7.9)

这里源码安装mysql的5.7.44版本 一、源码安装 1.下载并解压mysql , 进入目录: wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-5.7.44.tar.gz tar xf mysql-boost-5.7.44.tar.gz cd mysql-5.7.44/ 2.准备好mysql编译安装依赖: yum install cmake g…