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

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

HTTP基本概念

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

超文本:指的是不仅仅限于文本的多样性,例如包括图片、视频等。

传输:表示数据的传输。

协议:规定了通信双方的规范。

超文本

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

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

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

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

传输

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

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

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

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

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

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

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

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

协议

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

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

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响应报文。最后,浏览器接收响应报文并将资源呈现给用户。整个过程中涉及到的细节和步骤还有很多,但基本流程就是这样。

深入理解HTTP的基础知识:请求-响应过程解析的更多相关文章

  1. 理解RxJava:(一)基础知识

    理解RxJava:(一)基础知识 本文翻译自Grokking RxJava, Part 1: The Basics,著作权归原作者danlew所有.译文由JohnTsai翻译.转载请注明出处,并保留此 ...

  2. HTTP请求响应过程 与HTTPS区别

    原文:HTTP请求响应过程 与HTTPS区别 HTTP协议学习笔记,基础,干货 HTTP协议 HTTP协议主要应用是在服务器和客户端之间,客户端接受超文本. 服务器按照一定规则,发送到客户端(一般是浏 ...

  3. Asp.Net请求响应过程

    Asp.Net请求响应过程 在之前,我们写了自己的Asp.Net框架,对整个流程有了一个大概的认识.这次我们来看一下Asp.Net整个请求处理过程是怎么样的. 浏览器封装请求报文,发送请求到达服务器, ...

  4. 通过HTTP请求响应过程了解HTTP协议

    通过HTTP请求响应过程了解HTTP协议 http://www.cnblogs.com/YeChing/p/6337378.html

  5. HTTP协议请求响应过程和HTTPS工作原理

    HTTP协议 HTTP协议主要应用是在服务器和客户端之间,客户端接受超文本. 服务器按照一定规则,发送到客户端(一般是浏览器)的传送通信协议.与之类似的还有文件传送协议(file transfer p ...

  6. 一次 HTTP 请求响应过程的完整解析

    因特网无疑是人类有史以来最伟大的设计,它互联了全球数亿台计算机.通讯设备,即便位于地球两端的用户也可在顷刻间完成通讯. 可以说『协议』是支撑这么一个庞大而复杂的系统有条不紊运作的核心,而所谓『协议』就 ...

  7. 完整的一次 HTTP 请求响应过程(一)

    因特网无疑是人类有史以来最伟大的设计,它互联了全球数亿台计算机.通讯设备,即便位于地球两端的用户也可在顷刻间完成通讯. 可以说『协议』是支撑这么一个庞大而复杂的系统有条不紊运作的核心,而所谓『协议』就 ...

  8. HTTP请求响应过程以及与HTTPS区别

    HTTP协议 HTTP协议主要应用是在服务器和客户端之间,客户端接受超文本. 服务器按照一定规则,发送到客户端(一般是浏览器)的传送通信协议.与之类似的还有文件传送协议(file transfer p ...

  9. 一个完整的http请求响应过程

    一. HTTP请求和响应步骤   图片来自:理解Http请求与响应 以上完整表示了HTTP请求和响应的7个步骤,下面从TCP/IP协议模型的角度来理解HTTP请求和响应如何传递的. 二.TCP/IP协 ...

  10. 一次完整的HTTP请求响应过程(很详细)

    一. HTTP请求和响应步骤   图片来自:理解Http请求与响应 以上完整表示了HTTP请求和响应的7个步骤,下面从TCP/IP协议模型的角度来理解HTTP请求和响应如何传递的. 二.TCP/IP协 ...

随机推荐

  1. UpSetR 高级参数使用教程

    在<UpSetR:多数据集绘图可视化处理利器>中我们介绍了 UpSetR 的一些概念和绘图基础参数使用,今天我们来学习一下 UpSetR 的 queries 和 attribute.plo ...

  2. 曲线艺术编程 coding curves 第五章 谐波图形(谐振图形) HARMONOGRAPHS

    原作:Keith Peters https://www.bit-101.com/blog/2022/11/coding-curves/ 译者:池中物王二狗(sheldon) blog: http:// ...

  3. 【2023 · CANN训练营第一季】昇腾AI入门Pytorch

    昇腾AI全栈架构 华为AI全栈全场景解决方案为4层,分别为芯片层.芯片使能层.AI框架层和应用使能层. 芯片 基于统一.可扩展架构的系列化AI IP和芯片,为上层加速提供硬件基础. 芯片产品:昇腾31 ...

  4. 【论文阅读】Learning Deep Features for Discriminative Localization

    这个是周博磊16年的文章.文章通过实验证明,即使没有位置标注,CNN仍是可以得到一些位置信息,(文章中的显著性图) CNN提取的feature含有位置信息,尽管我们在训练的时候并没有标记位置信息: 这 ...

  5. uni-app简单通用Request网络请求 支持请求成功 失败回调

    uni-app简单通用Request网络请求 支持请求成功 失败回调; 下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=12794 ...

  6. 解决redis从服务器未配置主服务器密码导致数据未同步&磁盘饱满问题

    问题前置场景 本人前几天买了一台2核4G+40G磁盘空间的云服务器用来学习使用,在服务器上安装了docker.为了学习redis主从架构,使用docker-compose部署了一主二从三台redis服 ...

  7. MongoDB从入门到实战之.NET Core使用MongoDB开发ToDoList系统(8)-Ant Design Blazor前端框架搭建

    前言 前面的章节我们介绍了一些值得推荐的Blazor UI组件库,通过该篇文章的组件库介绍最终我选用Ant Design Blazor这个UI框架作为ToDoList系统的前端框架.因为在之前的工作中 ...

  8. Hugging News #0703: 在浏览器中运行 Whisper 模型、WAIC 分论坛活动邀请报名

    每一周,我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新,包括我们的产品和平台更新.社区活动.学习资源和内容更新.开源库和模型更新等,我们将其称之为「Hugging Ne ...

  9. Kotlin 常用语法糖记录

    原文地址: Kotlin 常用语法糖记录 - Stars-One的杂货小窝 当使用 Kotlin 编程时,有一些常用的函数可以帮助我们简化代码并提高开发效率. 稍微列举下常用的方法 runCatchi ...

  10. 【IDEA】 远程调试

    远程调试 使用特定JVM参数运行服务端代码 要让远程服务器运行的代码支持远程调试,则启动的时候必须加上特定的JVM参数,这些参数是: -Xdebug -Xrunjdwp:transport=dt_so ...