引言HTTP超文本传输协议是互联网的基石我们每天浏览网页、使用App都离不开它。然而随着网络安全问题日益突出HTTPS逐渐取代HTTP成为主流。本文将围绕HTTP的核心特性、长连接机制、HTTPS的加密原理、数字证书、DNS解析以及WebSocket等话题带你彻底搞懂这些网络基础知识。1. HTTP如何实现长连接以及什么时候生效什么是HTTP的长连接HTTP本身是应用层协议其长连接本质上是指底层的TCP长连接。TCP连接是一个双向通道可以保持一段时间不关闭。在短连接模式下每次HTTP请求都需要新建TCP连接三次握手和断开四次挥手开销很大。而长连接允许在一个TCP连接上发送多次HTTP请求显著减少延迟和资源消耗。例如浏览器请求一个HTML页面后后续的CSS、JS文件可以复用同一个TCP连接获取。如何设置长连接在HTTP/1.0中长连接默认是关闭的需要在请求头中显式添加Connection: keep-alive服务器响应时也会返回同样的头。从HTTP/1.1开始长连接成为默认行为除非指定Connection: close。长连接什么时候超时HTTP层超时服务器如Apache、Nginx可以配置keep-alive timeout表示TCP连接空闲超过该时间后关闭。TCP层超时操作系统内核参数控制TCP自身的保活探测。例如Linux中有三个参数tcp_keepalive_time连接闲置多少秒后开始探测默认7200秒。tcp_keepalive_intvl探测包发送间隔默认75秒。tcp_keepalive_probes最多发送多少个探测包未响应则断开默认9次。这些参数可以在/etc/sysctl.conf中调整。2. HTTP和HTTPS的区别HTTP是明文传输协议存在三大安全隐患窃听数据包在网络上传输可被截获。冒充无法确认通信对方是否是真实的服务器。篡改数据可能被中间人修改。HTTPS HTTP SSL/TLS即用SSL/TLS协议对数据进行加密和身份验证解决上述问题。主要区别如下特性HTTPHTTPS协议HTTPHTTP SSL/TLS默认端口80443安全性明文传输不安全加密传输安全证书不需要需要数字证书速度较快较慢加解密开销SEO无影响搜索引擎优先收录HTTPS站点3. HTTPS的工作流程公钥、私钥、数字证书HTTPS的核心是混合加密使用非对称加密安全地交换对称密钥后续通信使用对称加密提高效率。3.1 基本概念对称加密加密和解密使用同一个密钥如AES速度快但密钥分发困难。非对称加密一对密钥——公钥和私钥。公钥加密的数据只能用私钥解密私钥加密的数据只能用公钥解密用于数字签名。数字证书将公钥与网站身份绑定的电子文件由权威CA机构签发防冒充。3.2 HTTPS握手过程简化版客户端发起请求客户端浏览器向服务器发起HTTPS请求连接到443端口。服务器返回证书服务器将自己的数字证书发送给客户端证书中包含服务器的公钥、颁发机构、有效期等信息。客户端验证证书客户端用内置的CA公钥验证证书签名确认服务器身份可信。验证通过后客户端生成一个随机的对称密钥会话密钥并用证书中的公钥加密该密钥发送给服务器。服务器解密得到密钥服务器用自己的私钥解密获得对称密钥。加密通信双方使用该对称密钥进行后续数据的加密传输。关键点私钥始终由服务器保管从不传输公钥通过证书公开即使被截获也无法解密对称密钥因为只有私钥能解密。这样就实现了安全密钥交换。3.3 公钥、私钥与加密方式示意图图中公钥加密私钥解密私钥签名公钥验签。4. 数字签名与数字证书数字签名的生成过程对网站的公钥、身份信息等内容进行Hash运算得到消息摘要。CA机构用自己的私钥对消息摘要加密生成数字签名。将公钥、身份信息、数字签名组合成数字证书。证书验证过程浏览器收到证书后用CA机构的公钥解密数字签名得到原始的消息摘要。同时对证书中的公钥和身份信息进行同样的Hash运算得到新的消息摘要。对比两个摘要是否一致一致则证明证书未被篡改且确实是该CA签发。这样我们就解决了对网站的信任问题即使攻击者伪造了证书由于没有CA的私钥无法生成合法签名浏览器会发出安全警告。5. DNS解析过程当你在浏览器输入www.baidu.comDNS解析会经历以下步骤以递归查询为例浏览器缓存首先检查浏览器自身DNS缓存若有则直接返回IP。本地DNS缓存若无则向本地DNS服务器如路由器或ISP提供的发起请求本地DNS也有缓存。根域名服务器若本地DNS无记录则向根域名服务器查询根服务器返回负责.com的顶级域名服务器地址。顶级域名服务器本地DNS再向.com顶级服务器查询它返回负责baidu.com的权威域名服务器地址。权威域名服务器最后向权威域名服务器查询得到www.baidu.com的IP地址。返回并缓存本地DNS将IP返回给浏览器并缓存浏览器再根据IP发起HTTP请求。6. WebSocket和HTTP的区别和联系WebSocket是一种全双工通信协议它与HTTP的关系密切握手阶段WebSocket连接通过HTTP Upgrade机制建立请求头中包含Upgrade: websocket服务器同意后切换协议。通信模式HTTP是单向请求-响应模式客户端必须主动发起WebSocket连接建立后双方可以随时主动发送消息。连接状态HTTP默认无状态短连接WebSocket是有状态的长连接。头部开销HTTP每次请求都携带大量头部WebSocket握手时头部较大但后续通信头部极小仅2字节。适用场景HTTP适合无状态、请求-响应的场景如REST API。WebSocket适合实时性要求高的场景如在线聊天、游戏、股票推送。7. WebSocket和Socket的区别和联系Socket套接字是操作系统提供的一套网络编程接口封装了TCP/IP协议用于进程间通信。它本身不是协议而是“IP地址端口协议”的组合。WebSocket是应用层协议基于TCP专门为Web浏览器和服务器设计提供全双工通信。简单来说Socket是编程接口WebSocket是通信协议。你可以用Socket实现任何TCP/UDP应用而WebSocket则是建立在HTTP握手之上的高级协议。8. HTTP的完整请求过程以访问http://www.example.com为例DNS解析获取IP地址。TCP连接客户端与服务器建立TCP连接三次握手。发送HTTP请求客户端发送请求报文包含请求行、头部、可能的消息体。服务器处理并返回服务器处理请求返回HTTP响应报文状态行、头部、消息体。浏览器渲染浏览器解析HTML并根据其中的资源链接JS、CSS、图片等再次发起请求复用TCP连接或新建。连接关闭若为短连接服务器在响应后关闭TCP连接四次挥手若为长连接则保持一段时间。
HTTP与HTTPS整理
引言HTTP超文本传输协议是互联网的基石我们每天浏览网页、使用App都离不开它。然而随着网络安全问题日益突出HTTPS逐渐取代HTTP成为主流。本文将围绕HTTP的核心特性、长连接机制、HTTPS的加密原理、数字证书、DNS解析以及WebSocket等话题带你彻底搞懂这些网络基础知识。1. HTTP如何实现长连接以及什么时候生效什么是HTTP的长连接HTTP本身是应用层协议其长连接本质上是指底层的TCP长连接。TCP连接是一个双向通道可以保持一段时间不关闭。在短连接模式下每次HTTP请求都需要新建TCP连接三次握手和断开四次挥手开销很大。而长连接允许在一个TCP连接上发送多次HTTP请求显著减少延迟和资源消耗。例如浏览器请求一个HTML页面后后续的CSS、JS文件可以复用同一个TCP连接获取。如何设置长连接在HTTP/1.0中长连接默认是关闭的需要在请求头中显式添加Connection: keep-alive服务器响应时也会返回同样的头。从HTTP/1.1开始长连接成为默认行为除非指定Connection: close。长连接什么时候超时HTTP层超时服务器如Apache、Nginx可以配置keep-alive timeout表示TCP连接空闲超过该时间后关闭。TCP层超时操作系统内核参数控制TCP自身的保活探测。例如Linux中有三个参数tcp_keepalive_time连接闲置多少秒后开始探测默认7200秒。tcp_keepalive_intvl探测包发送间隔默认75秒。tcp_keepalive_probes最多发送多少个探测包未响应则断开默认9次。这些参数可以在/etc/sysctl.conf中调整。2. HTTP和HTTPS的区别HTTP是明文传输协议存在三大安全隐患窃听数据包在网络上传输可被截获。冒充无法确认通信对方是否是真实的服务器。篡改数据可能被中间人修改。HTTPS HTTP SSL/TLS即用SSL/TLS协议对数据进行加密和身份验证解决上述问题。主要区别如下特性HTTPHTTPS协议HTTPHTTP SSL/TLS默认端口80443安全性明文传输不安全加密传输安全证书不需要需要数字证书速度较快较慢加解密开销SEO无影响搜索引擎优先收录HTTPS站点3. HTTPS的工作流程公钥、私钥、数字证书HTTPS的核心是混合加密使用非对称加密安全地交换对称密钥后续通信使用对称加密提高效率。3.1 基本概念对称加密加密和解密使用同一个密钥如AES速度快但密钥分发困难。非对称加密一对密钥——公钥和私钥。公钥加密的数据只能用私钥解密私钥加密的数据只能用公钥解密用于数字签名。数字证书将公钥与网站身份绑定的电子文件由权威CA机构签发防冒充。3.2 HTTPS握手过程简化版客户端发起请求客户端浏览器向服务器发起HTTPS请求连接到443端口。服务器返回证书服务器将自己的数字证书发送给客户端证书中包含服务器的公钥、颁发机构、有效期等信息。客户端验证证书客户端用内置的CA公钥验证证书签名确认服务器身份可信。验证通过后客户端生成一个随机的对称密钥会话密钥并用证书中的公钥加密该密钥发送给服务器。服务器解密得到密钥服务器用自己的私钥解密获得对称密钥。加密通信双方使用该对称密钥进行后续数据的加密传输。关键点私钥始终由服务器保管从不传输公钥通过证书公开即使被截获也无法解密对称密钥因为只有私钥能解密。这样就实现了安全密钥交换。3.3 公钥、私钥与加密方式示意图图中公钥加密私钥解密私钥签名公钥验签。4. 数字签名与数字证书数字签名的生成过程对网站的公钥、身份信息等内容进行Hash运算得到消息摘要。CA机构用自己的私钥对消息摘要加密生成数字签名。将公钥、身份信息、数字签名组合成数字证书。证书验证过程浏览器收到证书后用CA机构的公钥解密数字签名得到原始的消息摘要。同时对证书中的公钥和身份信息进行同样的Hash运算得到新的消息摘要。对比两个摘要是否一致一致则证明证书未被篡改且确实是该CA签发。这样我们就解决了对网站的信任问题即使攻击者伪造了证书由于没有CA的私钥无法生成合法签名浏览器会发出安全警告。5. DNS解析过程当你在浏览器输入www.baidu.comDNS解析会经历以下步骤以递归查询为例浏览器缓存首先检查浏览器自身DNS缓存若有则直接返回IP。本地DNS缓存若无则向本地DNS服务器如路由器或ISP提供的发起请求本地DNS也有缓存。根域名服务器若本地DNS无记录则向根域名服务器查询根服务器返回负责.com的顶级域名服务器地址。顶级域名服务器本地DNS再向.com顶级服务器查询它返回负责baidu.com的权威域名服务器地址。权威域名服务器最后向权威域名服务器查询得到www.baidu.com的IP地址。返回并缓存本地DNS将IP返回给浏览器并缓存浏览器再根据IP发起HTTP请求。6. WebSocket和HTTP的区别和联系WebSocket是一种全双工通信协议它与HTTP的关系密切握手阶段WebSocket连接通过HTTP Upgrade机制建立请求头中包含Upgrade: websocket服务器同意后切换协议。通信模式HTTP是单向请求-响应模式客户端必须主动发起WebSocket连接建立后双方可以随时主动发送消息。连接状态HTTP默认无状态短连接WebSocket是有状态的长连接。头部开销HTTP每次请求都携带大量头部WebSocket握手时头部较大但后续通信头部极小仅2字节。适用场景HTTP适合无状态、请求-响应的场景如REST API。WebSocket适合实时性要求高的场景如在线聊天、游戏、股票推送。7. WebSocket和Socket的区别和联系Socket套接字是操作系统提供的一套网络编程接口封装了TCP/IP协议用于进程间通信。它本身不是协议而是“IP地址端口协议”的组合。WebSocket是应用层协议基于TCP专门为Web浏览器和服务器设计提供全双工通信。简单来说Socket是编程接口WebSocket是通信协议。你可以用Socket实现任何TCP/UDP应用而WebSocket则是建立在HTTP握手之上的高级协议。8. HTTP的完整请求过程以访问http://www.example.com为例DNS解析获取IP地址。TCP连接客户端与服务器建立TCP连接三次握手。发送HTTP请求客户端发送请求报文包含请求行、头部、可能的消息体。服务器处理并返回服务器处理请求返回HTTP响应报文状态行、头部、消息体。浏览器渲染浏览器解析HTML并根据其中的资源链接JS、CSS、图片等再次发起请求复用TCP连接或新建。连接关闭若为短连接服务器在响应后关闭TCP连接四次挥手若为长连接则保持一段时间。