HTTP--应用层协议

HTTP

HTTP介绍

我们先了解一下HTTP是什么

HTTP(HyperText Transfer Protocol):超文本传输协议

HTTP就是文件传输的一个协议,属于应用层协议,使用TCP作为它的支撑传输协议

HTTP是web的核心,web客户端和web服务端通过交换HTTP报文进行文件传输

我们看一下客户端是如何使用HTTP与服务器端建立联系的

  1. 客户端发出一个小TCP报文段
  2. 服务器用一个小的TCP报文段做出确认和相应,这时候客户端与服务器端建立了一个TCP连接
  3. 客户端向服务器发出一个确认同时发出一个HTTP请求报文
  4. 服务器端接到报文后就在该TCP上传输HTML文件

上面的1~3步就是三次握手的过程

HTML文件:一个web页面包含一个基本的HTML文件,该文件通过对象的URL地址引用页面的其他对象

URL: URL地址由两部分组成,服务器主机名以及对象的路径名

HTTP两种连接方式

  1. 非持续连接,一旦传输完一个文件,服务器就会关闭TCP连接,而每当客户端检查HTML文件获取其他文件的URL地址重新请求文件传输时,就要重新建立TCP连接
  2. 持续连接,就是在HTTP传输时不关闭TCP连接,从HTML中获得的其他URL的地址请求文件传输时就使用该TCP连接,不用重新建立TCP连接

HTTP报文格式

HTTP请求报文

GET /somedir/page.html HTTP/1.1
Host: www.someschool.edu
Connetion: close
User-agent: Mozilla/5.0
Accept-language: fr
  • 第一行为请求行,请求行有三个字段组成、方法字段、URL字段、HTTP版本字段,方法字段有 (GET,POST,HEAD,PUT,DELETE)
  • 请求行后边的行为首部行,Host指明了对象所在的主机
  • Connetion: close,表示使用非持续连接,传输完文件就关闭TCP连接
  • User-agent指明了向服务器发送请求的浏览器类型
  • Accept-language: 表示接受的语言

HTTP相应报文

HTTP/1.1 200 OK
Connetion: close
Date: Tue 09 Aug, 2011 15:44:04 GMT
server: Apache/2.2.3(Centos)
Last-Modified: Tue, 09 Aug 2011 15:11:03 GMT
Content-Type: text/html

(data data data...)
  • HTTP/1.1 200 OK 表示服务器正在使用HTTP/1.1, 200表示正常
  • Data:… 服务器向客户端发送文件的日期
  • server: 服务器名称
  • Last-Modified: 文件最后修改的日期
  • Content-Type表示使用的是HTML文本
  • (data…) 为对象本身数据

cookie

你是否好奇为什么某宝等购物平台知道你喜欢的商品类型,他们是怎么保存你的数据的,这主要是通过cookie实现的

我们前面提到的HTTP服务器是无状态的,它并不知道跟他请求的客户端是谁,但是服务器希望能够识别用户,或许是为了限制,如爬虫等程序,因此HTTP提供了cookie方法,它允许服务器站点对客户进行跟踪

cookie是如何实现的?

假如我们第一次访问一个站点,这时候该站点服务器会产生一个唯一的标识码,如1027,当它向我们发出响应报文时,会在相应报文的首部行会包含该数据Set-cookie: 1027,这时,我们的浏览器会在它管理的cookie文件中添加一行数据,该数据包括服务器的名称以及Set-cookie中的值1027,当我们时隔一个星期再次访问该站点时,我们的浏览器就会在我们请求报文首部行中的cookie中存放1027,这时服务器就能根据我们的识别码识别出我们,然后跟踪我们在服务器的行为,如果我们还在该服务器进行了注册包含我们的姓名、电子邮箱地址等数据,服务器也能在数据库中将其联系起来,这就是服务器能够识别我们的原理

Web缓存

当我们对一个服务器发出HTTP请求报文时,可能服务器很繁忙,导致响应时间过长,因此我们可以设立web缓存器,缓存器中存放着我们最近请求过的报文,当缓存器中不存在我们请求的报文时,缓存器就向初始服务器发出一个请求报文,接受到报文后保存值缓存器中并向我们发送响应报文、因此web缓存器既是一个客户也是服务器

GET方法

每当我们向web缓存器发出一个请求报文时,为了保证web缓存器中的存放对象副本是最新的,web缓存器会向初始服务器发出一个请求报文GET,格式如下

GET /fruit/kiwi.gif HTTP/1.1
Host: www.exotiquecuisine.com
if-Modified-Since: Web, 7 Sep 2011 09:23:24

因为web缓存器存储对象副本时同时存放了最后修改日期,因此根据该修改日期Web缓存器就能判断是否修改过,如果没修改过,初始服务器就不用特地发对象过来,只要发一个状态响应就可以了

参考:

《计算机网络自顶向下方法》

猜你喜欢

转载自blog.csdn.net/jump_into_zehe/article/details/106569482