浅析HTTP协议常识

更新时间: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表示服务端出现错误

常见状态码的含义

状态码描述
200OK 请求成功
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.9HTTP协议的最初版本,功能简陋,仅支持请求方式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旧版本的重复繁琐的字段,并以压缩的方式传输,提高利用率。 另外增加服务器推送的功能,即不经请求服务端主动向客户端发送数据。未来
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值