那个说了很多遍的http协议
Posted 了解这个有多难
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了那个说了很多遍的http协议相关的知识,希望对你有一定的参考价值。
超文本传输协议(英语:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。注意是应用层的协议,网络模型的那几层是否还有影响?
我们现在说的http基本都是基于1.1版本的协议,互联网上也有很多网站开始往2.0版本过渡。后面会简要说下区别。
设计HTTP最初的目的是为了提供一种发布和接收html页面的方法。通过HTTP请求的资源由统一资源标识符(Uniform Resource Identifiers,URI)来标识。
HTTP协议最早可以追溯到1989年,其中最著名的是1999年6月公布的 RFC 2616,定义了HTTP协议中现今广泛使用的一个版本——HTTP 1.1。HTTP/2标准于2015年5月以RFC 7540正式发表,取代HTTP 1.1成为HTTP的实现标准。
超文本传输协议已经演化出了很多版本,它们中的大部分都是向下兼容的。
HTTP/0.9
已过时。只接受GET一种请求方法,没有在通讯中指定版本号,且不支持请求头。由于该版本不支持POST方法,因此客户端无法向服务器传递太多信息。
HTTP/1.0
这是第一个在通讯中指定版本号的HTTP协议版本,一些老的web可能还在采用,目前差不多也早已过时。
HTTP/1.1
持久连接被默认采用,并能很好地配合代理服务器工作。还支持以管道方式在同时发送多个请求,以便降低线路负载,提高传输速度。
HTTP/1.1相较于HTTP/1.0协议的区别主要体现在:
缓存处理
带宽优化及网络连接的使用
错误通知的管理
消息在网络中的发送
安全性及完整性
最为重要的几个比如在http1.1中增加的connect方法,有没有想过为什么可以通过http代理来访问https的网站吗?https不是加密的吗?这个connect起了很重要的作用!
另外一个增加的Connection:keep-alive,持久连接,这个相对于http1.0起了很大的优化作用
HTTP/2
这个应该是这几年的各大网站最终趋势,传输效率更高,HTTP2最为突出的几个优势为:
在建立连接后,一次的请求与响应,视为流,
在建立连接后,多路复用,看下面的图,是双向流
数据传输分为二进制帧片段
借用一副图来表示各自之间的关系
http1.0时代,请求一次,响应一次,断开一次
http1.1时代,请求一次,响应一次,可以暂时不断开(keep-alive)
http2.0时代,请求不在是单向,一个tcp链接上很明细,效率高了很多
挑两个站看看
curl -v -I https://www.baidu.com | less
很明显,还在http1.1的世界中
curl -v -I https://www.jd.com | less
很明显,已经进入http2.0时代
再说一个题外话:
还知道被广泛使用的反向代理工具nginx吗,或者说目前世界上使用量也还不少的apache,tomcat。这些类似作用的应用都与http的渊源很深。
早些年,nginx,apache,tomcat不同的版本都被爆过很多通用漏洞,甚至是0day。所以很多的系统管理员在启动nginx,apache,tomcat的时候会选择隐藏版本号,当网络上工作无休止的扫描器在刺探不到对应版本号的时候可能会放弃或忽略,从而应用避免被攻击!
但是,隐藏版本号就会不被发觉吗?聪明的人根据nginx,apache这些软件对于不同版本的http协议请求时而得到的反应不同最终确定目标是什么应用,什么版本!
比如,nginx版本假设为0.9.9 ,该版本存在通用漏洞。
恶意攻击人员通过研究早已知道,对于发送畸形的http0.9协议,nginx 0.9.9这个版本始终都会返回1(假设),但是他不会说出来。那么虽然nginx版本号被隐藏,或者管理员故意配置一个错误的2.9.9版本。但是恶意攻击人员只需要一个畸形http请求,就能肯定后方是nginx 0.9.9版本,不管怎么隐藏,这种方式可以应用到其他很多类似案例。
另外http协议本身其实是很松散的,如果你捕获了http协议,随便改点包,加点空格什么的,它可能都能给你容错。
⬇︎⬇︎⬇︎后续更新,长按关注⬇︎⬇︎⬇︎
以上是关于那个说了很多遍的http协议的主要内容,如果未能解决你的问题,请参考以下文章