简介
HTTP 本质是位于OSI应用层的一种协议,全拼: hypertext transfer protocol 超文本传输协议(就是说什么数据格式都能传输)
本质是 请求—响应
请求
如图:
请求行
第一行是请求行:
请求方法(METHOD) 统一资源标识符(URI) HTTP版本号
1 | 请求方法: POST /GET /HEAD /PUT /DELETE |
区别
HTTP 1.0需要使用keep-alive参数来告知服务器端要建立一个长连接,而HTTP1.1默认支持长连接。
HTTP2.0使用了多路复用的技术,做到同一个连接并发处理多个请求,而且并发请求的数量比HTTP1.1大了好几个数量级。
当然HTTP1.1也可以多建立几个TCP连接,来支持处理更多并发的请求,但是创建TCP连接本身也是有开销的
HTTP1.1不支持header数据的压缩,HTTP2.0使用HPACK算法对header的数据进行压缩,这样数据体积小了,在网络上传输就会更快。
请求头header
1 | Host: 目标服务器的网络地址 |
请求体
真正需要发给服务端的数据,在使用POST-multipart上传请求中请求体就是上传文件的二进制NSData类型数据;在GET请求中请求体为空;在普通的POST请求中请求体就是一些表单数据。
响应
响应行
包含HTTP版本号、状态码、状态码对应的英文名称
状态码对应的信息1
2
3
4
5
6
7
8
91XX:信息提示。不代表成功或者失败,表示临时响应,比如100表示继续,101表示切换协议
2XX: 成功
3XX: 重定向
4XX:客户端错误,很有可能是客户端发生问题,如亲切可爱的404表示未找到文件,说明你的URI是有问题的,服务器机子上该目录是没有该文件的;414URI太长
5XX: 服务器错误,比如504网关超时
响应头与响应体
与请求头与请求体基本一致,除却一些字段
HTTP版本差异
HTTP 1.1之前1
2
3
4
5不支持持久连接。一旦服务器对客户端发出响应就立即断开TCP连接(频繁创建会话费资源、影响性能)
无请求头跟响应头
客户端的前后请求是同步的。下一个请求必须等上一个请求从服务端拿到响应后才能发出,有点类似多线程的同步机制。(异步会走多线程,快捷)
HTTP 1.1(主流版本)1
2
3
4
5
6
7与1.1之前的版本相比,做了以下性能上的提升
增加请求头跟响应头
支持持久连接。客户端通过请求头中指定Connection为keep-alive告知服务端不要在完成响应后立即释放连接。HTTP是基于TCP的,在HTTP 1.1中一次TCP连接可以处理多次HTTP请求
客户端不同请求之间是异步的。下一个请求不必等到上一个请求回来后再发出,而可以连续发出请求,有点类似多线程的异步处理。
HTTP 2.01
本着向下兼容的原则,1.1版本有的特性2.0都具备,也使用相同的API。但是2.0将只用于https网址。