八、网络
79. http 响应码 301 和 302 代表的是什么?有什么区别?
301和302都是HTTP请求的状态码,其中301代表永久性转移,302代表暂时性转移.
301代表转向前的网址不在了,就会把新的网址当做有效目标
302只是代表临时性重定向,旧的网址会保留.
80. forward 和 redirect 的区别?
forward:直接转发,客户端浏览器只发出一次请求,由第二个信息资源响应该请求,共享同一个request对象
redirect:间接转发,服务端响应第一次请求的时候,让浏览器去访问另外一个URL,从而达到转发的目的.本质上是两次HTTP请求.
forward地址栏不变,redirect地址栏改变
81. 简述 tcp 和 udp的区别?
tcp基于连接,udp基于无连接
tcp对系统资源要求高,udp少
tcp基于字节流,udp基于数据报文
tcp复杂,udp简单
82. tcp 为什么要三次握手,两次不行吗?为什么?
- 为了实现可靠数据传输,TCP 协议的通信双方,都必须维护一个序列号以标识发送出去的数据包中哪些是已经被对方收到的。
- 三次握手的过程即是通信双方相互告知序列号起始值,并确认对方已经收到了序列号起始值的必经步骤
- 如果只是两次握手,至多只有连接发起方的起始序列号能被确认,另一方选择的序列号则得不到确认
83. 说一下 tcp 粘包是怎么产生的?
TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。
产生原因:
- 发送方原因:TCP默认会使用Nagle算法。而Nagle算法主要做两件事:1)只有上一个分组得到确认,才会发送下一个分组;2)收集多个小分组, 在一个确认到来时一起发送。
- 接收方原因:TCP接收到分组时,并不会立刻送至应用层处理,或者说,应用层并不一定会立即处理;实际上,TCP将收到的分组保存至接收缓存里,然后应用程序主动从缓存里读收到的分组。这样一来,如果TCP接收分组的速度大于应用程序读分组的速度,多个包就会被存至缓存,应用程序读时,就会读到多个首尾相接粘到一起的包
84. OSI 的七层模型都有哪些?
- 物理层
- 数据链层
- 网络层
- 传输层
- 会话层
- 表示层
- 应用层
85. get 和 post 请求有哪些区别?
get产生一个TCP数据包,POST产生两个
get将数据放在url中可以看到,post会放在html header中提交
get数据大小有限制,最大1024字节,post没有限制
86. 如何实现跨域?
- JSONP技术
- CORS规范
- 通过服务端实现
- websocket
87. 说一下 JSONP 实现原理?
JSONP原理是动态添加一个<script>标签,在src属性中访问跨域地址,但是要携带一个回调函数名,服务器将返回的数据封装成js格式的文件返回给客户端后进行解析.如果是使用ajax的方式,需要添加jsonp属性,指定回调函数名;dataType属性值设置为'jsonp'.