通信技术|从起源到发展 详说HTTP从1到3的演变( 二 )


第三部分:空行,请求头部后面的空行是必须的
即使第四部分的请求数据为空,也必须有空行 。
第四部分:请求数据也叫主体,可以添加任意的其他数据 。
这个例子的请求数据为空 。
响应消息
一般情况下,服务器接收并处理客户端发过来的请求后,会返回一个 HTTP 的响应消息 。
HTTP 响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文 。
例子
1 < HTTP/1.1 200 OK2 < Accept-Ranges: bytes3 < Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform4 < Connection: keep-alive5 < Content-Length: 23816 < Content-Type: text/html7 < Date: Thu, 11 Jun 2020 16:04:33 GMT8 < Etag: "588604c8-94d"9 < Last-Modified: Mon, 23 Jan 2017 13:27:36 GMT10 < Pragma: no-cache11 < Server: bfe/1.0.8.1812 < Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/13 <14 < !DOCTYPE html>15 < !--STATUS OK--><html> <head><meta HTTP-equiv=content-type content=text/html;charset=utf-8><meta HTTP-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer>... </html>16
第一部分:状态行,由 HTTP 协议版本号、状态码、状态消息三部分组成 。
第一行为状态行,(HTTP/1.1)表明 HTTP 版本为 1.1 版本,状态码为 200,状态消息为(ok)
第二部分:消息报头,用来说明客户端要使用的一些附加信息
第二行和第三行为消息报头 。
Date:生成响应的日期和时间;Content-Type:指定了 MIME 类型的 HTML(text/html),编码类型是 UTF-8
第三部分:空行,消息报头后面的空行是必须的
第四部分:响应正文,服务器返回给客户端的文本信息 。
空行后面的 HTML 部分为响应正文 。
状态码
状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:

  • 1xx:指示信息–表示请求已接收,继续处理
  • 2xx:成功–表示请求已被成功接收、理解、接受
  • 3xx:重定向–要完成请求必须进行更进一步的操作
  • 4xx:客户端错误–请求有语法错误或请求无法实现
  • 5xx:服务器端错误–服务器未能实现合法的请求
安全性与 HTTPS
HTTP 的诞生是为了解决信息传递和共享的问题,并没有考虑到互联网高速发展后面临的安全问题 。
一般来说 HTTP 从 TCP 三次握手后,便开始了数据传输 。由于 HTTP 本身以明文形式来传输数据,并不具备任何数据加密、身份校验的机制 。同时下层协议并不对数据安全性、保密性提供保证 。所以在网络传输的过程中,任意节点的第三方都可以随意劫持流量、篡改数据或窃取信息 。
HTTP 无法确保数据的保密性、完整性和真实性,已经不能适应现代互联网应用的安全需求 。
随着 Web 的日益壮大,HTTP 的使用呈巨额增长趋势,对信息安全的需求也愈来愈迫切,SSL(Secure SocketsLayer,安全套接层)应运而生 。
当对于安全需求,首先想到的就是对信息进行加密 。SSL,安全套接层,顾名思义是在 TCP 上提供的安全套接字层 。其位于应用层和传输层之间,应用层数据不再直接传递给传输层而是传递给 SSL 层,SSL 层对从应用层收到的数据进行加密,利用数据加密、身份验证和消息完整性验证机制,为网络上数据的传输提供安全性保证 。HTTPS 便是指 Hyper Text Transfer Protocol over SecureSocket Layer 。
谈到具体实施上,业内通常采用的一般有对称加密和非对称加密 。采用何种方式进行加密?如何判断服务器未被篡改?如何传递加密密钥?带着这样的问题,我们来看看 HTTPS 的工作流程 。
1、客户端发起 HTTPS 请求
这个没什么好说的,就是用户在浏览器里输入一个 HTTPS 网址,然后连接到 server 的 443 端口 。
2、服务端的配置
采用 HTTPS 协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请,区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面(Let‘s Encrypt 就是个不错的选择,免费的 SSL 证书) 。
这套证书其实就是一对公钥和私钥,如果对公钥和私钥不太理解,可以想象成一把钥匙和一个锁头,只是全世界只有你一个人有这把钥匙,你可以把锁头给别人,别人可以用这个锁把重要的东西锁起来,然后发给你,因为只有你一个人有这把钥匙,所以只有你才能看到被这把锁锁起来的东西 。
3、传送证书
这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间等等 。
4、客户端解析证书
这部分工作是有客户端的 TLS 来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题 。
如果证书没有问题,那么就生成一个随机值,然后用证书对该随机值进行加密,就好像上面说的,把随机值用锁头锁起来,这样除非有钥匙,不然看不到被锁住的内容 。


推荐阅读