Skip to content

网络通信

网络通信相关知识

HTTP和HTTPS

HTTP(超文本传输协议)和HTTPS(超文本传输安全协议)都是用于在Web浏览器和网站服务器之间传输信息的协议。它们的主要区别在于 安全性

HTTP

HTTP是一种明文传输协议,它不提供任何加密机制。这意味着,如果攻击者截获了HTTP传输的数据,他们可以直接读取其中的内容。因此,HTTP不适合用于传输敏感信息,如信用卡号、密码等。

优点:

简单快速:HTTP协议简单,通信速度快。

灵活:HTTP允许传输任意类型的数据对象,传输类型由Content-Type加以标记。

缺点:

不安全:HTTP是明文传输,数据都是未加密的,容易被窃听截取。

数据完整性未校验:HTTP传输的数据完整性未校验,容易被篡改。

工作原理:

客户端发起HTTP请求:客户端在浏览器中输入一个HTTP网址,然后连接到服务器的80端口。 服务器处理请求:服务器收到客户端的请求后,会根据请求的内容进行处理。 服务器返回响应:服务器处理完客户端的请求后,会返回一个响应,包括状态码、响应头和响应正文。 客户端处理响应:客户端收到服务器的响应后,会根据状态码和响应头进行相应的处理。如果状态码为200,表示请求成功,客户端会渲染响应正文中的内容。


HTTPS

HTTPS则是HTTP的安全版本。它在HTTP的基础上使用了SSL/TLS协议来加密数据。HTTPS 开发的主要目的是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。整个过程中,客户端和服务器之间传输的数据都是经过加密的,这意味着即使攻击者截获了HTTPS传输的数据,他们也无法读取其中的内容,除非能够破解加密算法。

优点:

安全:HTTPS通过SSL/TLS协议对数据进行加密,保护了数据的安全性。

身份认证:HTTPS提供了对网站服务器的身份认证,防止了“中间人攻击”。

缺点:

相对较慢:由于HTTPS需要进行加密和解密操作,因此它比HTTP相对较慢。

需要证书:使用HTTPS协议需要申请数字证书,可能需要一定的费用。

工作原理:

客户端发起HTTPS请求:客户端在浏览器中输入一个HTTPS网址,然后连接到服务器的443端口。 服务器发送证书:服务器收到客户端的请求后,会将网站支持的证书信息(包括公钥)发送给客户端。 客户端验证证书:客户端收到证书后,会验证证书的有效性。如果证书有效,客户端会生成一个随机值,并使用公钥对该随机值进行加密。 客户端发送加密信息:客户端将加密后的随机值发送给服务器,以便服务器获取该随机值。 服务器解密信息:服务器使用私钥解密客户端发送的加密信息,从而获得客户端生成的随机值。 服务器发送加密数据:服务器使用该随机值对数据进行对称加密,并将加密后的数据发送给客户端。 客户端解密数据:客户端使用之前生成的随机值对服务器发送的加密数据进行解密,从而获得原始数据。

TCP

TCP(传输控制协议)是一种 面向连接 的协议,它使用三次握手来建立连接,并使用四次挥手来断开连接。

三次握手

三次握手

过程:

  1. 第一次:客户端向服务器发送一个SYN报文,请求建立连接。报文中包含客户端的初始序列号。
  2. 第二次:服务器收到SYN报文后,如果同意建立连接,则向客户端发送一个SYN+ACK报文,表示确认客户端的SYN报文。报文中包含服务器的初始序列号和对客户端初始序列号的确认。
  3. 第三次:客户端收到SYN+ACK报文后,向服务器发送一个ACK报文,表示确认服务器的SYN+ACK报文。此时,TCP连接建立完成

四次挥手

四次挥手

过程:

  1. 第一次:当客户端没有更多数据要发送时,它会向服务器发送一个FIN报文,请求断开连接。
  2. 第二次:服务器收到FIN报文后,向客户端发送一个ACK报文,表示确认客户端的FIN报文。
  3. 第三次:当服务器没有更多数据要发送时,它会向客户端发送一个FIN报文,请求断开连接。
  4. 第四次:客户端收到FIN报文后,向服务器发送一个ACK报文,表示确认服务器的FIN报文。此时,TCP连接断开完成。

为什么三次握手和四次挥手

  • 三次握手的目的是为了防止失效的连接请求报文突然又传送到了服务器,从而产生错误。通过三次握手,可以确保双方都准备好建立连接。
  • 四次挥手的目的是为了确保双方都能够完整地发送和接收数据。由于TCP是全双工通信协议,因此每个方向都需要单独进行关闭。这就需要四次挥手来完成。

TCP和UDP的区别

  1. TCP是一种面向连接的协议,它在传输数据之前需要建立连接。
  2. UDP是一种无连接的协议,它不需要建立连接就可以直接发送数据。
  3. TCP提供了可靠的数据传输,它通过序列号、确认应答、重传等机制来保证数据包的有序可靠传输。而UDP不提供可靠性保证,它只负责将数据包发送出去,不保证数据包能够到达目的地。
  4. TCP提供了流量控制和拥塞控制机制来保证网络的稳定性。而UDP没有这些控制机制。

TCP提供了可靠的数据传输,但速度相对较慢;

而UDP速度快,但不提供可靠性保证。选择哪种协议取决于应用程序的需求。

应用场景:

TCP:

  1. 文件传输:比如下载大文件,需要保证数据的完整性和顺序。
  2. 电子邮件:确保邮件内容准确无误地送达。
  3. 网页浏览:保证网页元素按正确的顺序加载,显示完整。

UDP:

  1. 实时视频和音频流:对实时性要求高,少量数据丢失不影响整体体验。
  2. 在线游戏:快速响应很重要,偶尔的数据丢失可以接受。
  3. 域名系统(DNS)查询:数据量小,对速度要求高。

解决跨域问题

跨域是指浏览器为了安全起见,限制了脚本内发起的跨源HTTP请求。这种限制被称为同源策略。同源策略规定,只有当协议、域名和端口都相同时,两个页面才被认为是同源的。如果两个页面不同源,那么它们之间就不能进行跨域请求。

实现跨域请求的方法:

  1. JSONP

通过动态创建<script>标签来实现跨域请求的方法

  1. CORS:CORS(Cross-Origin Resource Sharing,跨源资源共享)是一种基于HTTP头的机制,它允许服务器标识除了它自己以外的其他源(域、协议或端口),使得浏览器允许这些源访问加载自己的资源。服务器可以通过设置响应头中的Access-Control-Allow-Origin字段来指定哪些源可以访问它的资源。

  2. 代理:可以在服务器端设置一个代理,将前端发出的请求转发到目标服务器上,然后再将目标服务器返回的数据转发回前端。这样,前端就可以绕过浏览器的同源策略限制,实现跨域请求。

  3. postMessage:postMessage是HTML5中新增的一个API,它允许不同源之间的窗口进行通信。可以通过监听message事件来接收其他窗口发送过来的消息。

GET和POST的区别

GET方法用于从指定的资源请求数据。它将参数显示在URL上,例如:/test/demo_form.php?name1=value1&name2=value2。GET方法提交的数据量有限制,因为它是通过URL添加数据来发送的,而URL的长度是受限制的。GET方法只允许ASCII字符。此外,GET请求可被缓存、保留在浏览器历史记录中、收藏为书签。但是,GET请求不应在处理敏感数据时使用。

POST方法用于向指定的资源提交要被处理的数据。它通过表单提交不会显示在URL上,因此POST方法更具隐蔽性。POST方法可以传输大量的数据,对数据长度没有要求。POST方法没有限制,也允许二进制数据。此外,POST请求不会被缓存、不会保留在浏览器历史记录中、不能被收藏为书签。

常见的http状态码

HTTP状态码用来表明特定HTTP请求是否成功完成。响应被归为以下五大类:

  1. 信息响应 (100–199)
  2. 成功响应 (200–299)
  3. 重定向消息 (300–399)
  4. 客户端错误响应 (400–499)
  5. 服务端错误响应 (500–599)

一些常见的HTTP状态码包括:

200 OK:请求成功。

301 Moved Permanently:请求的资源的URL已永久更改。

302 Found:请求的资源的URI已暂时更改。

304 Not Modified:所请求的资源未修改,客户端可以继续使用相同的缓存版本的响应。

400 Bad Request:客户端请求的语法错误,服务器无法理解。

401 Unauthorized:请求要求用户的身份认证。

403 Forbidden:客户端没有访问内容的权限。

404 Not Found:服务器找不到请求的资源。

500 Internal Server Error:服务器内部错误,无法完成请求。

502 表示 “错误网关”(Bad Gateway)。这意味着服务器作为网关或代理,从上游服务器接收到了无效的响应。

503 表示 “服务不可用”(Service Unavailable)。这表明服务器暂时无法处理请求,通常是由于服务器过载或正在进行维护。

CDN

CDN是Content Delivery Network的缩写,即内容分发网络。它的基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。

CDN的工作原理就是将源站的资源缓存到CDN各个节点上,当请求命中了某个节点的资源缓存时,立即返回客户端,避免每个请求的资源都通过源站获取,避免网络拥塞、缓解源站压力,保证用户访问资源的速度和体验。

简单来说,CDN通过在全球范围内部署大量节点服务器,将网站内容缓存在这些节点服务器上,当用户访问网站时,CDN会根据用户的地理位置和网络状况等因素,智能调度用户访问离其最近的节点服务器,从而加快网站访问速度、提高网站可用性。