应用层(二)

Web和HTTP

万维网(World Wide Web)将因特网提升为仅有的一个数据网

HTTP

Web应用层协议是超文本传输协议(HyperText Transfer Protocol,HTTP),由两个程序实现:客户程序和服务器程序(运行在不同的端系统中)

Client:request、receive、display

Server:send objects in response to request(Web服务器总是打开的

image-20220319212653891.png

Web页面由对象组成:HTML文件、JPEG、java程序、视频段等组成,可通过URL寻址

image-20220319212534973.png

HTTP使用TCP作为支撑运输协议:

  • 客户端初始化与服务器的TCP连接(创建socket)
  • 服务器接受来自客户端的连接
  • HTTP报文在二者间交换
  • TCP连接丢失

注意:HTTP属于无状态协议(stateless protocol),服务器不保存任何该客户的状态信息

非持久连接和持久连接

非持久连接:每个请求/响应对是经过一个单独的TCP连接发送

持久连接:所有请求及响应经相同的TCP连接发送

HTTP两者均能使用

非持久连接的HTTP

访问www.someSchool.edu/someDepartment/home.index(一个HTML基本文件和十张图片)

  1. HTTP客户进程在端口号为80发起一个到服务器www.someSchool.edu的TCP连接
  2. HTTP客户经它的套接字向服务器发送一个HTTP请求报文(包含了路径名/someDepartment/home.index)
  3. HTTP服务器进程经它的套接字接收该请求报文,从其存储器中检索出对象www.someSchool.edu/someDepartment/home.index,并封装入一个HTTP响应报文通过套接字发送给客户
  4. HTTP服务器进程通知TCP断开该TCP连接
  5. HTTP客户接收响应报文,TCP连接关闭
  6. 为10张图片重复1-5步骤

每个TCP连接只传输一个请求报文和一个响应报文,每个连接并不为其他的对象而持续下来

获得图片对象可以使用串行或并行的TCP连接,并行可以减少响应时间

RTT,Round-trip Time往返时间:一个短的分组从客户到服务器然后再返回客户所花费的时间(包含处理时延、排队时延、传播时延)

image-20220320095110916.png

HTTP response time = 2 × RTT + file transimission time

持久连接的HTTP

非持久连接缺点:

  1. 必须为每个请求的对象建立和维护一个全新的连接(分配TCP缓冲区),给服务器带来严重负担
  2. 每个对象经受超过两倍的RTT时延,响应时间不及时

持久连接:

服务器发送响应后保持TCP打开,后续的请求和响应报文可以通过相同的连接进行传送

对对象的请求可以一个接一个地发出而不必等待流水线(pipelining,不等待已发送消息的应答,连续发送后面的消息)的回答

是HTTP的默认模式:持久连接+流水线

HTTP报文格式

请求报文

image-20220320101225883.png

  • Host:对象所在的主机
  • User-agent:指明用户代理,即向服务器发送请求的浏览器类型
  • Accept:告诉服务器客户端接受什么类型的响应
  • Date:请求发送的日期和时间
  • Connection:是否需要持久连接(keep-alive持久连接)

image-20220320215559854.png

entity body:实体体,使用GET方法时其为空,POST方法时使用它

  • HEAD方法类似于GET方法,但是响应后不会返回请求对象,常用来进行调试跟踪
  • PUT方法常与Web发行工具联合使用,允许用户上传对象到指定的Web服务器上指定的地址/目录
  • DELETE方法允许用户或者应用程序删除Web服务器上的对象

响应报文

image-20220320215948321.png

Server:指示响应服务器

Last-Modified:对象创建或者最后修改的日期和时间

Content-Length:被发送对象中的字节数

Content-Type:对象类型

image-20220320220057211.png

参考:HTTP响应头和请求头信息对照表

常见状态码和相关短语

  • 200 OK:请求成功,信息返回在响应报文中
  • 301 Moved Permanently:请求的对象已经被永久转移了,新的URL在响应报文里的Location中
  • 400 Bad Request:服务器无法理解请求
  • 404 Not Found:请求的 文档不在服务器上
  • 505 HTTP Version Not Supported:服务器不支持请求报文使用的HTTP协议

表单输入:分为POST(表单输入信息在body字段)和GET(表单输入信息在URL中

补充:telnet命令可以实现远程登录服务器

用户和服务器的交互:Cookie

为了识别用户,Web站点使用cookie,允许站点对用户进行追踪(HTTP无法实现)

组件

  1. HTTP响应报文里的cookie首部行
  2. HTTP请求报文中的cookie首部行
  3. 用户端系统中保留一个cookie文件,由用户浏览器存储
  4. 位于网站后端数据库中(eg:可以想象当今你浏览了某乎上商品的推荐,某宝或某东会推出你所查看过的商品,这些网络大户们十分可能共享了后端数据库信息,以此类推)

image-20220320224938984.png

突然联想到不同设备登录判断,很有可能用到了cookie,登录的信息存储到cookie,后端对cookie内容进行判断(具体貌似不是这样实现,不过cookie确实好用,只要我不去清理它,就可以在哪上浏览器是自动登录和查看历史信息之类的,爬虫就经常借用了cookie来进行登录)

Web缓存

aka 代理服务器(proxy server),代表初始服务器来满足HTTP请求的网络实体

image-20220321082523596.png

具体过程:

  1. 浏览器创建一个到Web cache的TCP连接,并向Web缓存器中的对象发送一个HTTP请求
  2. Web缓存器检查看本地是否存储了该对象副本,若有就向客户浏览器用HTTP响应报文返回该对象
  3. 若无该对象,就打开一个与该对象的初始服务器的TCP连接,Web缓存器向服务器发送一个对该对象的HTTP请求。接到请求后,初始服务器向Web缓存器发送具有该对象的HTTP响应
  4. Web缓存器收到对象后,在本地存储空间存储一份副本,并向客户的浏览器用HTTP响应报文发送该副本

Web缓存器既是服务器又是客户

why?

  • 减少对客户请求的响应时间
  • 减少一个机构的接入链路到因特网的通信量(降低费用,改善应用性能)

内容分发网络(Content Distribution Network,CDN):CDN公司在因特网上安装许多地理上分散的缓存器,使大量流量实现了本地化

条件GET方法

基于web cache的对象副本可能是旧的,导致问题出现;因此有了条件GET方法,允许Web cache检查对象是否最新

条件GET请求报文:1.请求报文使用GET方法;2.请求报文包含一个If-Modified-Since:<date>首部行

image-20220321085428273.png

缓存器在存储对象时也存储了其最后修改日期,下次访问如果对象没被修改(看日期),原始服务器就返回不包含对象的响应报文

最后修改:2022 年 06 月 13 日
如果觉得我的文章对你有用,请随意赞赏