文章目录
- 计算机网络基础
- HTTP
-
- 从输入URL到页面展示到底发生了什么?(非常重要)
- HTTP状态码
- [HTTP Header中常见的字段有哪些?](#HTTP Header中常见的字段有哪些?)
- HTTP和HTTPS有什么区别?(重要)
- HTTP/1.0和HTTP/1.1有什么区别?
- HTTP/1.1和HTTP/2.0有什么区别?
- HTTP/2.0和HTTP/3.0有什么区别?
- HTTP是不保存状态的协议,如何保存用户状态?
- Cookie和Session有什么区别?
- GET和POST的区别(爱被问到)
- WebSocket
-
- 什么是WebSocket?
- [WebSocket 和 HTTP 有什么区别?](#WebSocket 和 HTTP 有什么区别?)
- [WebSocket 的工作过程是什么样的?](#WebSocket 的工作过程是什么样的?)
- [SSE 与 WebSocket 有什么区别?](#SSE 与 WebSocket 有什么区别?)
计算机网络基础
计算机网络基础
网络分层模型
OSI七层模型
OSI七层模型是什么?每一层的作用是什么?
-
应用层,为计算机用户提供服务
-
表示层,数据处理(编解码,加密解密,压缩解压缩)
-
会话层,管理(建立\维护\重连)应用程序之间的会话
-
传输层,为两台主机进程之间的通信提供通用的数据传输服务
-
网络层,路由和寻址
-
数据链路层,帧编码和误差纠正控制
-
物理层,透明地传输比特流传输
-
应用层,你在写一封邮件,内容是"你好,张三!"
-
表示层,为了让信件更安全,你把内容加密,比如把"你好"编码成"xyz123"。
-
会话层,你和邮局的工作人员沟通好,确认对方的地址是有效的,可以投递到目的地。
-
传输层,信封可能太大,需要拆分为多个小信件,每封信都带上编号。
-
网络层,邮局通过地图或导航规划送信路线,比如选择"走高速"或"走省道"。
-
数据链路层,信件在北京邮局内部转运,工作人员检查信件是否完整(错误检测)。
-
物理层,透信件通过邮递员、邮车或者飞机实际运输到目的地。
但是七层模型复杂不实用,有些功能重叠,比如表示层的加密和应用层的加密可能重叠
chatGPT易理解提示词,网络分层模型的描述比较抽象,能不能具象化举个例子
TCP/IP四层模型
TCP/IP四层模型是什么?每一层的作用是什么?
- 应用层(应用层,表示层,会话层)
- 传输层
- 网络层
- 网络接口层(数据链路层,物理层)
TCP/IP四层模型由OSI七层模型演化而来,我们并不能将 TCP/IP 四层模型 和 OSI 七层模型完全精确地匹配起来,不过可以简单将两者对应起来
常见协议
- 应用层
HTTP(超文本传输协议),SMTP(简单邮件发送协议),SSH(安全的网络传输协议),Telnet(远程登陆协议),FTP(文件传输协议),POP3/IMAP(邮件接受协议),RTP(实时传输协议),DNS(域名管理系统) - 传输层
TCP,面向连接的,可靠的
UDP,无连接的,尽最大努力的 - 网络层
IP(网际协议),ARP(地址解析协议),ICMP(互联网控制报文协议),NAT(网络地址转换协议),OSPF(开放式最短路径优先协议),RIP(路由信息协议),BGP(边界网关协议) - 网络接口层(不重要)
CSMA/CD,MAC,差错检测,多路访问,以太网
传输过程
- 应用层,报文
- 传输层,将报文传输,报文段或用户数据报
- 网络层,封装成IP数据报
- 网络接口层,组装成帧,在节点间传送帧,传输比特流
为什么网络要分层?
复杂的系统需要分层,因为每一层都需要专注于一类事情。网络分层的原因也是一样,每一层只专注于做一类事情。
比如使用框架开发后端,分为controller\service\mapper
各层之间相互独立,提高了灵活性和可替换性,大问题化小,高内聚、低耦合
传输层有哪些常见的协议?
TCP(传输控制协议),面向连接的,可靠的数据传输服务
UDP(用户数据协议),无连接的,尽最大努力的数据传输服务
HTTP
从输入URL到页面展示到底发生了什么?(非常重要)
从输入URL到页面展示到底发生了什么?
- 在浏览器中输入指定网页的URL
- 浏览器通过DNS协议,获取域名对应的IP地址
- 浏览器根据IP地址和端口号,向目标服务器发起一个TCP连接请求
- 浏览器在TCP连接上,向服务器发送一个HTTP请求报文,请求获取网页的内容
- 服务器收到HTTP请求报文后,处理请求,并返回HTTP响应报文给浏览器
- 浏览器收到HTTP响应报文后,解析响应体中的HTML代码,渲染页面的结构和样式,同时根据HTML中的其他资源的URL(如图片\CSS\JS等),再次发起HTTP请求,获取这些资源的内容,直到网页完全加载显示
- 浏览器在不需要和服务器通信时,可以主动关闭TCP连接,或者等待服务器的关闭请求
HTTP状态码
HTTP状态码有哪些?
- 1XX,接收的请求正在处理
- 2XX,成功
200 OK,成功处理
201 Created,成功处理并创建一或多资源,如post请求创建新的用户
202 Accepted,服务还未处理完毕
204 No Content,成功处理请求,但没有返回任何内容,如发送请求删除一个用户,处理删除操作不会返回任何内容,平时学习/工作中见到的次数并不多 - 3xx,重定向,需要附加操作完成请求
301 Moved Permanently,永久重定向,网站网址更换 - 4xx,客户端错误
400 Bad Request,请求参数不合法
401 Unauthorized,未认证却请求需要认证之后才能访问的资源
403 Forbidden,直接拒绝 HTTP 请求,不处理
404 Not Found,你请求的资源未在服务端找到
409 Conflict,请求的资源与服务端当前的状态存在冲突,多人编辑同一资源时的冲突 - 5xx,服务端错误
500 Internal Server Error,服务端出 Bug 了
502 Bad Gateway,由于网关或代理服务器错误
HTTP Header中常见的字段有哪些?
- host,客户端指定自己想访问的web服务器的域名/IP地址和端口号
- User-agent,浏览器表明自己的身份
- Accept,告诉web服务器自己接收什么介质类型
- Accept-Language,浏览器申明自己接收的语言跟字符集的区别,中文是语言,中文有多种字符集,比如big5,gb2312,gbk等等
- Accept-Encoding,浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法 (gzip,deflate)
- Content-Encoding,WEB服务器表明自己使用了什么压缩方法(gzip,deflate)压缩响应中的对象。
- Cookie,这个头信息把之前发送到浏览器的 cookies 返回到服务器。
- Referer,浏览器向 WEB 服务器表明自己是从哪个 网页/URL 获得/点击 当前请求中的网址/URL
- Proxy-Authenticate,代理服务器响应浏览器,要求其提供代理身份验证信息
- Content-Type,WEB 服务器告诉浏览器自己响应的对象的类型
HTTP和HTTPS有什么区别?(重要)
- 端口号,HTTP默认是80,HTTPS默认是443
- URL前缀,HTTP的URL前缀是http:// ,HTTPS的URL前缀是http://
- 安全性和资源消耗:HTTP基于TCP,HTTPS基于SSL/TLS(SSL/TLS基于TCP)
所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密.
HTTP 安全性没有 HTTPS 高,但是 HTTPS 比 HTTP 耗费更多服务器资源。 - SEO(搜索引擎优化):搜索引擎更青睐使用HTTPS协议的网站,因为HTTPS能够提供更高的安全性和用户隐私保护.在搜索结果中HTTPS的网站会被优先显示.
HTTP/1.0和HTTP/1.1有什么区别?
HTTP/1.1和HTTP/2.0有什么区别?
HTTP/2.0和HTTP/3.0有什么区别?
HTTP是不保存状态的协议,如何保存用户状态?
HTTP是不保存状态的协议,如何保存用户状态?
HTTP是一种不保存状态,即无状态协议,也就是说HTTP协议自身不对请求和响应之间的通信状态进行保存.Session机制的存在就是为了解决这个问题,Session的主要作用就是为了解决这个问题,通过服务端记录用户的状态.
在服务端保存Session的方法很多,最常用的就是内存和数据库(redis).
如何实现 Session 跟踪呢
通过在 Cookie 中附加一个 Session ID 来方式来跟踪(服务端和客户端都有)
Cookie被禁用怎么办?
最常用的就是利用 URL 重写把 Session ID 直接附加在 URL 路径的后面
Cookie和Session有什么区别?
Cookie和Session有什么区别?
Sessoin的主要作用是通过服务端记录用户的状态.
Cookie数据保存在客户端(浏览器端),Session数据保存在服务器端,Session安全性更高.如果使用 Cookie 的一些敏感信息不要写入 Cookie 中,最好能将 Cookie 信息加密然后使用到的时候再去服务器端解密。
GET和POST的区别(爱被问到)
GET和POST的区别?
|GET|POST|
|通常是读取操作|通常是写入操作创建资源|
|数据放在 URL 查询字符串中|数据放在请求体中|
|不适合敏感数据,URL 长度限制|数据放在请求体中,相对较安全,无明确长度限制|
|响应可缓存在服务端,所以幂等|不可缓存,所以不幂等|
|适用于静态资源和查询|适用于动态资源和数据提交|
WebSocket
什么是WebSocket?
什么是WebSocket?
WebSocket是一种基于TCP连接的全双工通信协议,即客户端和服务端可以同时发送和接收数据
WebSocket在2011年成为国际标准,几乎所有主流的浏览器都支持
WebSocket协议本质上是应用层的协议,用于弥补HTTP协议在持久通讯能力上的不足.客户端和服务器仅需要一次握手,就可以创建持久连接,并双向数据传输
应用场景,视频弹幕,社交聊天
WebSocket 和 HTTP 有什么区别?
WebSocket和HTTP两者都是基于TCP的应用层协议,都可以在网络中传输数据
- Websocket是一种双向实时通信协议,而HTTP是一种单向通信协议,并且,HTTP协议下的通信只能由客户端发起,服务器无法主动通知客户端
- Websocket使用ws://或wss://(使用SSL/TLS加密后的协议)作为协议前缀,HTTP使用http:// 或https://作为协议前缀
- Websocket可以支持扩展,用户可以扩展协议,实现部分自定义的子协议,如支持压缩,加密等
- Websocket通信数据格式比较轻量.用于协议控制的数据包头部相对较小,网络开销小,而HTTP通信每次都要携带完整的头部,网络开销较大(HTTP/2.0使用二进制帧进行数据传输,还支持头部压缩,减少了网络开销)
WebSocket 的工作过程是什么样的?
WebSocket 的工作过程是什么样的?
- 客户端向服务器发送一个HTTP请求,请求头中包含
Upgrade:websocket
和Sec-WebSocket-Key
等字段,表示要求升级协议为Websocket; - 服务器收到这个请求后,会进行升级协议的操作,如果支持WebSocket,它将回复一个HTTP101状态码,响应头中包含,
Connection:Upgrade
和Sec-Websocket-Accept:xxx等字段,表示成功升级到Websocket协议 - 客户端和服务器之间建立了一个WebSocket连接,可以进行双向的数据传输.数据以帧的形式进行传输,WebSocket的每条消息可能会被切分成多个数据帧(最小单位).发送端会将消息切割成多个帧发送给接收端,接收端接收消息帧,并将关联的帧重新组装成完整的消息
- 客户端和服务器可以主动发送一个关闭帧,表示要断开连接.另一方收到后,也会回复一个关闭帧,然后双方关闭TCP连接
另外,建立 WebSocket 连接之后,通过心跳机制来保持 WebSocket 连接的稳定性和活跃性。
SSE 与 WebSocket 有什么区别?
SSE与WebSocket有什么区别?
文本消息和二进制消息
SSE 与 WebSocket 作用相似,都可以建立服务端与浏览器之间的通信,实现服务端向客户端推送消息,但还是有些许不同:
- SSE 是基于 HTTP 协议的,它们不需要特殊的协议或服务器实现即可工作;WebSocket 需单独服务器来处理协议。
- SSE 单向通信,只能由服务端向客户端单向通信;WebSocket 全双工通信,即通信的双方可以同时发送和接受信息。
- SSE 实现简单开发成本低,无需引入其他组件;WebSocket 传输数据需做二次解析,开发门槛高一些。
- SSE 默认支持断线重连;WebSocket 则需要自己实现。
- SSE 只能传送文本消息,二进制数据需要经过编码后传送;WebSocket 默认支持传送二进制数据。
SSE 与 WebSocket 该如何选择?
SSE 好像一直不被大家所熟知,一部分原因是出现了 WebSocket,这个提供了更丰富的协议来执行双向、全双工通信。对于游戏、即时通信以及需要双向近乎实时更新的场景,拥有双向通道更具吸引力。但是,在某些情况下,不需要从客户端发送数据。而你只需要一些服务器操作的更新。比如:站内信、未读消息数、状态更新、股票行情、监控数量等场景,SSE 不管是从实现的难易和成本上都更加有优势。此外,SSE 具有 WebSocket 在设计上缺乏的多种功能,例如:自动重新连接、事件 ID 和发送任意事件的能力。