我们已经学习了HTTP中很多知识,尤其是一些重要的首部字段,本篇文章简单做下回顾,并且小小地做下总结,好继续下一阶段的学习。
我们将系列文章串联起来,来看看我们到底学习了哪些HTTP首部字段。
第一回
《四十八、应用层篇-web概述》,本文是一篇致敬web之父:Tim Berners-Lee爵士的文章。
Tim Berners-Lee爵士有一个美好的设想:他希望能够有一种工具,让大家能够不管身处何地,都能够通过计算机网络去简单快捷地访问其他人的数据。
进一步地,Tim Berners-Lee爵士构想:互联网应该把众多的计算机资料库都联接起来,成为一个可供所有人共同使用的网络。
经过不断的摸索和修改,蒂姆终于在1990年成功开发出世界上第一个Web服务器和第一个Web客户机,蒂姆为他的发明正式定名为World Wide Web,即我们熟悉的WWW。
1993 年4月30日,CERN宣布开放万维网给所有人使用,从此开启了互联网的时代大门。
第二回
《四十九、应用层篇-实战之当virtualbox遇上Centos7》,主要介绍了如何用虚拟机安装linux系统,属于扩展知识。
第三回
《五十、应用层篇-实战之基于Tomcat这只猫做点事~》,本文运行了一个简单的前后端分离项目,实现了最简单的登录和注册功能,感受实际项目搭建的过程。
第四回
《五十一、应用层篇-HTTP协议报文前世今生》,本文介绍了HTTP协议的发展史。
进化史:HTTP/0.9版本–》HTTP/1.0版本–》HTTP/1.1版本–》HTTP/2–》HTTP/3版本
HTTP/1.1和HTTP/2是现在,HTTP/3则是未来。
我们应该去了解每一个版本出现的意义和本身的缺陷,从整体上把握HTTP协议。
第五回
《五十二、应用层篇-HTTP协议报文整体长什么样》,本文介绍了HTTP协议请求和响应报文的基本结构。
请求报文和响应报文都由四部分组成:起始行、头部、空行以及实体。
第六回
《五十三、应用层篇-HTTP之内容数据协商》,本文开始,开始接触第一批HTTP首部字段。
本篇文章所介绍的是数据协商问题,具体点是在HTTP协议中,如何来协商客户端和服务端的数据类型、数据压缩格式、语言以及编码问题。
-
数据类型表示实体数据的内容是什么,使用的是 MIME type,相关的头字段是 Accept和 Content-Type;
-
数据编码表示实体数据的压缩方式,相关的头字段是 Accept-Encoding 和 Content-Encoding;
-
语言类型表示实体数据的自然语言,相关的头字段是 Accept-Language 和 Content-Language;
-
字符集表示实体数据的编码方式,相关的头字段是 Accept-Charset和 Content-Type;
第七回
《五十四、应用层篇-HTTP之连接管理》,本文主要讨论的是”长连接“问题。
涉及的核心首部字段是:Connection: keep-alive
在 HTTP/1.1 中的连接都会默认启用长连接,除非显示使用 Connection:close 首部禁用长连接。
第八回
《五十五、应用层篇-实现一个简易的web服务器》,本文用JAVA语言实现了一个简易的web服务器,为下一篇文章的验证做准备。
第九回
《五十六、应用层篇-HTTP之分块传输》,本文探讨的是大文件传输问题。
在无法使用压缩解决问题的情况下,大文件需要拆分为小文件传输。
响应报文里用头字段“Transfer-Encoding: chunked”来表示,意思是报文里的 body 部分不是一次性发过来的,而是分成了许多的块(chunk)逐个发送。
此外,请求头或响应头中有一个字段是:Content-Length字段,标识携带数据是多少字节大小,此字段必须准确,否则会引起一些问题。
第十回
《五十七、应用层篇-HTTP之重定向》,本文主要讨论了301和302两个状态码。
301是永久重定向,302是临时重定向,此外还有很多状态码,比如200、500等等。
第十一回
《五十八、应用层篇-HTTP之中介》,本文核心讨论的是存在代理的情况。
我们如何知道通信链路中是否经过了中间代理呢?
可以通过 Via 这个通用字段,请求头或响应头里都可以出现。每当报文经过一个代理节点,代理服务器就会把自身的信息追加到字段的末尾,就像是经手人盖了一个章。
此外,为了解决如何获取客户端真实IP这个实际问题,做了探讨和实践,结论如下:
-
当你确定客户端和服务端之间是直连的,无任何代理,那么就直接使用request.getRemoteAddr()。
-
当架构是客户端—》nginx反向代理—》真实应用,无其他任何组件,并且nginx的配置也是如此配置的话,那么就可以使用X-Real-IP。
-
但是当你不清楚客户端和真实应用之间到底经历了多少代理时,请使用X-Forwarded-For获取。
核心涉及两个重要的HTTP头字段:X-Forwarded-For和X-Real-IP。
第十二回
《五十九、应用层篇-HTTP之Session、Cookie和Token》,本文探讨了如何让无状态的HTTP协议有记忆。
响应报文首部中通过Set-Cookie字段,浏览器自动会将里面的信息写入cookie保存下来。
-
首先,客户端会发送一个http请求到服务器端
-
服务器端接受客户端请求后,建立一个session对象,并发送一个http响应到客户端,这个响应头,其中就包含Set-Cookie头部。该头部包含了sessionId:Set-Cookie:JSESSIONID=XXXXXXX
-
在客户端发起的第二次请求,假如服务器给了set-Cookie,浏览器会自动在请求头中添加cookie
-
服务器接收请求,分解cookie,验证信息,核对成功后返回response给客户端
第十三回
《六十、应用层篇-HTTP之URL编码》,本文介绍了编码的历史,最后顺便介绍了URL编码是怎么一回事。
与计算机打交道,字符编码问题是永远需要面对的,从编码的概念、字符集进化史一直说到URL编码,大致理清这些基本概念。
第十四、十五回
《六十一、应用层篇-HTTP之缓存控制(上)》和《六十二、应用层篇-HTTP之缓存控制(下)》,两篇文章主要探讨了缓存控制机制。
涉及到的核心首部字段是:Cache-Control
-
Cache-Control: max-age=30 :缓存过期时间为30秒
-
Cache-Control: no-store :直接禁止游览器缓存数据,每次用户请求该资源,都会向服务器发送一个请求,每次都会下载完整的资源。
-
Cache-Control: no-cache :它的字面含义容易与 no_store 搞混,实际的意思并不是不允许缓存,而是可以缓存,但在使用之前必须要去服务器验证是否过期,是否有最新的版本
还提到了条件请求,涉及到的首部字段有:
-
第一次请求的响应头带上某个字段:Last-Modified或者Etag
-
后续请求则会带上对应的请求字段:If-Modified-Since或者If-None-Match
第十六回
《六十三、应用层篇-网络抓包神器:Wireshark》,本篇详细介绍抓包神器:WireShark。
会抓包是必备技能,能分析报文是更加重要的技能。
展望
纵观HTTP/1.1几十个首部字段,我们会发现,重要的、使用频次较高的字段已经基本都尽收囊中,读者朋友们大可在遇到时再去理解其含义,相信都比较好理解了。
因此本文就不像普通HTTP文章复制粘贴很多字段逐个介绍了,关于HTTP协议,就要告一段落了,下一篇章属于“高级”篇,我们共同来探讨HTTPS、HLS、CDN等等有趣的事情,也将是较为艰难的部分。
读者朋友们,下篇见。
原文始发于微信公众号(幕后哈土奇):六十四、应用层篇-HTTP协议总结和展望
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/113207.html