应用层———Web和HTTP(2)

本文概述了HTTP协议的核心概念,包括非持续连接与持续连接的区别,详细介绍了HTTP报文格式,重点讲解了用户与服务器交互中的Cookie技术,以及Web缓存如何通过条件GET优化性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、HTTP 概况

1 .Web的应用层协议是超文本传输协议(HyperText Transfer Protocol, HTTP),它是Web的核心。
2. Web页面(Webpage)(也叫文档)是由对象组成的。一个对象(object)只是一个文件,诸如一个HTML文件、一个JPEG图形

3 .多数Web页面含有一个HTML基本文件(base HTML
file)以及几个引用对象。例如,如果一个Web页面包含HTML文本和5个JPEG图形,那
么这个Web页面有6个对象

Web 浏览器(Web browser)实现 了 HTTP 的客户端
Web服务器(Webserver)实现了 HTTP的服务器端,它用于存储Web对象,每个对象由URL寻址

二、HTTP请求与响应

在这里插入图片描述
HTTP使用TCP作为它的支撑运输协议(而不是在UDP上运行)。

1.HTTP客户首先发起一个与服务器的TCP连接。
2.一旦连接建立,该浏览器和服务器进程就可以通过套接字接口访问TCP
3.客户向它的套接字接口发送HTTP请求报文并从它的套接字接口接收HTTP响应报文。
4.类似地,服务器从它的套接字
接口接收HTTP请求报文和向它的套接字接口发送HTTP响应报文。一旦客户向它的套接
字接口发送了一个请求报文,该报文就脱离了客户控制并进入TCP的控制
5.
因为HTTP服务器并不保存关于客户的任何信息,所以我们说HTTP是一个无状态协议(stateless protocol)。

三、非持续连接和持续连接

非持续连接:
每个请求/响应对是经一个单独的TCP连接发送
用持续连接:
所有的请求及其响应经相同的TCP连接发送呢

1.采用非持续连接的http

假设页面含有一个HTML基本文件和10个JPEG图形,并且这11个对象位于同一台服务器上。进
一步假设该 HTML 文件的 URL 为:http :〃www. someSchool. edu/someDepartment/home, indexo

1) HTTP客户进程在端口号80发起一个到服务器www. someSchool. edu的TCP连接,
该端口号是HTTP的默认端口。在客户和服务器上分别有一个套接字与该连接相关联。
2) HTTP客户经它的套接字向该服务器发送一个HTTP请求报文。请求报文中包含了
路径名/someDepartment/home. index (后面我们会详细讨论HTTP报文)。 -
3) HTTP服务器进程经它的套接字接收该请求报文,从其存储器(RAM或磁盘)中
检索出对象 www. someSchool. edu/someDepartment/home. index,在一个 HTTP 响应报文中封
装对象,并通过其套接字向客户发送响应报文。
4) HTTP服务器进程通知TCP断开该TCP连接。(但是直到TCP确认客户已经完整
地收到响应报文为止,它才会实际中断连接。)
5) HTTP客户接收响应报文,TCP连接关闭。该报文指岀封装的对象是一个HTML文
件,客户从响应报文中提取出该文件,检査该HTML文件,得到对10个JPEG图形的引用。
'
6) 对每个引用的JPEG图形对象重复前4个步骤。

在本例中,当用户请求该Web页面时,要产生11个TCP连接。
非持续连接有一些缺点。第一,必须为每一个请求的对象建立和维护一个全新的连
接。对于每个这样的连接,在客户和服务器中都要分配TCP的缓冲区和保持TCP变量,
这给Web服务器带来了严重的负担,因为一台Web服务器可能同时服务于数以百计不同
的客户的请求

2.采用持续连接的HTTP

在采用HTTP 1.1持续连接的情况下,服务器在发送响应后保持该TCP连接打开。在
相同的客户与服务器之间,后续的请求和响应报文能够通过相同的连接进行传送。特别
是,一个完整的Web页面(上例中的HTML基本文件加上10个图形)可以用单个持续
TCP连接进行传送

四、HTTP报文格式

1.HTTP请求格式

在这里插入图片描述
1.HTTP请求报文的第一行叫作请求行(request line)

请求行有3个字段:方法字段、URL字段和HTTP版本字段。方法字段可以取几种不同的值,
包括GET、POST、HEAD、PUT和DELETEO绝大部分的HTTP请求报文使用GET方法。
2.其后继的行叫作首部行(headerline)

首部行Host: www. someschool. edu指明了对象所在的主
你也许认为该首部行是不必要的,因为在该主机中已经有一条TCP连接存在了。,该首部行提供的信息是Web代理高速缓存所要求的。通过包含

Connection: close首部行,该浏览器告诉服务器不要麻烦地使用持续连接,它要求
服务器在发送完被请求的对象后就关闭这条连接

User-agent:首部行用来指明用户代理,
即向服务器发送请求的浏览器的类型。这里浏览器类型是Mozilla/5.0,即Firefox浏览器。

Accept-language:首部行表示用户想
得到该对象的法语版本

2.HTTP请求通用格式

在这里插入图片描述

3. HTTP响应报文

在这里插入图片描述
在这里插入图片描述
它有三个部分:一个初始状态行(status line) , 6个
首部行(headerline),然后是实体体(entity body).

1.状态行有3个字段:协议版本字段、状态码和相应状态信息。
在这个例子中,状态行指示服务器正在使用HTTP/1.1,并且一切正常(即服务器已经找到并正在发送所请求的对象)

2.实体体部分
是报文的主要部分,即它包含了所请求的对象本身(表示为data data data data data -)0

1.首部行。
Connection: close首部行告诉客户,发送完报文后将关闭该TCP连接。

Date:首部行指示服务器产生并发送该响应报文的日期和时间。值得一提的是,这个时间不是指对象创建或者最后修改的时间,而是服务器从它的文件系统中检索到该对象,将该对象插入响应报文,并发送该响应报文的时间。

Server:首部行指示该报文是由一台Apache Web服务器产生的,它类似于HTTP请求报文中的User-agent:首
部行。
Last-Modified:首部行指示了对象创建或者最后修改的日期和时间。Last- Modified:首部行对既可能在本地客户也可能在网络缓存服务器上的对象缓存来说非常重要。我们将很快详细地讨论缓存服务器(也叫代理服务器)。

Content-Length: 首部行指示了被发送对象中的字节数。

Content-Type:首部行指示了实体体中的对象是HTML文本。(该对象类型应该正式地由Content-Type:首部行而不是用文件扩展名来指示。)

五、用户与服务器交互:Cookie

我们前面提到了 HTTP服务器是无状态的。
然而一个Web站点通常希望能够识别用户,可能是因为服务器希望限制用户的访问,或者因为它希望把内容与用户身份联系起来。

cookie技术有4个组件

①在HTTP响应报文中的一个cookie首部行;
②在HTTP请求报文中的一个cookie首部行;
③在用户端系统中保留有一个cookie文件,并由用户的浏览器进行管理;
④位于Web站点的一个后端数据库

在这里插入图片描述
假设Susan总是从家中PC使用Internet,她首次与Amazon, com联系。

1.我们假定过去她已经访问过eBay站点。当请求报文到达该Amazon Web服务器时,该Web站点将产生一个唯一识别码,并以此作为索引在它的后端数据库中产生一个表项。接下来Amazon Web服务器用一个包含
Set-cookie:首部的HTTP响应报文对Susan的浏览器进行响应,其中Set-cookie:首部含有该识别码。该首部行可能是
Set-cookie: 1678

当Susan的浏览器收到了该HTTP响应报文时,它会看到该Set-cookie:首部。该浏览
器在它管理的特定cookie文件中添加一行,该行包含服务器的主机名和在Set-cookie:首部
中的识别码。值得注意的是该cookie文件已经有了用于eBay的表项,因为Susan过去访问过该站点。

当Susan继续浏览Amazon网站时,每请求一个Web页面,其浏览器就会查询该cookie文件并抽取她对这个网站的识别码,并放到HTTP请求报文中包括识别码的cookie首部行中。特别是,发往该Amazon服务器的每个HTTP请求报文都包括以下首部行:
Cookie: 1678

在这种方式下,Amazon服务器可以跟踪Susan在Amazon站点的活动。尽管Amazon
Web站点不必知道Susan的名字,但它确切地知道用户1678按照什么顺序、在什么时间、访问了哪些页面!

六、Web缓存

1.web缓存

Web缓存器(Web cache)也叫代理服务器(proxy server),它是能够代表初
始Web服务器来满足HTTP请求的网络实体

举例来说,假设浏览器正在请 求对象 http :〃www. someschool. edu/
campus, gif,将会发生如下情况:

1)浏览器创建一个到Web缓存器的TCP连接,并向Web缓存器中的对象发送一个HTTP请求。
2) Web缓存器进行检查,看看本地是否存储了该对象副本。如果有,Web缓存器就
向客户浏览器用HTTP响应报文返回该对象。
3) 如果Web缓存器中没有该对象,它就打开一个与该对象的初始服务器(即
WWW. someschool. edu)的TCP连接。Web缓存器则在这个缓存器到服务器的TCP连接上发送一个对该对象的HTTP请求。在收到该请求后,初始服务器向该Web缓存器发送具有该对象的HTTP响应。
4) 当Web缓存器接收到该对象时,它在本地存储空间存储一份副本,并向客户的浏览
器用HTTP响应报文发送该副本(通过现有的客户浏览器和Web缓存器之间的TCP连接)。

2.条件GET方法

尽管高速缓存能减少用户感受到的响应时间,但也引入了一个新的问题,即存放在缓
存器中的对象副本可能是陈旧的。

HTTP协议有一种机制,允许缓存器证实它的对象是最新的。这种机制就是条件GET (conditional GET)方法。如果:
①请求报文使用GET方法;并且
②请求报文中包含一个“ If Modified-Since:”首部行。那么,这个HTTP请求报文就是一个条件GET请求报文。

在这里插入图片描述
Last-Modified:首部行的值。该条件GET报文告诉服务器,仅当自指定日期之后该对
象被修改过,才发送该对象。

值得注意的是在最后的响应报文中,状态行中为304 Not Modified,它告诉缓存器可以使用该对象,能向请求的浏览器转发它(该代理缓存器)缓存的该对象副本。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有诗亦有远方

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值