HTTP协议 特点

HTTP 协议,在客户端和服务器端进行交互,有以下特点:

1)无状态

HTTP 协议是一种自身不对请求和响应之间的通信状态进行保存的协议,即无状态协议。

这种设置的好处是:更快的处理更多的请求事务,确保协议的可伸缩性

不过随着 WEB 的不断发展,有时候,需要将这种状态进行保持,随即,就引入了cookie技术,cookie技术通过在请求和响应报文中写入cookie信息来控制客户端的状态。

2)持久性

正常在发送 HTTP 时,都需要建立 TCP 的连接,再发送报文。

 

如果每次想要发送 HTTP 报文都需要经过这个过程,那么时间大部分都会消耗在建立和断开连接的过程中。

因此 HTTP 中使用了connection属性,用于指定连接的方式。

当设置成keep-alive,HTTP 就会建立一条持久化的连接,不需要每次都建立连接,再中断。

这样做的好处是:减轻了服务器端的负载,减少开销的那部分时间,使 HTTP 请求和响应都能更快的结束,相应的, WEB 页面显示速度也就相对提升了。

3)管线化

如果一个 HTTP 请求,请求了大量的图片等大文件,那么其他的 HTTP 请求怎么办呢?

现在,管线化技术的出现,使得 HTTP 请求比持久性连接更要快;特点在于:请求数越多,时间差越明显。

4)内容编码

由于某些报文的内容过大,因此在传输时,为了减少传输的时间,会采取一些压缩的措施。

例如上面的报文信息中,Accept-Encoding就定义了内容编码的格式:gzip

有下面几种方式:

gzip:GNU压缩格式

compress:UNIX系统的标准压缩格式

deflate:是一种同时使用了LZ77和哈弗曼编码的无损压缩格式

identity:不进行压缩

5)多部分对象集合

有的时候传输的内容,不仅仅是一些字符串,还有可能是一些图片,字符,音乐二进制等混杂的内容。

这就需要使用多部分对象集合,multipart,例如在使用java编写 WEB 上传文件的代码时,需要在form中指定form的编码格式。

设置form的enctype属性的值为multipart/form-data。

这是因为默认的情况下form使用的编码格式是:applicatin/x-www-form-urlencoded,这种编码格式会把所有的内容进行编码,不适合上传文件这种情况。

这两种编码格式的区别主要是:

multipart/form-data 会以控件为基准,编码form中的内容。

application/x-www-form-urlencoded 会把form中的内容编码成键值对的形式。

6)范围请求

有些场景下,HTTP 报文请求一些很大的图片,但是加载过程很慢。

比如我们登录一些大图片的网址,会发现有时候图片是一块一块加载的。

这就是因为设置了 HTTP 请求的长度,这样就可以分块的加载资源文件。

在请求报文中使用 Range 属性,在响应报文中使用 Content-Type 属性都可以指定一定字节范围的 HTTP 请求。

HTTP 协议的方法,也就是HTTP 协议的数据传输方式。HTTP 协议的传输方式有很多种,处于安全考虑,传统上常用的一般都是 GET 和 POST 两种。1)GET 获取资源:GET 方法用来请求访问已被 URL 识别的资源。2)POST 传输实体主体:POST 方法用来请求服务器传输信息实体的主体。