计算机网络-应用层协议1(HTTP)

本文深入解析HTTP协议的工作原理,涵盖HTTP请求与响应报文格式、持续连接与非持续连接的区别,以及Cookie机制和Web缓存等内容。

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

1.应用层一些重要知识

  • 流行的因特网应用及其应用层协议和支撑的运输协议
    一张重要的图
  • 区分网络应用和应用层协议
    例:Web应用包括文档格式标准HTML、Web浏览器、Web服务器以及一个应用层协议。

2.Web和HTTP

2.1 HTTP概况

  • HTTP(超文本传输协议)由两个程序实现:一个客户程序和一个服务器程序。
  • Web页面由对象组成,对象包括一个文件、一个HTML文件、一个JPEG图形、一个Java小程序或一个视频片段,它们都可以通过一个URL地址寻址。
  • Web浏览器实现了HTTP客户端;Web服务器实现了HTTP的服务器端。
  • 服务器向客户发送被请求的文件,不会存储任何关于该客户的状态信息,所以HTTP是一个无状态协议
  • 套接字接口:进程与TCP连接之间的门。

2.2 非持续连接和持续连接

  • 非持续连接:每个请求/响应对都是经一个单独的TCP连接发送。
  • 持续连接:所有的请求及其响应时间经相同的TCP连接发送。
2.2.1采用非持续连接的HTTP

从服务器向客户传送一个Web页面的步骤:假设该页面含有一个HTML基本文件和10个JPEG图形,并且这11个对象位于同一个服务器上,该HTML文件的URL地址为http://www.someschool.edu/somedepartment/home.index。

  • HTTP客户进程在80端口号发送一个到服务器www.someschool.edu的TCP连接请求。
  • HTTP客户经它的套接字向该服务器发送一个HTTP请求报文。
  • HTTP服务器进程经它的套接字接受该请求报文,从其存储器中检索出对象http://www.someschool.edu/somedepartment/home.index。,在一个HTTP响应报文中封装对象,并通过其套接字向客户端发送相应报文。
  • HTTP服务器进程通知TCP断开该TCP连接。
  • HTTP客户接收响应报文,TCP连接关闭。该报文指出封装的对象是一个HTML文件,提取出该文件后,得到对10个JPEG图形的引用。
  • 对每个引用的JPEG对象重复前4个步骤。如果是并行TCP连接会比串行TCP连接更快

往返时间(RTT):一个短分组从客户到服务器再返回客户所花费的时间。包括:分组传播时延、分组在中间路由器和交换机上的排队时延及分组处理时延。
请求接收一个HTML文件花费时间:2RTT+传输HTML文件的时间。
在这里插入图片描述

2.2.2 采用持续连接的HTTP

Web页面(HTML基本文件和10个JPEG图形)可以用单个TCP连接进行传送。一般一条连接经过一定时间间隔(超时间隔)未被使用,HTTP服务器就关闭该连接。

2.3 HTTP报文格式

2.3.1 HTTP请求报文

一个HTTP请求报文:
在这里插入图片描述

  • HTTP请求报文第一行叫做请求行,后继行叫首部行
  • 请求行:方法字段、URL字段和HTTP版本字段。
  • 首部行:HOST:www.someschool.edu行和Connection:close行指明对象所在主机和是否采用持续连接。User-agent:Moziila/5.0指明用户代理,即浏览器类型。Accept-language:fr行表示想得到该对象的法语版本。

一些请求行方法字段:

  • GET:使用GET方法时,实体主体为空。
  • POST:向服务器请求一个Web页面,Web页面内容依赖于用户在表单字段中输入的内容,这个内容就是实体主体。在GET方法的URL字段添加数据字段也可以达到相同的效果。
  • HEAD:类似于GET方法,但并不返回请求对象。
  • PUT:上传对象到指定的Web服务器。
  • DELETE:删除Web服务器上的对象。
2.3.2 HTTP响应报文

一个HTTP响应报文(两图是同一响应报文):
在这里插入图片描述
在这里插入图片描述

  • 响应报文有三个部分:1个初始状态行、6个首部行和实体主体。
  • 初始状态行:协议版本、状态码和相应的状态信息。
  • 首部行:Connection:close表示发送完报文后关闭该TCP连接;Date:产生发送响应报文的日期;Server:报文产生的服务器;Last-Modified:对象创建和最后修改的日期时间;Content-Length:被发送对象中的字节数;Content-Type:实体主体中的对象类型是HTML文本。
  • 实体主体:要发送的对象数据。

一些状态码和相关短语:

  • 200 OK 请求成功
  • 302 Moved Permanently 请求的对象已经被永久转移了,新的URL定义在响应报文的Location:首部行中。
  • 400 Bad Request 一个通用的差错代码,该请求服务器不理解。
  • 404 Not Found 被请求的文档不在服务器上。
  • 505 HTTP Version Not Supported 服务器不支持请求报文使用的HTTP协议版本。

2.4 用户与服务器的交互:cookie

  • cookie的产生
    为了限制用户对服务器的访问,将内容与用户相关联。它允许站点对用户进行跟踪。
    在这里插入图片描述
  • cookie的原理
    四个组件:①在HTTP响应报文中的一个cookie首部行;②在HTTP请求报文中的一个cookie首部行;③在用户端系统保留有一个cookie文件,并由用户的浏览器进行管理;④位于Web站点的一个后端服务器。
    图上描述的原理非常清晰,看看吧孩子,不要偷懒。

2.5 Web缓存

Web缓存又叫代理服务器。它是能够代表初始服务器响应HTTP请求的网络实体。
在这里插入图片描述
假设浏览器正在请求www.someschool.edu/jdi.gif,将会发生如下情况:

  1. 浏览器建立一个到Web缓存的TCP连接,并向Web缓存中的对象发送一个HTTP对象。
  2. Web进行检查,看本地是否存在对象副本。如果存在,Web缓存用HTTP响应报文返回该对象给浏览器。
  3. 如果不存在,它就打开一个与该对象的初始服务器的TCP连接,Web缓存发送一个HTTP请求到初始服务器。初始服务器收到后,将该对象用HTTP响应报文返回给Web缓存。
  4. 当Web缓存器收到该对象时,它在本地存储空间存储一份副本,并向客户的浏览器用HTTP响应报文发送该副本。

Web缓存广泛应用于内容分发网络(CDN)。

2.6 条件GET方法

  • 一个代理缓存( proxy cache)表示请求浏览器,向某Web服务器发送一个请求报文:
    在这里插入图片描述
  • Web服务器向缓存器发送具有被请求对象的响应报文:
    在这里插入图片描述
  • 一个星期后,另一用户也经过该缓存器请求统一对象,由于过去了一个星期,不知道缓存器中的该对象是否被修改,缓存器需要发送一个条件GET给Web服务器执行最新检查:
    在这里插入图片描述
  • 值得注意的是,If-Modified-Since:Wed,7 Sep 2011 09:23:24正是一个星期前前一用户接收到响应报文的Last-Modified字段。说明该对象在这之后的时间未被修改,Web服务器给缓存器发送响应信息:
    在这里插入图片描述
    缓存器接收到响应信息后,根据响应信息决定是否使用本地对象副本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值