更新时间:3:49:40 PM 2019-2-14
什么是HTTP?
HTTP–Hyper Text Transfer Protocol(超文本传输协议)是一种建立在TCP上的无状态连接,基本访问流程是客户端发送一个HTTP请求(URL-统一资源定位符),确定客户端想要访问的服务器的资源和请求的动作,服务端收到请求之后,根据请求做出相应的动作访问服务器资源,最后通过发送HTTP响应把结果返回给客户端。这就是一次简单的HTTP访问过程,从一个请求的开始到一个服务响应返回结果称为事务,服务器会在日志中记录事务的访问信息。
一、HTTP请求是什么?
HTTP请求是客户端往服务端发送请求动作,告知服务器自己的要求。
HTTP请求由状态行(status)、请求头(header)、请求正文三(body)部分组成:
状态行:包括请求方式Method、资源路径URL、协议版本Version;
请求头:包括一些访问的域名、用户代理、Cookie等信息;
报文主体:就是HTTP请求的数据。
主要请求方法(Method)(动作):GET、POST、PUT、DELETE,含义分别是获取、修改、上传、删除。
Method(方法) | Action(动作) |
---|---|
GET | 访问服务器的资源 |
POST | 向服务器发送要修改的数据 |
HEAD | 获取服务器文档的首部 |
PUT | 向服务器上传资源 |
DELETE | 删除服务器的资源 |
二、HTTP响应是什么?
服务器收到了客户端发来的HTTP请求后,根据HTTP请求中的动作要求,服务端做出具体的动作,将结果回应给客户端,称为HTTP响应。
分类 | 分类描述 |
---|---|
1xx | 表示HTTP请求已经接受,继续处理请求 |
2xx | 表示HTTP请求已经处理完成 |
3xx | 表示把请求访问的URL重定向到其他目录 |
4xx | 表示客户端出现错误 |
5xx | 表示服务端出现错误 |
常见状态码的含义
状态码 | 描述 |
---|---|
200 | OK 请求成功 |
301 | 请求永久重定向 |
302 | 请求临时重定向,原链接仍有效 |
304 | 请求被重定向到客户端本地缓存 |
400 | 客户端请求存在语法错误 |
401 | 客户端请求没有经过授权 |
403 | 客户端的请求被服务器拒绝,一般为客户端没有访问权限 |
404 | 客户端请求的URL在服务端不存在 |
500 | 服务端永久错误 |
503 | 服务端发生临时错 |
三、HTTP响应模型
服务器接收到HTTP请求之后,根据不同的场景需要,会有多种方式响应这个请求,下面是HTTP响应的常见四种响应模型:
响应类型 | 响应方式 | 示例 | 适用场景 |
---|---|---|---|
单进程I/O模型 | 服务端开启一个进程,一个进程仅能处理一个请求,并且对请求顺序处理; | Apache | 少量访问,并发量较少,不频繁访问的博客或静态资源服务 |
多进程I/O模型 | 服务端并行开启多个进程,同样的一个进程只能处理一个请求,这样服务端就可以同时处理多个请求; | 多核Apache服务器 | 稍大规模访问 |
复用I/O模型 | 服务端开启一个进程,但是呢,同时开启多个线程,一个线程响应一个请求,同样可以达到同时处理多个请求,线程间并发执行; | Nginx | (百万级)频繁且同时访问量较大的服务请求 |
复用多线程I/O模型 | 服务端并行开启多个进程,同时每个进程开启多个线程,这样服务端可以同时处理进程数M*每个进程的线程数N个请求。 | EP | 同时访问量(千万级)超大,视频网站、直播、购物等 |
注:以上是结合本人自身实际经验及场景分析总结。
四、HTTP协议版本区别
当前主要应用的协议版本是HTTP/1.1版本。
HTTP版本 | 主要功能 | 备注 |
---|---|---|
HTTP/0.9 | HTTP协议的最初版本,功能简陋,仅支持请求方式GET,并且仅能请求访问HTML格式的资源。 | 历史 |
HTTP/1.0 | 在0.9版本上,增加了请求方式POST和HEAD ;HTML格式,根据Content-Type可以支持多种数据格式,即MIME多用途互联网邮件扩展,例如text/html、image/jpeg等;同时也开始支持cache ,即客户端在规定时间内访问统一网站,直接访问cache即可。缺点:不支持keepalive:工作方式是每次TCP连接只能发送一个请求,当服务器响应后就会关闭这次连接,下一个请求需要再次建立TCP连接。 | 过去 |
HTTP/1.1 | 解决了1.0版本的keepalive问题,1.1版本加入了持久连接,一个TCP连接可以允许多个HTTP请求; 加入了管道机制,一个TCP连接同时允许多个请求同时发送 ,增加了并发性;新增了请求方式PUT、PATCH、DELETE 等。但是还存在一些问题,服务端是按队列顺序处理请求的,假如一个请求处理时间很长,则会导致后边的请求无法处理,这样就造成了队头阻塞的问题;同时HTTP是无状态的连接,因此每次请求都需要添加重复的字段,降低了带宽的利用率。 | 现在ing |
HTTP/2.0 | 为了解决1.1版本利用率不高的问题,提出了HTTP/2.0版本。增加双工模式,即不仅客户端能够同时发送多个请求,服务端也能同时处理多个请求,解决了队头堵塞的问题;HTTP请求和响应中,状态行和请求/响应头都是些信息字段,并没有真正的数据,因此在2.0版本中将所有的信息字段建立一张表,为表中的每个字段建立索引,客户端和服务端共同使用这个表,他们之间就以索引号来表示信息字段,这样就避免了1.0旧版本的重复繁琐的字段,并以压缩的方式传输,提高利用率。 另外增加服务器推送的功能,即不经请求服务端主动向客户端发送数据。 | 未来 |