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

【计算机网络笔记】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 扇形的,散开的&#xff1…...

【C++进阶】pair容器

👦个人主页:Weraphael ✍🏻作者简介:目前学习C和算法 ✈️专栏:C航路 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞&#x1…...

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…...

PPT文档图片设计素材资源下载站模板源码/织梦内核(带用户中心+VIP充值系统+安装教程)

源码简介: PPT文档图片设计素材资源下载站模板源码,作为织梦内核素材资源下载站源码,它自带了用户中心和VIP充值系统,也有安装教程。 织梦最新内核开发的模板,该模板属于素材下载、文档下载、图库下载、PPT下载、办公…...

万能鼠标设置 SteerMouse v5.6.8

鼠标可谓是用户们在使用电脑时候的必备外接设备呢!适合你自己的鼠标设置也绝对能够优化你的Mac使用体验!想要更好的Mac体验就试试用Steermouse Mac版吧。它通过软件来自由设置你的鼠标操作!在这款万能鼠标设置工具中,用户可以在偏…...

16 用于NOMA IoT网络上行链路安全速率最大化的HAP和UAV协作框架

文章目录 摘要相关模型仿真实验仿真结果 摘要 优化无人机到HAP的信道分配、用户功率和无人机三维位置来研究上行安全传输解决非凸问题,采用K-means聚类算法,将成对的用户划分成不同的组,每个簇可以有相应的无人机服务,然后将构造…...

【C++】STL容器——vector类的使用指南(含代码演示)(11)

前言 大家好吖,欢迎来到 YY 滴C系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! 目录 一、vector类——基本介绍二、vector类…...

elementui 修改 el_table 表格颜色,表格下方多了一条线问题

解决: 加入以下代码 .el-table::before { z-index: inherit; } 如果使用了scoped,需要加上stylus /deep/ (其他的css语言有不一样的写法) 或是全局加入 body .el-table::before { z-index: inherit; } 其他背景色,表格边框颜色修改 //表头/de…...

阿里云/腾讯云国际站代理:阿里云服务器介绍

阿里云是由阿里巴巴集团旗下的云计算服务提供商。阿里云提供的服务包括云服务器、数据库服务、数据分析、人工智能、大数据、物联网等多种云计算产品和解决方案。阿里云的数据中心遍布全球多个地区,提供可靠且安全的云计算基础设施和服务。阿里云在中国以及全球范围…...

Go学习第十章——文件操作,Json和测试

Go文件操作,Json和测试 1 文件1.1 基本介绍1.2 读取的基本操作1.3 写入的基本操作1.4 使用案例(三个) 2 Go语言的Json使用2.1 序列化案例2.2 反序列化案例 3 单元测试3.1 先看个需求3.2 快速入门3.3 入门总结 1 文件 1.1 基本介绍 文件在程序中是以流的形式来操作…...

学习不同概率分布(二项分布、泊松分布等)概念及基础语法

概率分布是描述随机变量取值的概率情况的函数。常见的概率分布包括二项分布、泊松分布等。 二项分布(Binomial Distribution):描述了一次试验中成功事件发生的次数的概率分布。它的基础语法如下: 概率质量函数:pmf(k, …...

在3台不联网的 CentOS 7.8 服务器上部署 Elasticsearch 6.8 集群

为了在3台不联网的 CentOS 7.8 服务器上部署 Elasticsearch 6.8.23 集群,并考虑到path.data和path.logs的配置,我们可以按照以下步骤进行操作: 1. 准备工作 1.1 从有网络的机器下载 Elasticsearch 6.8.23 的 RPM 包: https://w…...

CentOS 7

导入已有虚拟机 设置SSH免密登录 参考Ubuntu- 远程连接虚拟机(桥连接) 宿主机:Win10虚拟机:VMware保证宿主机和主机在同一个网段下(宿主机和主机通过手机热点连接,在特定网段内,不能更改&#…...