前言
一周或两周一更美好的计划是用来打破的,由于前段眼疾的情况已经有三周没跟大家分享些干货。身体是革命的本钱,还望老码猿们在加班的时候也要注意身体健康。
作为一位称职的码农,在这三周养眼的时间里也不忘学习,系统的去了解了下我们大家都熟悉而有陌生的HTTP协议
我相信在我们码农当中还有很大一部分Web应用程序开发者并不了解支撑Web基础的HTTP协议
。接下来我们从以下几点去熟悉了解HTTP协议
-
HTTP
的诞生 -
HTTP
如何作用于客户端与服务器端的通信 -
HTTP
请求结果状态码 - 安全的
HTTPS
HTTP的诞生
HTTP全称为HyperText Transfer Protocol超文本传输协议(超文本转移协议)。
80年代HTTP的最初是致力于全世界的研究者们进行知识共享。随后的一段时间的发展,一级网景通信公司与微软的浏览器大战是得HTTP标准协议逐步被确立。目前主流的HTTP协议版本是1997年1月公布的HTTP/1.1 版本。为了让大家深刻回忆下HTTP/1.1 在我们web程序中的存在请看上期Spring Boot 启动原理解析(二) Tomcat 启动详解中的一图
HTTP如何作用于客户端与服务器端的通信
在了解HTTP如何进行通信时有几个TCP/IPD协议族是需要进行了解的:
1. 应用层:决定了向用户提供应用服务时通信的活动
2. 传输层:对上层应用层提供出于网络连接中的两台计算机之间的数据传输
3. 网络层:处理在网络上流动的数据包
4. 数据链路层:处理连接网络的硬件部分
HTTP协议是利用TCP/IP协议族进行网络通信,会通过分层顺序与对方进行通信。
我们以一个网络请求为例子,首先作为发送端的客户端在应用层(HTTP协议)发起了一个WEB页面的HTTP请求。接着传输层(TCP协议)把应用层接收到的数据(HTTP请求报文)进行分割,并在各个报文上打上标记序号及端口号后转发给网络层。网络层(IP协议)增加接收目的地的MAC地址后转发给链路层,最后有链路层对外部网络发送请求报文。接收端的服务器在链路层收到数据,按序向上层发送,一直到应用层。请求的响应过程则以服务器端为起点发送数据一直到客户端接收到传输的数据。这样一个完整的HTTP请求就完成了。
发送端在层与层之间的数据传输时,每经过一层时必定会被打上一个该层所属的首部信息。反之,接收端在层与层之间传输数据时,没经过一层时都会把对应的首部信息删了。
从上文的HTTP通信解读过程我们知道没有任环节进行通信状态的保存,故此HTTP是一种无状态协议。为实现保存通信状态功能则需引入Cookie技术。
HTTP请求结果状态码
状态码描述的是服务器返回的请求结果。状态码的类别有
- 1xx
Infomational(信息性状态码)
接收的请求正在处理 - 2xx
Success(成功状态码)
请求正常处理完毕 - 3xx
Redirection(重定向状态码)
- 4xx
Client Error(客户端错误状态码)
- 5xx
Seriver Error(服务器错误状态码)
2xx的响应结果表明请求被正常处理了。
3xx重定向 响应结果表明浏览器需要执行某些特殊的处理以正确处理请求。301 Moved Permannetly
永久性重定向,请求的资源已被分配了新的URI;302 Found
临时性重定向,请求的资源已被分配了新的URI;
4xx客户端错误 表明客户端是发生错误原因所在。400 Bad Request
请求报文中存在错误;403 Forbidden
服务器拒绝请求资源的访问;404
服务器上未找到请求资源。
5xx服务器错误 表明服务器本身发生错误
安全的HTTPS
HTTP + 加密 + 认证 + 完整性保护 = HTTPS
事物皆具两面性,HTTP本身也有不足之处
- 通信使用明文传输,内容会有被窃听的风险
- 不验证通信方的身份,有可能遭遇伪装
- 无法证明报文的完整性,所以报文有可能已被篡改
如果在HTTP协议通信过程中使用未加密的明文,比如WEB页面进行登录操作时就会面临被窃听以及私密信息暴露的风险;对于HTTP来说,服务器跟客户端都无法确认通信方,因此很有可能并不是和原本预想的通信方在实际的通信。
为了统一的解决上述问题,需要在HTTP上再加入加密处理和认证等机制。通常的将加了加密及认证机制的HTTP称为HTTP(HTTP secret)
。
The last
三人行,必有我师。在给大家分享干货的同时,才疏学浅还望大家大刀予以斧正。也欢迎关注我的掘金或简书,名称为柴码