-
这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战
-
终于又迎来了掘金的新一轮更文挑战,还有两个月就要过年了,一般到了年底就会进行年底总复盘,为来年制定计划和目标,同样的知识体系也很有必要进行整理。很多知识在脑海中就像小时候买了新书后束之高阁,已经布满了灰尘甚至没有开封,只是只是有这个东西。或者是曾经很喜欢,后来慢慢的遗忘在角落。所以,这个月,开启一个新的话题:那些年被忽略的知识点。
-
首先,从网络原理开始。
HTTP
- 超文本传输协议。
- 面向应用层的协议。
- 请求/相应型的协议。
HTTP一般建立在传输层协议上,通常发生在TCP/IP连接上,默认端口是TCP80,当然其他端口也可以使用,同时也不排除HTTP协议会在其他协议之上被实现,HTTP是期望一个可靠的传输,因此任何提供这种保证的协议都可以被使用。- 我们通常说的
HTTP,一般说的都是HTTP/1.1,HTTP后的斜杠后加一个数字。这个数字就是HTTP的版本号。
关于1.1
HTTP的第一个版本是0.9,是一种互联网原始数据传输服务的简单协议。- 1.0版本进一步完善了
HTTP,允许消息以类似MIME消息的格式传送,对传输数据的元信息和对请求/相应语义进行了修饰。 - 1.1的出现则是补充了1.0中缺失的:分层代理、缓存以及持久连接和虚拟主机等部分,并且这个版本的规范更严格。
总体流程
- 客户端给服务器发送请求的格式是一个请求方法(
request method),URI,协议版本号,一个包含请求的修饰符,客户端信息和可能是消息住的类MIME的消息。 - 服务器对请求段发送响应的格式是一个状态行,然后跟随一个包含服务器信息、试题原信息和可能的实体主题内容的类
MIME的消息。其中,状态行包含消息的协议版本号和 一个状态码。
关于用户代理(User-Agent)
- 初始化请求的客户端程序。常见的如浏览器、编辑器、爬虫或其他终端工具
- 大部分的
HTTP通信是由用户代理发起的。 - 最简单的请求是用户通过
UA和源服务器的单一连接(比如日常的本地调试) - 也有可能在请求/响应链中出现一个或多个middlewar(这里的原文是
middlewares,ps:现在把middleware都翻译成中间件,我觉得在此处翻译成中间件不太可,所以就直接用英语单词了)。 - 常见的
middleware有三种:代理、网关和隧道。
代理(proxy)
- 代理是一种转发代理(
agent)。 - 既可以担当客户端的角色,也可以担当服务器的角色。
- 代理客户端时,接收绝对URI请求,重写全部或部分消息,然后把格式化后的请求发送到
URI指定的服务器上。 - 透明代理(
proxy)需要代理认证和代理识别,而不修改请求和响应,非透明代理(proxy)需修改请求或响应,以便为用户代理提供附加服务,包括注释服务、媒体类型转换、协议简化或者匿名过滤等。 - 除非透明行为或非透明行为被显式地声明,否则,
HTTP代理(proxy)即是透明代理也是非透明代理。
网关(gateway)
- 网关是一种接收代理(
agent),充当服务器之上的层,必要时它会把请求翻译成为下层服务器的协议。
隧道(tunnel)
- 隧道是连接两个连接(
connection)的一种盲目中继的middleware,就算隧道处于活动状态,也不能认为是本次HTTP通信的参与者,虽然HTTP请求可能也对隧道进行了初始化,当两端的中继连接都关闭的时候,隧道不再存在。 - 隧道不改变消息,充当两个连接质检的中继点,用于通信中需要穿过
middleware,甚至middleware不能理解其中的消息的时候(比如防火墙)。
关于缓存
- 通信中任何非隧道成员都可能采用一个内部缓存来处理请求,如果沿着链的成员有已经缓存的请求,请求/响应链所消耗的时间就会大大缩短。
总结
- 以上就是
HTTP协议中比较忽略的术语解释,希望在看完本文中对HTTP协议有更深的理解。 - 欢迎留言讨论。