【计算机网络笔记】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…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
