计算机网络常见问题总结
- http 响应码 301 和 302 代表的是什么?有什么区别?
- forward 和 redirect 的区别?
- 简述 tcp 和 udp 的区别?
- tcp 为什么要三次握手?两次不行么?为什么?
- 说一下 tcp 粘包是怎么产生的?
- OSI 的七层模型都有哪些?
- get 和 post 请求有什么区别?
- 如何实现跨域?
- 说一下 JSONP 实现原理?
1. http 响应码 301 和 302 代表的是什么?有什么区别?
301:永久重定向
302:暂时重定向
它们的区别是,301 对搜索引擎优化(SEO)更有利;302 有被提示为网络拦截的风险。
2. forward 和 redirect 的区别?
forward 是转发和 redirect 是重定向:
- 地址栏 url 显示:forward url 不会发生改变,redirect url 会发生改变;
- 数据共享:forward 可以共享 request 里的数据,redirect 不能共享;
- 效率:forward 比 redirect 效率高;
3. 简述 tcp 和 udp 的区别?
tcp 和 udp 是 OSI 模型中的运输层中的协议。tcp 提供了可靠的通信传输,而 udp 则常被用来让广播和细节控制交给应用的通信传输。
两者的区别大致如下:
-
TCP是面向连接的,UDP是无连接的;
-
TCP是可靠的,UDP是不可靠的;
-
TCP只支持点对点通信,UDP支持一对一、一对多、多对一、多对多的通信模式;
-
TCP是面向字节流的,UDP是面向报文的;
-
TCP有拥塞控制机制;UDP没有拥塞控制,适合媒体通信;
-
TCP首部开销(20个字节)比UDP的首部开销(8个字节)要大;
4. tcp 为什么要三次握手?两次不行么?为什么?
如果采用两次握手,那么只要服务器发送确认数据包就会建立连接,但由于此时客户端并未响应服务器端请求,那么此时服务器端就会一直在等待客户端,这样服务器端就白白浪费了一定的资源。若采用握手,服务器端没有收到来自客户端的再次确认,则就会知道客户端并没有要求建立请求,就不会浪费服务器的资源。
5. 说一下 tcp 粘包是怎么产生的?
tcp 粘包问题主要是因为接收方不知道消息之间的界限,不知道一次性提取多少字节的数据所造成的。tcp粘包 可能发生在发送端或者接收端,分别来看各种产生粘包的原因:
- 发送端粘包:发送端需要等缓冲区满才发送出去,造成粘包
- 接收方粘包:接收方不及时接收缓冲区的包,造成多个包接收。
详细请看: tcp 粘包问题
6. OSI 的七层模型都有哪些?
- 物理层:利用传输介质为数据链路层提供物理连接,实现比特流的透明传输。
- 数据链路层:负责建立和管理节点的链路。
- 网络层:通过路由选择算法,为报文或分组通过子网选择最适当的路径。
- 传输层:向用户提供可靠的端到端的差错和流量控制,保证报文的正确传输。
- 会话层:向两个实体的表示层提供建立和使用连接的方法。
- 表示层:处理用户信息的表示问题,如编码、数据格式转换和加密解密等。
- 应用层:直接向用户提供服务,完成用户希望在网络上完成的各种工作。
7. get 和 post 请求有什么区别?
- 从功能上讲:get 一般用来获取服务器上的资源,post 一般用户更新服务器上的资源。
- 从 REST 服务角度上说:get 是幂等的,即读取同一个资源,总是得到相同的数据。而 post 不是幂等的,因为每次请求对资源的改变并不是相同的;进一步讲,get 不会改变服务器上的资源,而 post 会对服务器资源进行改变。
- 从请求参数形式上看:get 请求的数据会附在 URL 之后,即将请求数据放置在 HTTP 报文的请求头中,以 ?分割URL和传输数据,参数直接用 & 连接。而 post 请求会把提交的数据放置在HTTP请求的报文的请求体中。
- 从安全性讲:post 的安全性要比 get 的安全性高,因为 get 请求提交的数据将明文出现在url 上,而post请求参数则被封装到请求体中,相对更安全。
- 从请求的大小看:get请求的长度受限于游览器或服务器对URL长度的限制,运行发送的数据量比较小,而post请求则是没有大小限制的。
8. 如何实现跨域?
实现跨域有以下几种方案:
- 服务器端运行跨域 设置 CORS 等于*;
- 在单个接口使用注解 @CrossOrigin 运行跨域;
- 使用 jsonp 跨域;
9. 说一下 JSONP 实现原理?
jsonp:JSON with Padding,它是利用 script 标签的 src 连接可以访问不同源的特性,加载远程返回的“JS 函数”来执行的。