带你一步步解析 HTTP

我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉 。
最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的 , 我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便 。我就想为什么家里人不让上网 , 我的同学 xxx 家里有网,每次一提这个就落一通批评:xxx上xxx什xxxx么xxxx网xxxx看xxxx你xxxx考xxxx的xxxx那xxxx点xxxx分 。虽然我家里没有上网,但是此时互联网已经在高速发展了,HTTP 就是高速发展的一个产物 。
认识 HTTP
首先你听的最多的应该就是 HTTP 是一种 超文本传输协议(Hypertext Transfer Protocol),这你一定能说出来,但是这样还不够,假如你是大厂面试官 , 这不可能是他想要的最终结果 , 我们在面试的时候往往把自己知道的尽可能多的说出来 , 才有和面试官谈价钱的资本 。那么什么是超文本传输协议?
超文本传输协议可以进行文字分割:超文本。
max:指示在关闭连接之前可以在此连接上发送的最大请求数 。
上述 HTTP 代码的意思就是限制最大的超时时间是 5s 和 最大的连接请求是 997 个 。
Server
服务器标头包含有关原始服务器用来处理请求的软件的信息 。
应该避免使用过于冗长和详细的 Server 值 , 因为它们可能会泄露内部实施细节 , 这可能会使攻击者容易地发现并利用已知的安全漏洞 。例如下面这种写法
Server: Apache/2.4.1 (Unix)
Set-Cookie
Cookie 又是另外一个领域的内容了,我们后面文章会说道 Cookie,这里需要记住 Cookie、Set-Cookie 和 Content-Disposition 等在其他 RFC 中定义的首部字段,它们不是属于 HTTP 1.1 的首部字段 , 但是使用率仍然很高 。
Transfer-Encoding
首部字段 Transfer-Encoding 规定了传输报文主体时采用的编码方式 。
Transfer-Encoding: chunked
HTTP /1.1 的传输编码方式仅对分块传输编码有效 。
X-Frame-Options
HTTP 首部字段是可以自行扩展的 。所以在 Web 服务器和浏览器的应用上,会出现各种非标准的首部字段 。
首部字段 X-Frame-Options 属于 HTTP 响应首部,用于控制网站内容在其他 Web 网站的 Frame 标签内的显示问题 。其主要目的是为了防止点击劫持(clickjacking)攻击 。
下面是一个响应头的汇总,基于 HTTP 1.1
非 HTTP/1.1 首部字段
在 HTTP 协议通信交互中使用到的首部字段,不限于 RFC2616 中定义的 47 种首部字段 。还有 Cookie、Set-Cookie 和 Content-Disposition 等在其他 RFC 中定义的首部字段,它们的使用频率也很高 。这些非正式的首部字段统一归纳在 RFC4229 HTTP Header Field Registrations 中 。
End-to-end 首部和 Hop-by-hop 首部
HTTP 首部字段将定义成缓存代理和非缓存代理的行为,分成 2 种类型 。
一种是 End-to-end 首部 和 Hop-by-hop 首部
End-to-end(端到端) 首部
这些标头必须发送给消息的最终接收者 : 请求的服务器,或响应的客户端 。中间代理必须重新传输未经修改的标头 , 并且缓存必须存储这些信息
Hop-by-hop(逐跳) 首部
分在此类别中的首部只对单次转发有效,会因通过缓存或代理而不再转发 。
下面列举了 HTTP/1.1 中的逐跳首部字段 。除这 8 个首部字段之外,其他所有字段都属于端到端首部 。
Connection、Keep-Alive、Proxy-Authenticate、Proxy-Authorization、Trailer、TE、Transfer-Encoding、Upgrade
HTTP 的优点和缺点HTTP 的优点简单灵活易扩展
HTTP 最重要也是最突出的优点是 简单、灵活、易于扩展 。
HTTP 的协议比较简单,它的主要组成就是 header + body,头部信息也是简单的文本格式,而且 HTTP 的请求报文根据英文也能猜出来个大概的意思,降低学习门槛,能够让更多的人研究和开发 HTTP 应用 。
所以,在简单的基础上,HTTP 协议又多了灵活 和 易扩展 的优点 。
HTTP 协议里的请求方法、URI、状态码、原因短语、头字段等每一个核心组成要素都没有被制定死 , 允许开发者任意定制、扩充或解释 , 给予了浏览器和服务器最大程度的信任和自由 。
应用广泛、环境成熟
因为过于简单,普及,因此应用很广泛 。因为 HTTP 协议本身不属于一种语言,它并不限定某种编程语言或者操作系统,所以天然具有跨语言、跨平台的优越性 。而且 , 因为本身的简单特性很容易实现,所以几乎所有的编程语言都有 HTTP 调用库和外围的开发测试工具 。
随着移动互联网的发展,HTTP 的触角已经延伸到了世界的每一个角落,从简单的 Web 页面到复杂的 JSON、XML 数据,从台式机上的浏览器到手机上的各种 APP、新闻、论坛、购物、手机游戏,你很难找到一个没有使用 HTTP 的地方 。
【带你一步步解析 HTTP】无状态
无状态其实既是优点又是缺点 。因为服务器没有记忆能力,所以就不需要额外的资源来记录状态信息,不仅实现上会简单一些 , 而且还能减轻服务器的负担,能够把更多的 CPU 和内存用来对外提供服务 。
HTTP 的缺点无状态
既然服务器没有记忆能力 , 它就无法支持需要连续多个步骤的事务操作 。每次都得问一遍身份信息,不仅麻烦,而且还增加了不必要的数据传输量 。由此出现了 Cookie 技术 。
明文
HTTP 协议里还有一把优缺点一体的双刃剑,就是明文传输 。明文意思就是协议里的报文(准确地说是 header 部分)不使用二进制数据,而是用简单可阅读的文本形式 。
对比 TCP、UDP 这样的二进制协议,它的优点显而易见,不需要借助任何外部工具,用浏览器、Wireshark 或者 tcpdump 抓包后,直接用肉眼就可以很容易地查看或者修改 , 为我们的开发调试工作带来极大的便利 。
当然缺点也是显而易见的,就是不安全,可以被监听和被窥探 。因为无法判断通信双方的身份,不能判断报文是否被更改过 。
性能
HTTP 的性能不算差,但不完全适应现在的互联网,还有很大的提升空间 。
参考资料:
https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Technical_overview
《极客时间》- 透视 HTTP 协议
https://developer.mozilla.org/en-US/docs/Web/HTTP
https://baike.baidu.com/item/WEB服务器/8390210?fr=aladdin
https://baike.baidu.com/item/内容分发网络/4034265
https://baike.baidu.com/item/HTML/97049?fr=aladdin
https://www.jianshu.com/p/3dd8f1879acb
《计算机网络-自顶向下方法》
《图解 HTTP》
HTTP协议的内容协商
https://www.w3school.com.cn/tags/att_form_accept_charset.asp
以上就是朝夕生活(www.30zx.com)关于“带你一步步解析 HTTP”的详细内容 , 希望对大家有所帮助!

猜你喜欢