浅析HTTP协议常识

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/AMimiDou_212/article/details/87284203

浅析HTTP协议常识


更新时间:3:49:40 PM 2019-2-14

什么是HTTP?

HTTP–Hyper Text Transfer Protocol(超文本传输协议)是一种建立在TCP上的无状态连接,基本访问流程是客户端发送一个HTTP请求(URL-统一资源定位符),确定客户端想要访问的服务器的资源和请求的动作,服务端收到请求之后,根据请求做出相应的动作访问服务器资源,最后通过发送HTTP响应把结果返回给客户端。这就是一次简单的HTTP访问过程,从一个请求的开始到一个服务响应返回结果称为事务,服务器会在日志中记录事物的访问信息。

一、HTTP请求是什么?

HTTP请求是客户端往服务端发送请求动作,告知服务器自己的要求。

HTTP请求由状态行、请求头、请求正文三部分组成:

状态行:包括请求方式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旧版本的重复繁琐的字段,并以压缩的方式传输,提高利用率。 另外增加服务器推送的功能,即不经请求服务端主动向客户端发送数据。 未来

猜你喜欢

转载自blog.csdn.net/AMimiDou_212/article/details/87284203