2xx: 成功
200 OK:成功
201 Created:请求被创建完成,同时新的资源被创建。
202 Accepted:供处理的请求已被接受,但是处理未完成。
3xx: 重定向
301 Moved Permanently:所请求的页面已经转移至新的 URL 。
302 Found:所请求的页面已经临时转移至新的 URL 。
4xx: 客户端错误
400 Bad Request:因为语法错误,服务器未能理解请求。
401 Unauthorized:合法请求,但对被请求页面的访问被禁止。因为被请求的页面需要身份验证,客户端没有提供或者身份验证失败。
404 Not Found:服务器无法找到被请求的页面。
5xx: 服务器错误
500 Internal Server Error:请求未完成。服务器遇到不可预知的情况。
501 Not Implemented:请求未完成。服务器不支持所请求的功能,或者服务器无法完成请求。
503 Service Unavailable:服务器当前不可用(过载或者宕机)。
1. 从地址栏显示来说:
(1)forword是服务器内部的重定向,服务器直接访问目标地址的 url网址,把里面的东西读取出来,但是客户端并不知道,因此用forward的话,客户端浏览器的网址是不会发生变化的。
(2)redirect是服务器根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,所以地址栏显示的是新的地址。
2.从数据共享来说:
(1)由于在整个定向的过程中用的是同一个request,因此forward会将request的信息带到被重定向的jsp或者servlet中使用。即可以共享数据
(2)redirect不能共享
3. 从运用的地方来说
(1)forword 一般用于用户登录的时候,根据角色转发到相应的模块
(2)redirect一般用于用户注销登录时返回主页面或者跳转到其他网站
4.从效率来说:
(1)forword效率高,而redirect效率低
5. 从本质来说:
(1)forword转发是服务器上的行为
(2)redirect重定向是客户端的行为
6. 从请求的次数来说:
(1)forword只有一次请求,
(2)redirect有两次请求。
举例:
redirect重定向:你去某一单位办理手续,先去了A局,A局的人说:“这个事现在由B局管”,所以你从A局出来又去了B局办理。
forword转发:你去某一单位办理手续,先去了A局,A局知道这个事现在由B局处理,但是他没有让你去,而是他自己去B局给你办好了。
(1)TCP面向连接,需要收发双方握手建立连接,传输数据包也需要应答,因此在保证数据交付的同时可以进行复杂的流量控制等,当然开销也大;
(2)UDP面向无连接,开销小,收发双方都不知道对方的在在,只是尽力交付,也无法进行流量控制,在网络质量较好的情况下,应用场景还是很广泛的。
(1)第一次握手:客户端发送网络包,服务端收到了。
这样服务端就能得出结论:客户端的发送能力、服务端的接收能力是正常的。
(2)第二次握手:服务端发包,客户端收到了。
这样客户端就能得出结论:服务端的接收、发送能力,客户端的接收、发送能力是正常的。不过此时服务器并不能确认客户端的接收能力是否正常。
(3)第三次握手:客户端发包,服务端收到了。
这样服务端就能得出结论:客户端的接收、发送能力正常,服务器自己的发送、接收能力也正常。
1.什么是粘包:
粘包问题中的 "包"是指的应用层的数据包。
在TCP的协议头中,有一个序号这样的字段。
站在传输层的角度,TCP是一个一个报文过来的,按照序号排好序放在缓冲区中,
但是站在应用层的角度,它看到的只是一串连续的字节数据。
应用程序看到了这么一连串的字节数据, 就不知道从哪个部分开始到哪个部分结束是一个完整的应用层数据包,这就是粘包问题。
2.如何解决:明确两个包之间的边界
(1)对于定长的包,保证每次都按固定大小读取即可。 例如一个Request结构, 是固定大小的, 那么就从缓冲区从头开始按sizeof(Request)依次读取即可
(2)对于变长的包,可以在包头的位置,约定一个包总长度的字段,从而就知道了包的结束位置。
(3)对于变长的包,还可以在包和包之间使用明确的分隔符
(应用层协议是程序员自己来定义的, 只要保证分隔符不和正文冲突即可)。
1.物理层
(1)以”0“,”1“代表电压的高低、灯光的闪灭,界定连接线和网线的规格
(2)比特流和电子信号直接的转换
2.数据链路层
(1)互联设备之间的传送和识别数据帧
(2)数据帧和比特流之间的转换
3.网络层
(1)地址管理和路由选择
(2)经过哪个路由传送到哪个目标地址
4.传输层
(1)管理两个节点之间的数据传输,负责可靠传输(确保数据被可靠的传输到目标地址)
(2)是否有数据丢失
5.会话层
(1)通信管理,负责建立和断开通信连接,管理传输层以下的分层
(2)何时建立连接、何时断开连接、保持多久的连接
6.表示层
(1)设备固有数据格式和网络标准数据格式之间的转换
(2)接收不同变现形式的信息,如图像,文字,声音等
7.应用层
(1)针对特订应用的协议,完成应用
1.Get是不安全的,因为在传输过程,数据被放在请求的URL中;Post的所有操作对用户来说都是不可见的。
2. Get传送的数据量较小,这主要是因为受URL长度限制;Post传送的数据量较大,一般被默认为不受限制。
3. Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。
4. Get执行效率却比Post方法好。Get是form提交的默认方法。
1.什么是跨域/同源策略
同源策略即:同一协议,同一域名,同一端口号。当其中一个不满足时,我们的请求即会发生跨域问题。
2.常见的跨域解决方案
(1)jsonp
利用了 script 不受同源策略的限制
缺点:只能 get 方式,易受到 XSS攻击
(2)CORS(Cross-Origin Resource Sharing),跨域资源共享
当使用XMLHttpRequest发送请求时,如果浏览器发现违反了同源策略就会自动加上一个请求头 origin;
后端在接受到请求后确定响应后会在后端在接受到请求后确定响应后会在 Response Headers 中加入一个属性 Access-Control-Allow-Origin;
浏览器判断响应中的 Access-Control-Allow-Origin 值是否和当前的地址相同,匹配成功后才继续响应处理,否则报错
缺点:忽略 cookie,浏览器版本有一定要求
(3)代理跨域请求(Nginx)
前端向发送请求,经过代理,请求需要的服务器资源
缺点:需要额外的代理服务器
(4)Html5 postMessage 方法
允许来自不同源的脚本采用异步方式进行有限的通信,可以实现跨文本、多窗口、跨域消息传递
缺点:浏览器版本要求,部分浏览器要配置放开跨域限制
(5)修改 document.domain 跨子域
相同主域名下的不同子域名资源,设置 document.domain 为 相同的一级域名
缺点:同一一级域名;相同协议;相同端口
(6)基于 Html5 websocket 协议
websocket 是 Html5 一种新的协议,基于该协议可以做到浏览器与服务器全双工通信,允许跨域请求
缺点:浏览器一定版本要求,服务器需要支持 websocket 协议
(7)document.xxx + iframe
通过 iframe 是浏览器非同源标签,加载内容中转,传到当前页面的属性中
缺点:页面的属性值有大小限制
九.说一下 JSONP 实现原理?
1.原理
jsonp实现原理是利用script标签可以获取不同源资源的特点,来达到跨域访问某个资源的目的。2.具体行为分析
(1)script标签的src和img标签的src,link标签的href他们没有被同源策略所限制
(2)点击按钮的时候,创建了一个script标签(即会发送一个get请求到src指向的地址),src地址是"localhost:3000/article-list",这个src地址,就是我们请求的服务端接口。
(3)定义callback:接口请求回来的数据