计算机网络:应用层 - 万维网 HTTP协议

计算机网络:应用层 - 万维网 & HTTP协议

    • 万维网 WWW
      • 统一资源定位符 URL
    • 超文本传输协议 HTTP
      • 非持续连接
      • 持续连接
        • 非流水线
        • 流水线
      • 代理服务器
      • HTTP报文


万维网 WWW

万维网是一个大规模的、联机式的信息储藏所。万维网用链接的方法能非常方便地从互联网上的一个站点访问另一个站点,从而主动地按需获取丰富的信息。

万维网是一个分布式的超媒体系统,它是超文本系统的扩充。超文本是指包含指向其他文档的链接的文本。

利用一个链接可使用户找到远在异地的另一个文档。这些文档可以位于世界上任何一个接在互联网上的超文本系统中。

超文本是万维网的基础。超媒体超文本的区别是文档内容不同。超文本文档仅包含文本信息,而超媒体文档还包含其他表示方式的信息,如图形、图像、声音、动画以及视频图像等

万维网以客户/服务器方式工作。上面所说的浏览器就是在用户主机上的万维网客户程序。万维网文档所驻留的主机则是运行服务器程序,因此这台主机也称为万维网服务器。

客户程序向服务器程序发出请求,服务器程序向客户程序送回客户所要的万维网文档。在一个客户程序主窗口上显示出的万维网文档称为页面。

那么现在有一个问题了,万维网上有那么多文档,如何标识一个确定的唯一的文档呢?

此时就要用到统一资源定位符 URL

统一资源定位符 URL

统一资源定位符URL是用来表示从互联网上得到的资源位置和访问这些资源的方法。

只有知道了这个资源在互联网上的什么地方,才能对它进行操作。互联网上的所有资源,都有一个唯一确定的URL。这里所说的资源是指在互联网上可以被访问的任何对象,包括文件目录、文件、文档、图像、声音等,以及与互联网相连的任何形式的数据。

URL的一般形式由以下四个部分组成:

在这里插入图片描述

  • 协议:指出使用何种协议来获取该万维网文档。现在最常用的协议就是超文本传送协议HTTP,其次是文件传送协议FTP
  • 主机:万维网文档所存放的主机的域名,通常以www开头,但这并不是硬性规定
    主机名用点分十进制的IP地址代替也是可以的
  • 端口:端口号,但经常被省略掉。这是因为这个端口号通常就是协议的默认端口号。但如不使用默认端口号,那么就必须写明现在所使用的端口号
  • 路径:前面的三个部分指明了互联网的具体主机,以及使用的协议,路劲则是在一台主机内部的相对路径

超文本传输协议 HTTP

HTTP定义了浏览器怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器。

HTTP面向事务的应用层协议,它是万维网上能够可靠地交换文件的重要基础。

  • 事务:一系列的信息交换是一个不可分割的整体,要么所有信息都交换完成,要么一次都不进行交换

HTTP不仅传送完成超文本跳转所必需的信息,而且也传送任何可从互联网上得到的信息,如文本、超文本、声音和图像等。

在这里插入图片描述

每个万维网网点都有一个服务器进程,它不断地监听TCP的端口80,以便发现是否有浏览器向它发出连接建立请求。一旦监听到连接建立请求并建立了TCP连接之后,浏览器就向万维网服务器发出浏览某个页面的请求,服务器接着就返回所请求的页面作为响应。服务器在完成任务后,TCP连接就被释放了。

在浏览器和服务器之间的请求和响应的交互,必须按照规定的格式和遵循一定的规则。这些格式和规则,就是超文本传输协议HTTP


非持续连接

HTTP/1.0采用了非持续连接,浏览器获取一个文档的过程如下:

在这里插入图片描述

从浏览器请求一个万维网文档到收到整个文档。HTTP首先要和服务器建立TCP连接。这需要使用三报文握手。当建立 TCP 连接的三报文握手的前两个报文完成后,万维网客户就把HTTP请求报文,作为建立TCP连接的三报文握手中的第三个报文的数据,发送给万维网服务器。服务器收到HTTP请求报文后,就把所请求的文档作为响应报文返回给客户。

整个过程所耗时为:两个往返时间RTT + 传输文档所需时间。也就是说,在HTTP/1.0中最大的缺点就是每次请求一个文档都要两个RTT的开销。

如果一个页面上有很多链接的对象需要依次进行链接,那么每一次链接下载都导致两个RTT的开销。特别是万维网服务器往往要同时服务于大量客户的请求,所以这种非持续连接会使万维网服务器的负担很重。


持续连接

HTTP/1.1开始改用了持续连接的策略,所谓持续连接就是万维网服务器在发送响应后仍然在一段时间内保持这条连接,使同一个客户和该服务器可以继续在这条连接上传送后续的HTTP请求报文和响应报文。这并不局限于传送同一个页面上链接的文档,而是只要这些文档都在同一个服务器上就行。

持续连接有两种工作方式:非流水线方式流水线方式

非流水线

非流水线方式的特点,是客户在收到前一个响应后才能发出下一个请求

如图所示:

在这里插入图片描述

TCP连接已建立后,客户每访问一次对象都要用去一个往返时间RTT。这比非持续连接节省了建立TCP连接所需的一个RTT时间。

流水线

流水线方式的特点,是客户在收到HTTP的响应报文之前就能够接着发送新的请求报文

如图所示:

在这里插入图片描述

一个接一个的请求报文到达服务器后,服务器就可连续发回响应报文。因此,使用流水线方式时,客户访问所有的对象一起只需花费一个RTT时间以及这些文件的传输时间。流水线工作方式使TCP连接中的空闲时间减少,提高了下载文档效率。


代理服务器

代理服务器是一种网络实体,它又称为万维网高速缓存。

代理服务器把最近的一些请求和响应暂存在本地磁盘中。当新请求到达时,若代理服务器发现这个请求与暂时存放的请求相同,就返回暂存的响应,而不需要按URL的地址再次去互联网访问该资源

如图所示是一个校园网:

在这里插入图片描述

校园网内多台主机通过浏览器访问互联网的网页,那么R1 - R2这条链路就会非常拥堵。

但是此时若增加一个代理服务器

在这里插入图片描述

此时所有浏览器访问网页前,都要先通过代理服务器,如果代理服务器内有这个链接对应的数据,就直接返回。如果没有再去互联网访问,当代理服务器访问互联网拿到链接对应的资源后,自己先缓存一份,然后交给客户浏览器。后续别的浏览器再来访问同一个链接,代理服务器就可以直接返回这个内容了。


HTTP报文

HTTP有两类报文:HTTP请求报文HTTP响应报文

两类报文格式如下:

在这里插入图片描述

HTTP报文是面向文本的,HTTP报文中,每个字段不是简单的数据,而是一些ACSII码字符串,各个字段的长度都是不确定的

HTTP请求报文和响应报文都是由三个部分组成的。这两种报文格式的区别就是开始行不同。

各个区域含义如下:

  • 开始行:用于区分是请求报文还是响应报文。在请求报文中的开始行叫作请求行,而在响应报文中的开始行叫作状态行。在开始行的三个字段之间都以空格分隔开,最后的CRLF分别代表回车换行(它们也是ASCII码)。
  • 首部行:用来说明浏览器、服务器或报文主体的一些信息。首部可以有好几行,但也可以不使用。在每一个首部行中都有首部字段名和它的值,每一行在结束的地方都要有回车换行整个首部行结束时,还有一空行将首部行和后面的实体主体分开
  • 实体主体:在请求报文中一般都不用这个字段,而在响应报文中也可能没有这个字段。

下面先介绍 HTTP请求报文的一些主要特点。

格式如下:

在这里插入图片描述

请求报文的请求行只有三个内容:方法URLHTTP版本,后两者都非常好理解,我着重讲讲方法

  • 方法:对所请求对象所做的一些操作,本质上就是一些命令。

常见的方法如下:

方法含义
OPTION请求一些选项信息
GET (有一个空格)请求读取URL所标志的信息
HEAD请求读取URL所标志的信息的首部
POST给服务器添加信息
PUT在指明的URL下存储一个文档
DELETE删除指明的URL所标志的资源
TRACE用来进行环回测试的请求报文
CONNECT用于代理服务器

再看看HTTP响应报文的特点:

在这里插入图片描述

响应报文的状态行包括:版本状态码短语三部分。

短语用于简单解释状态码,状态码被分为五大类:

状态码含义
1xx表示通知信息,如请求收到了或正在进行处理
2xx表示成功,如接受或知道了
3xx表示重定向,如要完成请求还必须采取进一步的行动
4xx表示客户的差错,如请求中有错误的语法或不能完成
5xx表示服务器的差错,如服务器失效无法完成请求

比如最经典的404 Not Found,就属于4xx


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

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

相关文章

通信系统网络架构_4.存储网络架构

1.计算机访问磁盘存储有3种方式 一般来说,计算机访问磁盘存储有3种方式: (1)直连式存储(Direct Attached Storage,DAS):计算机通过I/O端口直接访问存储设备的方式。 (…

路由

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 客户端(例如浏览器)把请求发送给 Web 服务器,Web 服务器再把请求发送给 Flask程序实例。程序实例需要知道对每个U…

Kafka 最佳实践:构建高性能、可靠的数据管道

目录 1. 部署最佳实践 1.1 硬件配置 1.2 集群配置 1.3 ZooKeeper 配置 2. 主题和分区设计 2.1 分区设计 2.2 数据保留策略 3. 生产者最佳实践 3.1 生产确认机制 3.2 重试机制 3.3 批量发送 4. 消费者最佳实践 4.1 消费组管理 4.2 并行处理 4.3 错误处理 5. 安全…

昇思25天学习打卡营第5天|网络构建

一、简介: 神经网络模型是由神经网络层和Tensor操作构成的,mindspore.nn提供了常见神经网络层的实现,在MindSpore中,Cell类是构建所有网络的基类(这个类和pytorch中的modul类是一样的作用),也是…

std::bind与std::ref配合使用时要注意的几个问题

目录 1 假如输入函数的变量是左值非常量引用,则该变量在std::bind中只能用std::ref修饰,不能用cref,否则编译失败: 2 假如输入函数的变量是左值常量引用,则该变量在std::bind中既可以用std::ref修饰,也可…

Mathtype7在Word2016中闪退(安装过6)

安装教程:https://blog.csdn.net/Little_pudding10/article/details/135465291 Mathtype7在Word2016中闪退是因为安装过Mathtype6,MathPage.wll和MathType Comm***.dotm),不会随着Mathtype的删除自动删除,而新版的Mathtype中的文件…

Inpaint软件最新版下载【安装详细图文教程】

​根据使用者情况表明在今天的数字时代,我们经常会遇到需要处理图形的情况,然而,当我们遇到水印在图形上,我们就需要寻找一个有效的方式来去除它,Inpaint软件就是一个非常实用的工具,它能够帮助我们去除水印…

小柴带你学AutoSar系列一、基础知识篇(6)车规级MCU入门RH850

flechazohttps://www.zhihu.com/people/jiu_sheng 小柴带你学AutoSar总目录https://blog.csdn.net/qiansh

自动化开发任务:在PHP框架中实现自定义命令

在现代Web开发中,自动化是提高开发效率和减少重复工作的关键。PHP框架,如Laravel、Symfony等,提供了强大的自定义命令功能,允许开发者创建自己的artisan命令来执行各种自动化任务。本文将详细介绍如何在PHP框架中实现自定义命令&a…

【web2】jquary,bootstrap,vue

文章目录 1.jquary:选择器1.1 jquery框架引入:$("mydiv") 当成id选择器1.2 jquery版本/对象:$(js对象) -> jquery对象1.3 jquery的页面加载事件:$ 想象成 window.onload 1.4 jquery的基本选择器:$()里内容…

GIM: Learning Generalizable Image Matcher From Internet Videos

【引用格式】:Shen X, Yin W, Mller M, et al. GIM: Learning Generalizable Image Matcher From Internet Videos[C]//The Twelfth International Conference on Learning Representations. 2023. 【网址】:https://arxiv.org/pdf/2402.11095 【开源代…

Linux_软硬链接

目录 1、软链接 2、软链接的使用方式 3、软链接的删除 4、硬链接 5、硬链接的使用方式 6、软硬链接的使用场景 7、软硬链接的区别 结语 前言: 在Linux操作系统中,有软链接和硬链接,他们是一种特殊的文件引用,主要用于与…

mysql索引以及优化

索引的作用 在数据库表中对字段建立索引可以大大提高查询速度 mysql索引类型 普通索引唯一索引: 唯一索引列的值必须唯一允许有空值,如果是组合索引,则列值的组合必须唯一create unique index indexName on mytable(username(length))修改表结…

Cyber Weekly #12

赛博新闻 1、Anthropic发布Claude 3.5 Sonnet 本周五(6月21日)凌晨,Anthropic宣布推出其最新的语言模型Claude 3.5 Sonnet,距离上次发布Claude3才过去3个月。Claude3.5拥有20万token的长上下文窗口,目前已经在Claude…

python中mp4转mp3

python中mp4转mp3,直接上代码 from moviepy.editor import VideoFileClipdef video_to_audio(video_path, audio_path):video_clip VideoFileClip(video_path)audio video_clip.audioaudio.write_audiofile(audio_path)video_path 1.mp4 # 视频文件路径 audio_…

HCIA 19 结束 企业总部-分支综合实验(下)

3.6出口NAT配置可以访问互联网 配置NAT使内网可以访问公网8.8.8.8,当前总部PC1 PING不通公网地址8.8.8.8。 3.6.1总部配置NAT访问互联网 步骤1:配置NAT acl number 2000 rule 5 permit source 192.168.0.0 0.0.255.255 # interface GigabitEthern…

Redis预备知识

一.预备知识 1.基本全局命令 set key value 将key的值设置成value get key 得到key的值 keys [pattern] 查看匹配pattern的所有key 比如h?llo匹配hallo,hbllo,hcllo……只要用一个符号将?代替即可 比如h*llo匹配hllo,heeeello…

【图像识别系统】昆虫识别Python+卷积神经网络算法+人工智能+深度学习+机器学习+TensorFlow+ResNet50

一、介绍 昆虫识别系统,使用Python作为主要开发语言。通过TensorFlow搭建ResNet50卷积神经网络算法(CNN)模型。通过对10种常见的昆虫图片数据集(‘蜜蜂’, ‘甲虫’, ‘蝴蝶’, ‘蝉’, ‘蜻蜓’, ‘蚱蜢’, ‘蛾’, ‘蝎子’, ‘…

ansible setup模块

用于收集有关目标主机的系统和网络信息,并将这些信息存储为一个facts变量,可以在Playbook的后续任务中使用。setup模块可以用来获取主机的操作系统、软件包、IP地址、内存、磁盘和其他硬件信息。这些信息对编写Playbook和进行条件判断非常有用。当你在Pl…

【Academy】 NoSQL injection NoSQL注入

NoSQL注入 NoSQL injection 概述1.NoSQL数据库2.NoSQL注入的类型3.NoSQL语法注入3.1在MongoDB中检测语法注入3.1.1确定要处理的字符3.1.2确认条件行为3.1.3覆盖现有条件 4.NoSQL操作…