(2000详细解析HTTPS的工作原理))
一、前文总结请求首行方法 url 版本号有这三个元素。请求头就是键值对空行正文在空行后面才是正文响应首行版本号 状态码 状态码描述响应头键值对空行正文url部分的案例: 协议名://ip地址(域名):端口号/路径查询字符串这里面查询字符串是自定义的就像age20这样的字符串。方法有GETPOSTPUTDELETEGET 和 POST 的区别是1.语义上。2.GET经常把数据放到 url 的query string 中POST 经常把数据放到 body 中。请求头的关键属性Host是访问的服务器的主机IP和端口Content-Lengthbody的长度单位是字节Content-Type是body的数据格式例如css、html、json、图片...Referer当前页面是从哪个页面跳转过来的Cookie是浏览器在本地存储数据的一种方式是通过键值对来存储的服务器通过Set-Cookie把Cookie返回给浏览器浏览器保存好这个Cookie后续服务器给服务器发送请求的时候都会带上这个Cookie就免去再次验证用户身份的环节了。按照域名为维度以键值对的方式来存储数据。Cookie中的内容都是程序员自定义的。就像实现登陆身份验证的这个环节。二、状态码2开头的是成功3开头的是重定向4开头的是用户端操作错误5开头是服务器错误。状态码表示了响应的结果是正确还是错误出错是什么原因。正确使用状态码能让我们在发生错误的时候通过状态码可以快速找到哪里的业务逻辑错误。200 OK是最常见的状态码表示成功使用 filddler 抓包抓取的很多都是这个状态码。4XX404 访问的资源没有找到一般都是用户输入的 url 也就是网址发生错误或者是访问了该网址下没有的资源。urlIP 定位到主机port 定位到程序path 定位到程序管理的资源如果 path 访问的是该服务器上没有的资源那么就会出现404 这个状态码。5XX服务器出现错误还有服务器处理逻辑的代码抛出异常但是你没有 catch 到异常就会抛出这个5XX的状态码。3XX是重定向就是你去访问服务器 A服务器 A 让你去找服务器 B这时候你访问服务器 A就去访问服务器 B了这时候就是重定向。这时候如果要迁移新的域名这时候旧域名就可以使用重定向来让访问旧域名的用户跳转到新域名新服务器上。三、http请求HTTP请求本是上就是TCP请求只要构造的 字符串复合 HTTP 协议格式就可以写入到TCP的socket中。Postman这样的工具就可以构造HTTP请求可以使用这个工具来对自己的网站来进行测试。四、HTTPSHTTPS是HTTP 协议的加密协议。在原来的 HTTP 协议在进行传输的时候是非常不安全的当当前数据传输到某个路由器的时候这个路由器被黑客入侵之后就能抓取我们发送的这个数据也可以进行修改。就像你我都是一个广告的代理商这时候你那里有一条传输到广告发布商的网址那里我截取这条路径上的某个路由器把你发送的这条数据给修改成我的网址的跳转指令这时候你的广告跳转次数就和发布广告客户的手里的广告跳转次数就对不上了。为了防止上面的数据在传输的路上被修改就有了 HTTP 协议的加密格式 就是 HTTPS 协议。因为发送数据涉及加密所以接收数据就涉及解密。加密的方式有两种对称加密加密和解密是使用同一个密钥非对称加密加密使用一个密钥解密使用另一个密钥。这里存在关联关系很难让不是加密和解密双发的非法入侵者拿到数据。它的两个非对称密钥哪个密钥加密哪个密钥解密都是可以的他们都可以互相加密和解密。就是公钥加密私钥解密或者 公钥解密私钥加密。只要约定好那么就没关系。五、HTTPS 工作原理就像是http在进行网络传输的时候因为是明文进行传输所以一旦中间某个路由器被黑客入侵之后就能直接抓包获取我们当前传输的内容也可以在抓取的内容上进行修改。这就导致了我们每次传输的时候的不确定性和危险性还有透明性任何人黑入该路由器就可以进行抓包来获取我们传输的内容。为了防止那种情况我们就对http 协议进行了加密这样可以保证我们传输数据的安全性和稳定性还有隐私性。总的流程文字来说就是因为网络传输是可以被抓包抓取的所以我们客户端在所有通信过程中都要进行加密在第一次加密的时候可以使用服务器的公钥进行加密然后在进行网络传输的时候即使被黑客抓取了因为服务器的私钥是在服务器那里黑客并没有服务器私钥来进行解密就不知道客户端传输的什么信息只能抓取到一堆密文。就像下图。因为如果一直使用这种非对称加密的话那服务器使用私密解密客户端发来的请求之后使用什么方式进行加密呢如果使用私钥加密公钥解密那黑客在服务器给客户端发送响应的时候使用公钥解密就能知道响应是什么了然后因为黑客不知道私钥所以进行加密的时候就不知道使用什么密钥进行加密。如果使用公钥加密那到了客户端使用公钥解密的时候也是解密是失败的因为是非对称加密解密公钥加密就必须使用私钥解密私钥加密就必须使用公钥解密。所以到客户端之后是知道这中间的数据被篡改了。这也是很危险的。这时候为了保证第二次乃至后续的加密解密都是只有客户端和服务器知道这时候就使用非对称加密和对称解密这种方式来进行你使用两次非对称加密也是一样的。首先由客户端生成一个随机的对称加密密钥(随机密钥这里为 XXX)客户端把这个对称密钥最为数据传送给服务器在传送的时候使用服务器的公钥进行加密所以在整个传输的过程中不管黑客入侵了哪个服务器由于他是没有服务器的私钥的是无法解密这个数据就不知道里面传输的内容的。然后这个数据到服务器那里服务器使用私钥进行解密知道了客户端是使用 XXX 这个对称密钥进行加密和解密。所以后续服务器产生的响应直接使用 XXX 这个密钥进行加密而且后续客户端发送来的请求也是用 XXX 这个密钥进行解密。因为在传输这个使用哪个密钥的信息数据都是由服务器端公钥进行加密的由于黑客没有服务器的私钥就无法解密就无法知道这个数据是什么也就无法知道后续服务器和客户端是使用哪个加密方式进行加密哪个解密方式进行解密。所以后续服务器把响应数据使用 XXX 这个加密方式进行加密之后传输给客户端客户端直接使用它生成好的 XXX 这个密钥进行解密来获取服务器传输来的相应信息。