前端知识体系中,网络通信基础是必不可少的掌握内容。我们整天和浏览器打交道,如果不知道浏览器是怎么和服务器交流是件可悲的事情。
客户端怎么和服务器交流?
客户端与服务器之间的交流通常遵循客户端-服务器模型,其中客户端发起请求,服务器响应请求。这种交流通常通过HTTP(超文本传输协议)或HTTPS(HTTP Secure)完成。下面是一个典型的交流例子:
- 客户端请求:用户在浏览器中输入网址(如 www.example.com)或点击一个链接。
- 域名解析:浏览器将域名 www.example.com 转换成服务器的IP地址。
- 建立连接:浏览器通过网络向服务器的IP地址发起一个TCP连接。
- 发送HTTP请求:一旦连接建立,浏览器就会发送一个HTTP GET请求到服务器,请求特定的资源(如主页)。
- 服务器处理请求:服务器接收到请求后,根据请求的资源类型进行处理。
- 服务器响应: 服务器处理完请求后,会将响应的数据(如HTML文档)发送回客户端。
- 渲染页面:浏览器接收到数据后,解析HTML文档,并请求需要的CSS、JavaScript文件和图片等资源,然后渲染页面显示给用户。
举个具体的例子:
假设你想查看一个新闻网站的某篇文章。你在浏览器中输入了URL:
www.news-website.com/articles/la…
以下是交流过程:
url转换成IP地址---->>>>通过协议发起连接---->>>>
浏览器根据地址发起请求---->>>>服务器收到请求并处理---->>>>
服务器响应请求返回资源---->>>>浏览器收到HTML---->>>>
浏览器根据HTML接着请求其他资源---->>>>浏览器组合资源渲染页面。
这个过程中,客户端和服务器通过HTTP请求和响应消息进行了交流,服务器提供了客户端请求的资源。
HTTP vs HTTPS
区别:
- 安全性: HTTPS提供SSL/TLS加密,HTTP不提供。
- 端口: HTTP使用80端口,HTTPS使用443端口。
- 性能: HTTPS由于加密处理,可能稍微影响性能。
应用场景:
- HTTP: 适用于不敏感的信息传输,如新闻阅读。
- HTTPS: 推荐用于所有场景,尤其是敏感数据交互,如在线支付。
面试常问问题:
- 什么是HTTP和HTTPS?
HTTP是无加密的数据传输协议,而HTTPS是其安全版本,通过SSL/TLS加密数据。 - HTTPS如何保证安全性?
HTTPS通过SSL/TLS协议实现安全通信,主要包括:
-
- 加密: 使用对称加密和非对称加密确保数据传输的私密性。
- 数据完整性: 通过摘要算法检查数据在传输过程中是否被篡改。
- 认证: SSL证书验证服务器的身份,防止中间人攻击。
- 使用HTTPS会影响性能吗?
有一些性能开销,但现代技术优化已使其不成问题。
输入url会发生什么?
当你在浏览器中输入URL并按下回车键时,会发生一系列复杂的网络操作。以下是简化的步骤:
- 域名解析: 浏览器请求DNS服务器将域名转换为IP地址。
- 建立连接: 浏览器使用IP地址发起TCP连接,对于HTTPS会进行SSL/TLS握手。
- 发送HTTP请求: 浏览器向服务器发送HTTP请求。
- 服务器处理请求: 服务器处理接收到的请求并准备响应。
- 发送HTTP响应: 服务器将响应数据发送回浏览器。
- 浏览器处理响应: 浏览器接收响应并可能请求额外资源。
- 渲染页面: 浏览器渲染页面并显示给用户。
- 交互: 用户与页面交互,可能触发额外的请求和响应。
AJAX vs fetch vs axios
使用时应根据项目的需求和目标浏览器选择合适的技术或库。
fetch
提供了一个现代、简洁的API,而axios
提供了更多的功能和更广泛的兼容性。
常见返回状态码
HTTP状态码是由三位数字和一个可选的理由短语组成,用于表示服务器对请求的响应状态。常见的HTTP状态码分为5类:
- 100-199:信息响应
-
- 例如,100(继续)。服务器已接收到请求的初始部分,客户端应该继续请求。
- 200-299:成功响应
-
- 例如,200(OK)。请求成功,服务器返回了期望的响应。
- 例如,201(已创建)。请求成功并导致创建了一个新的资源。
- 300-399:重定向
-
- 例如,301(永久移动)。请求的URL已永久改变,新的URL在响应中给出。
- 例如,302(临时移动)。请求的URL临时改变。
- 400-499:客户端错误
-
- 例如,400(错误请求)。服务器无法理解的请求语法。
- 例如,404(未找到)。服务器找不到请求的资源。
- 例如,403(禁止)。服务器理解请求,但拒绝执行。
-
-
- 权限不足、法律法规限制、限流。。。。
-
- 500-599:服务器错误
-
- 例如,500(内部服务器错误)。服务器遇到错误,无法完成请求。
每一个HTTP状态码都对应一个特定的含义,它们帮助客户端理解请求是否成功,如果不成功,问题的原因是什么。
请求 和 响应 的组成部分
- HTTP请求组成部分
请求部分 告诉服务器客户端希望执行什么操作以及它希望如何与服务器交互
2. HTTP响应组成部分
而响应部分 告诉客户端服务器如何处理请求以及它返回了什么数据