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

1.各层分组的名称

采用《计算机网络:自顶向下方法》一书中的定义:
应用层:报文(message)
运输层:报文段(segment)
网络层:数据包(datagram)
链路层:帧(frame)

2.应用层

HTTP:超文本传输协议,web应用采用的协议。
web页面(web page):是由对象组成的。一个对象只是一个文件,诸如一个HTML文件、一个JPEG图象、一个Java小程序或者一个视频片段之类的文件,且他们可通过一个URL地址寻址。多数web页面含有一个HTML基本文件(base HTML file)以及几个引用对象。
URL地址:由两部分组成,为存放对象的服务器主机名和对象的路径名。例如https://blog.csdn.net/littleflypig/article/details/88290449 ,其中blog.csdn.net是主机名,/littleflypig/article/details/88290449是对象名。
持续连接和非持续连接:应用程序的每个请求/响应对是经一个单独的TCP连接发送的,还是所有请求/响应经相同的TCP连接发送的。

HTTP协议

HTTP报文有两种:请求报文和响应报文。

1.请求报文

下面是一个典型HTTP请求报文

GET /somedir/page.html HTTP/1.1
Host: www.someschool.edu
Connection: close
User-agent: MOzilla/5.0
Accept-language: fr

请求报文至少为一行。第一行称为请求行(request line),其后续的行叫做首部行(header line)

  • 请求行有3个字段:方法字段、URL字段、HTTP版本字段。方法字段可以取几种:GET、POST、HEAD、PUT、DELETE
  • 首部行Host指明了对象所在主机。
  • 首部行Connect指明了使不使用持续连接,close表示不使用,要求服务器发送完被请求对象后就关闭此连接。
  • 首部行User-agent指明用户代理,即用户所使用浏览器类型。服务器可以为不同类型的用户代理发送相同对象的不同版本。
  • 首部行Accept-language表示用户想得到该对象的语言版本,没有该版本就用默认值。
    一个HTTP请求报文通用格式如下:计算机网络-应用层HTTP协议_第1张图片
    除了前面例子中的首部行和请求行,此格式还有一个实体体(entity body),当使用GET方法时,实体体为空,使用POST方法时才使用实体体,当用户提交表单(表单在网页中主要负责数据采集功能)时,多使用POST方法,比如用户使用搜索引擎搜索关键词时,如果使用POST方法,其实体体中包含的就是用户在表单字段的输入值。当然,用表单生成的请求报文不是必须使用POST方法。
    HEAD方法类似POST方法,但是并不返回请求对象,多用于调试;PUT方法常与web发行工具使用,允许用户上传对象到指定web服务器的指定路径;DELETE方法允许用户或者应用程序删除web服务器上的对象。

2.HTTP响应报文

典型响应报文如下:

HTTP/1.1  200  OK
Connection: close
Data: Tue, 09 Aug 2011 15:44:04
Server: Apache/2/2/3 (Centos)
Last-Modified: Tue, 09 Aug 2011 15:11:03 GMT
Content-Length: 6821
Content-Type: text/html

(data data data data ...)

此响应报文包含三部分:状态行(status line),首部行,实体体。

  • 状态行有三个字段:协议版本、状态码和相应状态信息。
  • 首部行Connection告诉客户发送完此对象就关闭连接
  • 首部行Data指示服务器产生并发送该响应报文的时间和日期,此时间不是指对象最后创建或修改的时间。
  • 首部行Server指示服务器种类
  • 首部行Last-Modified指示对象创建或修改的最后时间和日期,此首部行对对象缓存来说非常重要。
  • 首部行Content-Typt指示实体体中的对象类型是html
  • 首部行Content-Length指示了被发送的对象的字节数
    一个通用格式如下:
    计算机网络-应用层HTTP协议_第2张图片
    常见的几个状态码和相关短语如下:
  • 200 OK:请求成功,信息在返回的响应报文中。
  • 301 Moved Permanently: 请求对象以被永久转移,新的URL定义在响应报文的Location首部行中。
  • 400 Bad Request:通用差错码,指示该请求不能被服务器理解。
  • 404 Not Found:请求对象不再服务器上。
  • 505 HTTP Version Not Supported:不支持请求报文使用的HTTP协议版本。

3.cookie

HTTP协议使用cookie实现站点对用户的追踪。cookie技术有4个组件:HTTP响应报文中的一个cookie首部行、HTTP请求报文中的一个cookie首部行、用户端系统中一个cookie文件并有浏览器进行管理、web站点的一个后端数据库。
当用户第一次访问某站点时,该web站点产生一个唯一的识别码并在后端数据库产生一个表项,接下来用包含中Set-cookie首部行的响应报文对用户进行响应,其中的Set-cookie包括该识别码,用户收到响应报文后会取出该识别码,并存入本地系统的特定cookie文件。然后当用户在访问该站点时,就会在请求报文中设置一个首部行Set-cookie。

4.web缓存

web缓存器也叫代理服务器,它是能代表初始web服务器来满足HTTP请求的网络实体。通过web缓存器来请求某web页面时,发生如下过程:

  • 浏览器建立一个到web缓存器的TCP连接(需要知道该web缓存器的ip地址,通常由hosts文件提供?),并发送请求报文到该web缓存器
  • web缓存器检查本地是否存储了该对象副本,如果存在就像客户浏览器发送HTTP响应返回该对象。
  • 如果web缓存器中没有该对象,就打开一个与该对象的初始服务器的TCP连接。然后web缓存器发送HTTP请求到初始服务器请求该对象,请求到后存储在本地,并发送响应给客户浏览器返回对象。
    然而某些时候该web缓存器上的内容可能是陈旧的,因此HTTP协议还提供一种方法保证web缓存器证实该对象是最新的。该方法就是条件GET方法:web缓存器通过添加首部行If-Modified-Since到向初始服务器的请求报文,初始服务器收到该请求后将If-Modified-Since首部行中的日期与该对象在初始服务器中被修改的最后日期比较,如果相等就发送一个状态为304 Not Modified的响应,否则就返回新对象。

你可能感兴趣的:(计算机网络)