超文本传输协议HTTP概述

HTTP定义

HTTP中文名为超文本传输协议
HTTP协议定义了浏览器(即万维网的客户进程)怎样向万维网服务器请求万维网存档,以及服务器怎样把文档传送给浏览器。
即定义了web页面在因特网上的交互方式的应用层协议。
从层次的角度来看,HTTP是面向事务的应用层协议,它是万维网上能够可靠得交换各种文件的重要的基础。
HTTP不仅传送完成超文本跳转所必须的信息,而且也传送任何可以从互联网上得到的信息,比如文本、超文本、声音和图像。

HTTP协议使用TCP作为传输层。服务器的默认端口号是80

HTTP所扮演的角色

每个万维网的网店都有一个服务器的进程,它能够不断得去监听TCP的端口80,以便发现是否有浏览器向它发出连接建立请求。
一旦监听到了这个连接建立的请求并且建立了TCP的连接之后,浏览器就向万维网服务器发出浏览某个页面的请求,服务器就接着返回所请求的页面作为相应。
最后,TCP的连接就被释放了。
在这里插入图片描述

在浏览器和服务器之间的请求和响应的交互,必须按照规定的格式和遵循一定的规则。这些格式和规则就是超文本传输协议HTTP。

HTTP本身是无连接的,只有TCP在相互连接。通信的双方在交换HTTP报文之前不需要建立HTTP连接。

非持续连接HTTP/1.0

HTTP/1.0协议是在1997年使用RFC 1945 定义的。现在目前普遍使用的是使用RFC 7231 定义的 HTTP/1.1

下面来介绍一下HTTP/1.0的工作过程
在这里插入图片描述

  1. 建立TCP连接:三次握手。
  2. 获取页面文档:收到报文
  3. 断开TCP连接:四次挥手。

在这里插入图片描述
我们可以从图中看到,请求一个万维网文档所需要的时间是该文档的传输时间和两倍的RTT。
所以HTTP1.0的主要缺点是:每请求一次连接就有两倍的RTT开销,并且每次都要建立新的TCP连接都要分配缓存和变量。
所以我们把HTTP/1.0叫做非持续连接,并且这种连接方式叫非流水式作业方式
总而言之,非持续连接有一下几个特点:

  • 不同对象使用不同的TCP连接,通信完毕断开连接。
  • 获得对象至少需要2 RTTs(建立连接和获取对象)。
  • 每次传送都要受到TCP初始化时的慢启动影响。

非流水线作业方式:

  • 完整收到每个对象后才发送下一个对象的请求。
    在这里插入图片描述

持续连接HTTP/1.1

所谓的持续连接就是指万维网服务器在发送响应之后仍然在一段时间内保持这段连接,使同一个客户(浏览器)和该服务器可以继续在这条连接上传送后续的HTTP请求报文和响应报文。

下面是HTTP/1.1的工作过程
在这里插入图片描述

  1. 建立TCP连接:三次握手。
  2. 获取页面文档:收到报文
  3. 维持TCP连接:继续传输。

HTTP/1.1有流水线方式非流水线方式两种。
非流水线作业方式:

  • 完整收到每个对象后才发送下一个对象的请求。
    在这里插入图片描述

流水线方式:

  • 收到响应报文之前就能够接着发送新的报文,一条TCP传多个对象。

在这里插入图片描述
这样可以大幅度得减少延迟,并且只要消耗一个RTT时间,提高了效率。

HTTP的报文结构

HTTP有两类报文:

请求报文响应报文
从客户向服务器发送请求报文。从服务器到客户的回答。

在这里插入图片描述
HTTP协议的设计原则:

  • 满足协议的功能
  • 注意协议的拓展性
  • 便于程序处理
  • 注意协议的通信效率
  • 其他细节

HTTP请求报文的格式
在这里插入图片描述
“方法”是面向对象技术中使用的专门名词。所谓“方法”就是对所请求的对象进行的操作,因此这些方法实际上也就是一些命令。因此,请求报文的类型是由它所采用的方法决定的。
常见的HTTP请求的方法:

  • OPTION 请求一些选项的信息
  • GET 请求读取由URL所标志的信息
  • HEAD 请求读取由URL所标志的信息的首部
  • POST 给服务器添加信息(例如,注释)
  • PUT 在指明的URL下存储一个文档
  • DELETE 删除指明的URL所标志的资源
  • TRACE 用来进行环回测试的请求报文
  • CONNECT 用于代理服务器

URL”是所请求的资源的 URL(不包括域名)。
“版本”是 HTTP 的版本,包括HTTP1.0和HTTP1.1
首部字段名定义了一些双方协商的参数,如客户端浏览器的类型,允许接收的数据类型,允许接收的语言,使用的编码方式等

HTTP响应报文的格式
在这里插入图片描述
响应报文的开始行是状态行。
状态行包括三项内容,即 HTTP 的版本,状态码,以及解释状态码的简单短语
常见的状态码:

  • 1xx 表示通知信息的,如请求收到了或正在进行处理。
  • 2xx 表示成功,如接受或知道了。
  • 3xx 表示重定向,表示要完成请求还必须采取进一步的行动。
  • 4xx 表示客户的差错,如请求中有错误的语法或不能完成。
  • 5xx 表示服务器的差错,如服务器失效无法完成请求。

可以看到请求包和响应包的格式基本上是一样的
通常用两个CRLF来表示首部的结束
由于HTTP是面向文本的,因此在报文中每一个字段都是一些ASCII码串,所以各个字段的长度都是不固定的。

Cookie

万维网站点可以用Cookie来跟踪用户。表示在HTTP服务器和客户之间传递的状态信息。

posted @ 2021-04-01 17:34  Zeker62  阅读(333)  评论(0编辑  收藏  举报