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 方法用来请求服务器传输信息实体的主体。