计算机网络第2章-HTTP和Web协议(2)

Web和HTTP

一个新型应用即万维网(World Wide Web)Web。

HTTP概况

Web的应用层协议是超文本传输协议(HTTP),它是Web的核心

HTTP由两个程序实现:一个用户程序和一个服务器程序。

Web页面(Web Page)(也叫文档)是由对象组成的。

一个对象只是一个文件,诸如一个HTML文件、一个JPG图形等等。

并且它们可以通过一个URL地址寻址。

多数Web页面含有一个HTML基本文件以及几个引用对象。

每个URL地址由两部分组成:存放对象的服务器主机名和对象的路径名。

例如,URL地址:http://www.someSchool.edu/someDepartment/picture.gif,其中的www.someSchool.edu就是主机名,/somDepartment/picture.gif就是路径名。

因为Web浏览器实现了HTTP的客户端,Web服务器实现了HTTP的服务器端,用于存储Web对象。

HTTP定义了Web客户向Web服务器请求Web页面的方式,以及服务器向客户发送Web页面的方式。

HTTP使用TCP作为它的支撑运输协议(而不是在UDP上运行)。

客户端的套接字接口是客户进程与TCP连接之间的门,在服务器端的套接字接口则是服务器进程与TCP连接之间的门。

客户向它的套接字接口发送HTTP请求报文并从套接字接口接受HTTP响应报文。

服务器也同理。

因此HTTP协议不用担心数据丢失,也不关注TCP从网络的数据丢失和乱序故障中恢复的细节,那是TCP的工作。

HTTP也是一个无状态协议,因为HTTP服务器并不保存关于客户的任何信息,因此某个客户短短几秒内两次请求同一个对象,服务器不会因为刚刚为客户端提供了一次对象就不做出反应了,而是重新发送对象。

非持续连接和持续连接

持续连接所有的请求/响应对是经过一个相同的、单独的TCP连接发送。

非持续连接每个请求/响应对分别有一个不同于其它的、单独的TCP连接发送,并且在完成一次请求/响应后,会关闭该TCP连接。

HTTP默认方式下使用持续连接,但是也可以配置成为非持续连接。

采用非持续链接的HTTP

1.HTTP客户进程在端口号80发起一个到服务器www.someSchool.edu的TCP连接。

该端口号是HTTP的默认端口。

2.HTTP客户经它的套接字向该服务器发送一个HTTP请求报文。(报文中包含了路径名/someDepartment/home.index)

3.HTTP服务器进程经它的套接字接受请求报文,并从存储器(RAM或磁盘)中检索出对象(home.index),随后在一个HTTP响应报文中封装对象,并通过其套接字向客户端发送响应报文。

4.HTTP服务器进程通知TCP断开该TCP连接,但是实际到客户端接收到响应报文后,该TCP连接才会关闭。

5.HTTP客户接受响应报文,TCP连接关闭。

6.对每个引用的JPEG图形对象重复前四个步骤。

往返时间的定义(RTT):

该时间是指一个短分组从客户端到服务器端再到客户端的时间。

RTT包括:分组传播时延、分组在中间路由器和交换机上的排队时延、处理时延。

采用持续连接的HTTP

在持续连接下,服务器在发送响应报文后保持TCP连接的打开。

在后续相同的客户与服务器之间,后续的请求和响应报文可以继续在该TCP连接中进行。

如果一条连接经过一定时间间隔仍未被使用,HTTP服务器会被关闭该TCP连接。

HTTP报文格式

HTTP报文有两种:

请求报文响应报文

HTTP请求报文

HTTP请求报文的第一行叫请求行,其后继的所有行都被称为首部行。

请求行有三个字段:方法字段、URL字段、HTTP协议版本字段。

方法字段可以取不同的值,包括GET、POST、HEAD、PUT、DELETE

绝大部分的HTTP请求报文使用GET方法。

意思是请求一个对象。

下面是一个请求报文的通用格式:

此处的实体体(entity body)在POST方法时会用到该实体,在GET中用不到。

当用户提交表单时,HTTP客户常常使用POST方法

当然,用户提交表单的时候也可以不用POST方法,转用GET方法,此时的表单字段中所请求的URL中包括了输入的数据。

例如:一个表单使用GET方法,它有两个字段:“monkeys”和“bananas”这样,该URL结构为:

www.somsites.com/animalsearch? monkey&bananas

HEAD方法类似于GET方法,使用HEAD方法,服务器仅仅返回一个HTTP报文进行响应,并不返回请求对象,因此常常被程序开发者用来测试跟踪。

PUT方法常常与Web发行工具联合使用,它允许用户上传对象到指定的Web服务器上的指定目录。

DELETE方法允许用户删除Web服务器指定对象。

HTTP响应报文

下面是一个典型的HTTP响应报文。

它包含了三个部分:

初始状态行、首部行、实体体。

实体体在响应报文中是主要组成部分,即它包含了所请求的对象本身。

Connetction : clost代表发送报文后将关闭TCP连接。

下面是一个HTTP响应报文的通用格式。

下面是常见的状态码和短语。

用户与服务器的交互:cookie

cookie用来让web服务器识别到用户身份。

cookie技术有四个组件:

1.在HTTP响应报文中的一个cookie首部行。

2.在HTTP请求报文中的一个cookie首部行。

3.在用户端系统中保留一个cookie文件,由浏览器管理。

4.位于Web站点的一个后端数据库中。

下图是一个cookie工作过程。

Web缓存

Web缓存器也叫代理服务器。

Web缓存器有自己的磁盘存储空间。

在请求对象经过Web缓存器一般是以下情况:

1.浏览器创建一个到Web缓存器的TCP连接,并且向该Web缓存器发送一个HTTP请求。

2.Web缓存器进行检查,如果有浏览器所请求的对象,那么直接返回,否则Web缓存器建立一个到Web服务器的TCP连接,并且向Web服务器发送一个HTTP请求。

3.Web服务器接收到HTTP请求,向Web缓存器发送响应报文,并且关闭TCP连接。

4.Web缓存器接收到响应报文,并把其中的对象保存到本地磁盘中,随后将对象发送给浏览器,并且关闭TCP连接。

值得注意的是,Web缓存器既是客户又是服务器。

下面我们通过一个例子来加深对于Web缓存器设立的必要性,以及好处

我们假设对象的平均长度为1Mb,浏览器每秒发送15个请求,在因特哇那个接入链路一侧的路由器转发HTTP请求报文开始,到它接收响应报文我们硬性规定为2s。

此时局域网上的流量强度为:

接入链路上的流量强度为:

流量强度接近1,链路上的时延就会变得非常大并且无穷大的增长。

为此有两个解决方法:

1.更换更快的接入链路,但是成本非常昂贵。

2.使用Web缓存器,我们下面讨论使用Web缓存器。

假设缓存器满足请求的比率为0.4。

则40%的请求会立即被缓存器返回,只剩下60%的请求会经过15Mbps接入链路。

流量强度为:

1 × 0.6 = 0.6

则平均时延为:

约等于1.2秒。

可以看到使用缓存器的时延大大降低,并且成本相较于换链路非常低!

条件GET方法

存放在缓存器中的对象副本可能是陈旧,为此HTTP有一种机制,允许缓存器证实它的对象是最新的。

这种机制就是条件GET方法。

下面是一个简单的请求报文:

这是一个返回的响应报文:

此时条件方法报文:

If-modified-since用来确定在Web缓存器修改对象的最后时间是否与Web服务器修改对象的最后时间是否一致,如果一致则Web缓存器直接返回对象。否则,Web缓存器先从Web服务器接收最新的对象,再返回给Web浏览器。

因特网中的电子邮件

因特网电子邮件系统主要有三个组成部分:

用户代理、邮件服务器、简单邮件传输协议(SMTP)

SMTP协议

SMTP是电子邮件在应用层的协议,它依靠于TCP进行传输。

因此可以说:

SMTP一般不使用中间邮件服务器发送邮件,即使这两个邮件服务器位于地球的两端也是这样。

TCP连接可以是跨越很大的地理位置,并且建立TCP连接。

特别,如果Bob的邮件服务器没有开机,该报文会保留在Alice的邮件服务器上等待并进行新的尝试,这意味着邮件并不在中间的某个邮件服务器存留。

与HTTP的对比

HTTP主要是一个拉协议(pull protocol)

即主要是从服务器拉取信息

SMTP主要是一个推协议(push protocol)

即主要是向服务器推送信息

邮件访问协议

SMTP并不能使Bob从邮件服务器中拉取信息,因为SMTP是一个推协议。

因此人们发明了邮件访问协议,目前比较流行的访问协议:

1.第三版的邮局协议(POP3)

2.因特网的邮件访问协议(IMAP)

3.HTTP

POP3

POP3是一个极为简单的邮件访问协议,功能相当有限。

主要有三个阶段进行工作:

特许、事务处理以及更新

IMAP

基于Web的电子邮件

在这种服务中,用户代理就是普通的浏览器,用户和他远程邮箱之间的通信则通过HTTP进行。

当发件人(Alice)要发送一封电子邮件报文时,该电子邮件报文从Alice的浏览器发送到她的邮件服务器,使用的是HTTP而不是SMTP。

然后Alice的邮件服务器在与其他的邮件服务器之间发送和接收时,仍然使用的是SMTP。

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

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

相关文章

VSCode 调试 u-boot

文章目录 VSCode 调试 u-boot调试配置启动 u-boot 脚本调试界面重定向之后继续调试参考 VSCode 调试 u-boot 调试配置 参考 qemu基础篇——VSCode 配置 GDB 调试 要想调试 u-boot 只需要再添加一个 u-boot 的配置即可 {"version": "0.2.0","conf…

如果你有一次自驾游的机会,你会如何准备?

常常想来一次说走就走的自驾游,但是光是想想就觉得麻烦的事情好多:漫长的公路缺少娱乐方式、偏僻拗口的景点地名难以导航、不熟悉的城市和道路容易违章…… 也因为如此,让我发现了HUAWEI HiCar这个驾驶人的宝藏! 用HUAWEI HiCar…

科研上新 | 第2期:可驱动3D肖像生成;阅读文本密集图像的大模型;文本控制音色;基于大模型的推荐智能体

编者按:欢迎阅读“科研上新”栏目!“科研上新”汇聚了微软亚洲研究院最新的创新成果与科研动态。在这里,你可以快速浏览研究院的亮点资讯,保持对前沿领域的敏锐嗅觉,同时也能找到先进实用的开源工具。 本期内容速览 …

16 个 Linux 最佳 Markdown 编辑器(2)

对于初学者来说,Markdown 是一个用 Perl 编写的简单且轻量级的工具,它使用户能够编写纯文本格式并将其转换为有效的 HTML(或 XHTML)。它是一种易于阅读、易于编写的纯文本语言,也是一种用于文本到 HTML 转换的软件工具…

操作系统四大特征

OS四大特征 1.OS的并发性(同一时间间隔内执行和调度多个程序的能力) 宏观上,处理机同时执行多道程序 微观上,处理机在多道程序间高速切换(分时交替执行),微观上并非是同时执行的。 关注单个处理机同一时间段内处理任…

IOS课程笔记[4-5] 计算器实现与更换主题 的使用

计算 控件介绍 文本输入 设置键盘格式为NumberPad字符串与数字转换方法 NSInteger num2 [str2 integerValue]; 弹窗控件 UIAlertController 新版本弹窗 UIAlertController *alert [UIAlertController alertControllerWithTitle:"error" message:"输入有…

数据结构-----红黑树的插入

目录 前言 红黑树的储存结构 一、节点旋转操作 左旋(Left Rotation) 右旋(Right Rotation) 二、插入节点 1.插入的是空树 2.插入节点的key重新重复 3.插入节点的父节点是黑色 4.插入节点的父节点是红色 4.1父节点是祖父…

软考-网络安全体系与网络安全模型

本文为作者学习文章,按作者习惯写成,如有错误或需要追加内容请留言(不喜勿喷) 本文为追加文章,后期慢慢追加 by 2023年10月 网络安全体系相关安全模型 BLP机密性模型 BLP(Biba-格雷泽-麦克拉伦&#x…

嵌入式平台的电源总结

本文引注: https://mp.weixin.qq.com/s/PuSxHDFbJjjHEReukLSvyg 1.AC的定义 Alternating Current(交流)的首字母缩写。AC是大小和极性(方向)随时间呈周期性变化的电流。电流极性在1秒内的变化次数被称为频率,以Hz为单位…

Sql Server 数据库中的所有已定义的唯一约束 (列名称 合并过了)

查询Sql Server Database中的唯一约束 with UniqueBasic as (SELECTtab.name AS TableName, -- 表名称idx.name AS UniqueName, -- 唯一约束的名称col.name AS UniqueFieldName -- 唯一约束的表字段FROMsys.indexes idxJOIN sys.index_columns idxColON (idx.object_id idxCo…

【分享Python代码】图片转化为素描画

哈喽,大家好,我是木易巷~ 代码生成效果图 原图: 生成图: 原图: 生成图: 准备工作 Python编程首先需要安装环境,下面是详细步骤: 会的小伙伴可自行跳过,代码在最后 1…

spring boot RabbitMq基础教程

RabbitMq 由于RabbitMQ采用了AMQP协议,因此它具备跨语言的特性。任何语言只要遵循AMQP协议收发消息,都可以与RabbitMQ交互。并且RabbitMQ官方也提供了各种不同语言的客户端。 但是,RabbitMQ官方提供的Java客户端编码相对复杂,一般…

idea使用Spring Initializer创建springboot项目的坑【保姆级教学】

项目场景: 提示:这里先简述项目创建后遇到的问题和解决方案: idea 使用 Spring Initializer 创建springboot项目后, 有以下问题: ① 右键没有Run ② 右键New新建文件发现无Java Class选项 然后解决掉 ①② 问题后出…

总结:JavaEE的Servlet中HttpServletRequest请求对象调用各种API方法结果示例

总结:JavaEE的Servlet中HttpServletRequest请求对象调用各种API方法结果示例 一方法调用顺序是按照英文字母顺序从A-Z二该示例可以用作servlet中request的API参考,从而知道该如何获取哪些路径参数等等三Servlet的API版本5.0.0、JSP的API版本:…

WordPress 常规设置页面调用媒体中心上传图片插入URL(新版可用)

首先,我们需要在主题或插件文件夹中创建一个 JavaScript 文件(如:media-uploader.js),该文件中包含如下代码。 /*** 媒体中心上传 js **/ jQuery(document).ready(function($){var mediaUploader;$(#upload_image_but…

软件工程与计算总结(十七)软件构造

一.概述 1.定义 软件构造是以编程为主的活动,类似于软件实现。但软件构造又不止编程这么简单,除了核心的编程任务之外,还设计详细设计(数据结构与算法设计)、单元测试、集成与集成测试以及其他活动~ 2.软件构造是设计…

多维时序 | MATLAB实现SSA-CNN-LSTM-Attention多变量时间序列预测(SE注意力机制)

多维时序 | MATLAB实现SSA-CNN-LSTM-Attention多变量时间序列预测(SE注意力机制) 目录 多维时序 | MATLAB实现SSA-CNN-LSTM-Attention多变量时间序列预测(SE注意力机制)预测效果基本描述模型描述程序设计参考资料 预测效果 基本描…

【vim 学习系列文章 10 -- vim 将代码中空格高亮显示方法】

文章目录 vim 高亮空格使用背景如何配置vim 可以自动显示空格呢?vim highlight 命令使用介绍vim 空白行的处理vim match 命令详细介绍 vim 高亮空格使用背景 开发人员在编写代码之后,在review通过之后会将代码推到服务器然后merge,但是有些代…

uni-app--》基于小程序开发的电商平台项目实战(五)

🏍️作者简介:大家好,我是亦世凡华、渴望知识储备自己的一名在校大学生 🛵个人主页:亦世凡华、 🛺系列专栏:uni-app 🚲座右铭:人生亦可燃烧,亦可腐败&#xf…

【C语言进阶】自定义类型:结构体,枚举,联合

自定义类型:结构体,枚举,联合 1.结构体1.1结构体类的基础知识1.2结构的声明1.3特殊的声明1.4结构的自引用1.5结构体变量的定义和初始化1.6结构体内存对齐1.7修改默认对齐1.8结构体传参 2.段位2.1什么是段位2.2段位的内存分配2.3位段的跨平台问…