HTTP协议

  • Post author:
  • Post category:其他



在介绍http协议之前,我们有必要先了解一下万维网



https://blog.csdn.net/qq_54669536/article/details/124448921

HTTP的操作过程

概述:http协议是超文本传输协议,除了文字以外,它还可以传输声音、图像、文本等各种多媒体文件。http协议定义了万维网客户进程怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器。从层次的角度看,http是面向事务的应用层协议。

所谓事务就是指一系列的信息交换,而这一系列的信息交换是一个不可分割的整体,也就是说,要么所有的信息都交换完成,要么一次交换都不进行。

万维网的工作过程如图:

关于上图作以下几点分析:

  • 每个万维网都有一个服务器进程,他不断的监听TCP的端口80,看是否有浏览器向它发出连接建立请求,一旦监听到连接建立请求并建立了TCP连接之后,浏览器就会向万维网服务器发出浏览某个页面的请求,服务器就会做出相应的响应。浏览器个服务器之间的请求和响应的交互,都必须按照一定个规则,这些规则就是超文本传送协议HTTP。
  • 用户浏览网页的方法有两种。一种方法是在浏览器的地址窗口中键入所要找的页面的URL。另一种方法是在某一个页面中用鼠标点击一个可选部分,这是浏览器会自动在互联网上找到所要链接的页面。
  • HTTP使用了面向连接的TCP作为传输协议,保证了数据的可靠传输。HTTP不必考虑数据在传输过程中的具体细节。但是,HTTP协议本身是无连接的。这就是说,虽然HTTP使用了TCP连接,但通信的双方在交换HTTP报文之前不需要先建立HTTP连接。
  • HTTP是无状态的。也就是说,同一个客户第二次访问同一个服务器上的页面时,服务器的响应与第一次被访问时的相同,因为服务器并不记得曾经访问过的客户,也不记得为这个客户服务过多少次。

下面我们改进以下上边的图,粗略估计一下从浏览器请求一个万维网文档到收到整个文档所需的时间。

我们都知道,TCP在三次握手时,前两次是不带任何数据的,在第三次握手才可以携带数据,利用这个特点,我们将HTTP请求协议作为第三次握手时的数据,发送给万维网服务器,服务器收到HTTP请求报文后,就把所请求的文档作为响应报文返回给客户。如图:

由图可以看出,请求一个万维网文档所需的时间是该文档的传输时间加上两倍往返时间RTT(一个RTT用于连接TCP连接,另一个RTT用于请求和接收万维网文档)

代理服务器

代理服务器是一种网络实体,它又称为万维网高速缓存。代理服务器把最近的一些请求和响应暂存在本地磁盘中。当新请求到达时,若代理服务器发现这个请求与暂时存放的请求相同,就返回暂存的响应,而不需要按URL的地址再次去连接互联网。代理服务器可在客户端或服务器端工作,也可在中间系统上工作。代理服务器在某种程度上可以有效减小访问互联网的时延。

HTTP的报文结构

HTTP有两类报文:

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

如图:

分析:由于HTTP是面向连接文本的,因此在报文中的每一个字段都是一些ASCII码串,因而各个字段的长度都是不确定的。HTTP请求报文和响应报文都是由三个部分组成的,可以看出,这两个报文格式的区别就是开始行不同。


开始行:

用于区别是请求报文还是响应报文。在请求报文中的开始行叫做请求行,而在响应报文中的开始行叫做状态行,在开始行的三个字段之间都以空格分隔开,最后的CR和LF分别代表回车和换行。


首部行:

用来说明浏览器、服务器或报文主体的一些信息,首部可以有好几行,但也可以不使用。在每一个首部行中都有首部字段名和它的值,每一行在结束的地方都要有回车和换行,整个首部行结束时,还有一空行将首部行和后边的实体主体分开。


实体主体:

在请求报文中一般都不用这个字段,而在响应报文中也可能没有这个字段。

HTTP请求报文的特点:

请求报文的请求行只有三个内容,即方法,请求资源的URL,以及HTTP的版本(这里的方法其实就是对所请求对象进行的操作,实际上也就是一些命令)。因此,请求报文的类型是由它所采用的的方法决定的。

常见的请求方法有以下几种:

下面是HTTP的请求报文的开始行的格式,在GET后边有一个空格,接着才是完整的URL,其后还有一个空格。

下面是一个完整的HTTP请求报文的例子:

短连接和长连接的区别:

在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器没进行一次HTTP操作,就建立一次连接,任务结束就中断连接。

在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。

Keep-Alive不会永久保持连接,他有一个保持时间,可以在不同的服务器软件中设定这个时间。实现长连接需要客户端和服务器端都支持长连接。HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。

HTTP响应报文:

HTTP响应报文的主要特点:

每一个请求报文发出后,  都能收到一个响应报文。响应报文的第一行就是状态行。

状态行包括三项内容,即HTTP版本,状态码,以及解释状态码的简单短语。

状态码都是三位数字的,分为5大类,它们分别是:

1xx表示通知信息,如请求收到了或正在进行处理;

2xx表示成功,如接受或知道了;

3xx表示重定向,如要完成请求还必须采取进一步的行动;

4xx表示客户的差错,如请求中有错误的语法或不能完成;

5xx表示服务器的差错,如服务器失效无法完成请求。

下面是几种常见的响应报文:

200:请求被正常处理

204:请求被迫受理但没有资源可以返回

206:客户端只是请求资源的一部分,服务器只对请求的部分资源执行GET方法,相应报文中通过Content-Range指定范围的资源。

301:永久性重定向

302:临时重定向

303:与302状态码有相似功能,只是它希望客户端在请求一个URL的时候,能通过GET方法重定向到另一个URL上

304:发送附带条件的请求时,条件不满足时返回,与重定向无关

307:临时重定向,与302类似,只是强制要求使用POST方法

400:请求报文语法错误,服务器无法识别

401:请求需要认证

403:请求的对应资源禁止被访问

404:服务器无法找到对应资源

407:客户端需要先获得代理服务器的认证

500:服务器内部错误

503:服务器正忙

若请求的网页从http://www.ee.xyz.edu/index.html转移到了一个新的地址,则响应报文的状态行和一个首部行就是下面的格式:

HTTP/1.1 301  Moved Permanently     {永久性的转移了}

Location:http://www.xya.edu/ee/index.html   {新的URL}

http协议存在的问题:

  • 通信使用明文不加密,内容可能被窃听;
  • 不验证通信方身份,可能遭到伪装;
  • 无法验证报文完整性,可能被篡改

这时就有了https协议,它主要是给HTTP加上了SSL加密处理+认证+完整性保护。



版权声明:本文为qq_54669536原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。