【计算机网络笔记】Web应用之HTTP协议(涉及HTTP连接类型和HTTP消息格式)
系列文章目录
什么是计算机网络?
什么是网络协议?
计算机网络的结构
数据交换之电路交换
数据交换之报文交换和分组交换
分组交换 vs 电路交换
计算机网络性能(1)——速率、带宽、延迟
计算机网络性能(2)——时延带宽积、丢包率、吞吐量/率
计算机网络体系结构概念
OSI参考模型基本概念
OSI参考模型中非端-端层(物理层、数据链路层、网络层)功能介绍
OSI参考模型中端-端层(传输层、会话层、表示层、应用层)功能介绍
TCP/IP参考模型基本概念,包括五层参考模型
网络应用的体系结构
网络应用进程通信
网络应用对传输服务的需求
- 系列文章目录
- 什么是Web
- HTTP协议概述
- HTTP连接
- 非持久性连接(Nonpersistent HTTP)
- 持久性连接(Persistent HTTP)
- HTTP消息格式
- HTTP请求消息
- HTTP响应消息
- HTTP方法的类型
什么是Web
Web:World Wide Web(即我们常见的www),也叫万维网。由Tim Berners-Lee这位伟大的科学家发明。

Web最基本的构成要素是网页,网页之间互相链接就形成了庞大的信息网络、服务网络等等。
网页(Web Page)包含多个对象(objects)。
- 对象:HTML文件、JPEG图片、视频文件、动态脚本等
- 每个网页包含基本HTML文件,这个文件又包含对其他对象引用的链接。
互联网上有那么多的网页,那就又遇到了寻址的问题。这里就是web对象的寻址。用URL(Uniform Resoure Locator)统一资源定位器标识web对象(在RFC1738中有详细描述)。基本格式为:Scheme://host:port/path。如下所示,这里省略了协议名称,默认是http协议。

HTTP协议概述
Web应用遵循的协议就是HTTP协议(HyperText Transfer Protocol)。
- 即超文本传输协议。
- 这个协议采用C/S结构。
- 客户—Browser:请求、接收、展示Web 对象
- 服务器—Web Server:响应客户的请求 ,发送对象。Apache web server是现在是一个标准。
HTTP应用层协议使用的传输层协议就是TCP协议。
- 服务器在80端口等待客户的请求
- 浏览器发起到服务器的TCP连接(创建套接字Socket)
- 服务器接受来自浏览器的TCP连接
- 浏览器(HTTP客户端)与Web服务器(HTTP服务器)交换HTTP消息
- 关闭TCP连接
HTTP应用协议是一个无状态(stateless)协议。通俗地讲就是服务器不维护任何有关客户端过去所发请求的信息。比如两分钟之前请求了百度的页面,两分钟后再次请求,服务器端对这两次请求是不区分的。服务器就是无记忆的。
一般来说,大家更喜欢使用无状态的协议,因为有状态的协议往往更复杂。因为需要维护状态(历史信息),此外,如果客户或服务器失效,会产生状态的不一致,解决这种不一 致代价高。
HTTP连接
我们已经知道,web应用所遵循的应用层协议是HTTP协议,HTTP底下依靠的是TCP传输层协议建立连接。
那在对TCP的使用上是有两种不同的方法的,我们称为HTTP连接的两种类型。
非持久性连接(Nonpersistent HTTP)
- 每个TCP连接最多允许传输一个 对象
- HTTP 1.0版本使用非持久性连接
大致工作过程:

大家可能遇到过这种情况:网速较慢的情况下,我们打开一个网页,文字都出来了,但是那些图片一张一张地慢慢才出来,这从一定程度上反映了上面的工作过程。
我们怎么来计算这个过程的时间?下面进行响应时间分析与建模。
-
RTT(Round Trip Time):从客户端发送一个很小的数据包到服务器 并返回所经历的时间。
-
响应时间(Response time):
- 发起、建立TCP连接:1个RTT
- 发送HTTP请求消息到HTTP响应消息的前几个字节到达:1个RTT
- 响应消息中所含的文件/对象传输时间…
-
Total=2RTT +文件发送时间。

非持久性连接的问题:
- 每个对象需要2个RTT以上的时间才能获得。
- 操作系统需要为每个TCP连接开销资源(overhead)。
- 浏览器打开多个并行的TCP连接以获取网页所需对象,这个时候给服务器端带来很大的负担。
持久性连接(Persistent HTTP)
- 每个TCP连接允许传输多个对象
- HTTP 1.1版本默认使用持久性连接
建立TCP资源是有代价的,也就是说TCP连接资源是宝贵的。那我们就尽可能多利用这次连接。
对比非持久性连接,持久性连接:发送响应后,服务器保持TCP连接的打开,后续的HTTP消息可以通过这个连接发送。
细分的话就有两种类型:
-
无流水(pipelining)的持久性连接:
- 客户端只有收到前一个响应后才发送新的请求。
- 每个被引用的对象耗时1个RTT(对比2RTT,减少了建立连接的一个RTT时间开销)。
-
带有流水机制的持久性连接:
- HTTP 1.1的默认选项。
- 客户端只要遇到一个引用对象就尽快发出请求。就不用等前面那个响应来。
- 理想情况下,收到所有的引用对象只需耗时约1个RTT。
HTTP消息格式
HTTP协议有两类消息:
- 请求消息(request)
- 响应消息(response)
HTTP请求消息

请求消息是用ASCII码写的,所以只要有计算机基础的人就可以读懂。
-
第一行是请求行。包括请求命令(GET、POST…)、URL、http版本
-
接着几行是头部行。包括主机名称Host、浏览器类型和版本、连接状态、接受的语言。
-
接着是一个空行。
-
空行下面是消息体。
什么时候请求会有消息体呢?想想我们平时登录一个网站,是不是要填写一些基本信息和密码,浏览器就会把这些数据传给服务器。那把这些用户输入信息传给服务器有哪些方法?
主要有下面这些方法:
-
POST方法。使用POST方法,可以把网页中的表格里的数据放到请求消息的消息体里传给服务器,服务器再从消息体里提出这些数据。
-
GET方法。也叫URL方法。输入的信息比较少的话,可以把输入信息通过请求行的URL字段上传。这样URL就会有变。比如:

HTTP响应消息

HTTP响应消息同样是由ASCII码写的,所以我们也是可以直接读的。
- 第一行是状态行。包括http版本和状态码以及状态码的解释。
- 接着几行是头部行。包含的内容和请求消息的头部行差不多。注意Date字段是Web服务器生成这个响应消息的时间;Server是服务器端所使用的软件。
- 接着是一个空行。
- 接着是响应的HTML文件数据。
HTTP方法的类型
-
HTTP/1.0:
- GET
- POST
- HEAD。要求服务器(server)不要将所请求的对象放入响应消息中。这个往往是做测试用。
-
HTTP/1.1:
- GET、
- PUT。将消息体中的文件上传到URL字段所指定的路径。
- DELETE 。 删除URL字段所指定的文件
相关文章:
【计算机网络笔记】Web应用之HTTP协议(涉及HTTP连接类型和HTTP消息格式)
系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)…...
IDEA 2023.2.2 使用 Scala 编译报错 No scalac found to compile scala sources
一、问题 scala: No scalac found to compile scala sources 官网 Bug 链接 二、临时解决方案 Incrementality Type 先变成 IDEA 类型 Please go to Settings > Build, Execution, Deployment > Compiler > Scala Compiler and change the Incrementality type to …...
C51--PWN-舵机控制
PWM开发sg90舵机 1、简介 PWM(pulse width modulation)是脉冲宽度调制缩写。 通过对一系列脉冲的宽度进行调制,等效出所需要的波形(包含形状以及幅值)。对模拟信号电平进行数字编码,通过调节占空比的变化来…...
electron27+react18集成搭建跨平台应用|electron窗口多开
基于Electron27集成React18创建一个桌面端exe程序。 electron27-vite4-react18基于electron27结合vite4构建工具快速创建react18跨端应用实践。 版本列表 "vite": "^4.4.5" "react": "^18.2.0" "electron": "^27.0.1&…...
【k8s】kubeadm安装k8s集群
一、环境部署 master192.168.88.10docker、kubeadm、kubelet、kubectl、flannelnode01192.168.88.20docker、kubeadm、kubelet、kubectl、flannelnode02192.168.88.30docker、kubeadm、kubelet、kubectl、flannelhub.lp.com192.168.88.40 docker、docker-compose harbor-offli…...
三、虚拟机的迁移和删除
虚拟机的本质就是文件(放在文件夹的)。因此虚拟机的迁移很方便,可以把安装好的虚拟系统这个文件夹整体拷贝或者剪切到另外的位置使用。删除也很简单,使用vmware进行移除,再点菜单->从磁盘删除即可,或者手动删除虚拟系统对应的文…...
RabbitMQ的交换机(原理及代码实现)
1.交换机类型 Fanout Exchange(扇形)Direct Exchange(直连)opic Exchange(主题)Headers Exchange(头部) 2.Fanout Exchange 2.1 简介 Fanout 扇形的,散开的࿱…...
【C++进阶】pair容器
👦个人主页:Weraphael ✍🏻作者简介:目前学习C和算法 ✈️专栏:C航路 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞…...
Linux--进程等待
1.什么是进程等待 1.通过系统调用wait/waitid,来对子进程进行进行检测和回收的功能。 2.为什么有进程等待 1.对于每个进程来说,如果子进程终止,父进程没有停止,就会形成僵尸进程,导致内存泄露,为了防止僵尸进程的形成…...
VMware CentOS 虚拟机扩容
参考文章: VMware中centos磁盘扩容 - 简书 看这篇文章进行操作!扩展根分区报错,xfs_growfs 提示 / is not a mounted XFS filesystem-CSDN博客 [rootnode001 ~]# df 文件系统 1K-块 已用 可用 已用% 挂载点 /dev/…...
CentOS 编译安装 nginx
CentOS 编译安装 nginx 修改 yum 源地址为 阿里云 curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repoyum makecache升级内核和软件 yum -y update安装常用软件和依赖 yum -y install gcc gcc-c make cmake zlib zlib-devel openss…...
学习笔记-MongoDB(命令增删改查,聚合,权限管理,索引,java使用)
基础概念 1 什么是mogodb? MongoDB 是一个基于分布式文件/文档存储的数据库,由 C 编写,可以为 Web 应用提供可扩展、高性能、易部署的数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库中功…...
第13期 | GPTSecurity周报
GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区,集成了生成预训练 Transformer(GPT)、人工智能生成内容(AIGC)以及大型语言模型(LLM)等安全领域应用的知识。在这里,您可以…...
OpenCV学习(一)——图像读取
1. 图像入门 读取图像显示图像写入图像 import cv2# 读取图像 img cv2.imread(lena.jpg) print(img.shape)# 显示图像 cv2.imshow(image, img) cv2.waitKey(0) cv2.destroyAllWindows()# 写入图像 cv2.imwrite(image.jpg, img)1.1 读取图像 读取图像cv.imread(filename, fl…...
并发编程- 线程池ForkJoinPool工作原理分析(实践)
数据结构加油站: Comparison Sorting Visualization 并发设计模式 单线程归并排序 public class MergeSort {private final int[] arrayToSort; //要排序的数组private final int threshold; //拆分的阈值,低于此阈值就不再进行拆分public MergeSort…...
小程序原生开发中的onLoad和onShow
在小程序的原生开发中,onLoad和onShow是两个常用的生命周期函数,用于管理页面的加载和显示。 onLoad:该函数会在页面加载时触发。当页面第一次加载时,它会被调用一次,之后切换到其他页面再返回时不会再触发。可以在on…...
springcloud技术栈以及相关组件
常用中间件 注册中心—nacos分布式服务之间的交互工具—Feign服务安全入口中间件—Gateway各个服务的异步通信组件—rabbitmqRabbitMq分布式场景的应用配置微服务的容器部署–docker分布式检索引擎—elasticSearches在分布式场景的应用分布式事务协调中间间— seata分布式服务…...
An Early Evaluation of GPT-4V(ision)
本文是LLM系列文章,针对《An Early Evaluation of GPT-4V(ision)》的翻译。 GPT-4V的早期评估 摘要1 引言2 视觉理解3 语言理解4 视觉谜题解决5 对其他模态的理解6 结论 摘要 在本文中,我们评估了GPT-4V的不同能力,包括视觉理解、语言理解、…...
Vue在移动端实现图片的手指缩放
使用V-View点击图片进行预览: npm install v-viewer --save 在main.js进行引入 在图片下方会有 轮播箭头下一张上一张等,因此要用配置来关闭。 import Viewer from v-viewer // viewer.js一种图片预览处理工具 import viewerjs/dist/viewer.css …...
Failed to prepare the device for development
👨🏻💻 热爱摄影的程序员 👨🏻🎨 喜欢编码的设计师 🧕🏻 擅长设计的剪辑师 🧑🏻🏫 一位高冷无情的编码爱好者 大家好,我是 DevO…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
