一、HTTP 响应码有哪些?分别代表什么含义?
200:成功,Web 服务器成功处理了客户端的请求。
301:永久重定向,当客户端请求一个网址的时候,Web 服务器会将当前请求重定向到另一个网址,搜索引擎会抓取重定向后网页的内容并且将旧的网址替换为重定向后的网址。
302:临时重定向,搜索引擎会抓取重定向后网页的内容而保留旧的网址,因为搜索引擎认为重定向后的网址是暂时的。
400:客户端请求错误,多为参数不合法导致 Web 服务器验参失败。
404:未找到,Web 服务器找不到资源。
500:Web 服务器错误,服务器处理客户端请求的时候发生错误。
503:服务不可用,服务器停机。
504:网关超时。
二、Forward 和 Redirect 的区别?
浏览器 URL 地址:Forward 是服务器内部的重定向,服务器内部请求某个 servlet,然后获取响应的内容,浏览器的 URL 地址是不会变化的;Redirect 是客户端请求服务器,然后服务器给客户端返回了一个 302 状态码和新的 location,客户端重新发起 HTTP 请求,服务器给客户端响应 location 对应的 URL地址,浏览器的 URL 地址发生了变化。
数据的共享:Forward 是服务器内部的重定向,request 在整个重定向过程中是不变的,
request 中的信息在 servlet 间是共享的。Redirect 发起了两次 HTTP 请求分别使用不同的request。
请求的次数:Forward 只有一次请求;Redirect 有两次请求。
三、Get 和 Post 请求有哪些区别?
用途:
get 请求用来从服务器获取资源
post 请求用来向服务器提交数据
表单的提交方式:
get 请求直接将表单数据以 name1=value1&name2=value2 的形式拼接到 URL 上(http://www.
baidu.com/action?name1=value1&name2=value2),多个参数参数值需要用 & 连接起来并且用 ? 拼接到 action 后面;
post 请求将表单数据放到请求头或者请求的消息体中。
传输数据的大小限制:
get 请求传输的数据受到 URL 长度的限制,而 URL 长度是由浏览器决定的;
post 请求传输数据的大小理论上来说是没有限制的。
参数的编码:
get 请求的参数会在地址栏明文显示,使用 URL 编码的文本格式传递参数;
post 请求使用二进制数据多重编码传递参数。
缓存:
get 请求可以被浏览器缓存被收藏为标签;
post 请求不会被缓存也不能被收藏为标签。
四、说说 TCP 与 UDP 的区别,以及各自的优缺点
1、TCP面向连接(如打电话要先拨号建立连接):UDP是无连接的,即发送数据之前不需要建立连接。
2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付。tcp通过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。
3、UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。
4.每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信。
5、TCP对系统资源要求较多,UDP对系统资源要求较少。
五、说一下 HTTP 和 HTTPS 的区别 端口不同:HTTP和 HTTPS 的连接方式不同没用的端口也不一样,HTTP是80, HTTPS 用的是443 消耗资源:和HTTP相比,HTTPS通信会因为加解密的处理消耗更多的CPU和内存资源。 开销: HTTPS 通信需要证书,这类证书通常需要向认证机构申请或者付费购买。
六、说说HTTP、TCP、Socket 的关系是什么?
TCP/IP 代表传输控制协议/网际协议,指的是一系列协议族。
HTTP 本身就是一个协议,是从 Web 服务器传输超文本到本地浏览器的传送协议。
Socket 是 TCP/IP 网络的 API ,其实就是一个门面模式,它把复杂的 TCP/IP 协议族隐藏在Socket 接口后面。对用户来说,一组简单的接口就是全部,让 Socket 去组织数据,以符合指定的协议。
综上所述:
需要 IP 协议来连接网络
TCP 是一种允许我们安全传输数据的机制,使用 TCP 协议来传输数据的 HTTP 是 Web 服务器和客户端使用的特殊协议。
HTTP 基于 TCP 协议,所以可以使用 Socket 去建立一个 TCP 连接。
七、说一下HTTP的长连接与短连接的区别
HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。
短连接
在HTTP/1.0中默认使用短链接,也就是说,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。如果客户端访问的某个HTML或其他类型的Web资源,如 JavaScript文件、图像文件、 CSS 文件等。当浏览器每遇到这样一个Web资源,就会建立一个HTTP会话。
长连接
从HTTP/1.1起,默认使用长连接,用以保持连接特性。在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的 TCP连接不会关闭。如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。
八、TCP 为什么要三次握手,两次不行吗?为什么? 1、TCP 客户端和服务端建立连接需要三次握手,首先服务端需要开启监听,等待客户端的连接请 求,这个时候服务端处于“收听”状态; 2、客户端向服务端发起连接,选择 seq=x 的初始序列号,此时客户端处于“同步已发送”的状态; 3、服务端收到客户端的连接请求,同意连接并向客户端发送确认,确认号是 ack=x+1 表示客户 端可以发送下一个数据包序号从 x+1 开始,同时选择 seq=y 的初始序列号,此时服务端处 于“同步收到”状态; 4、客户端收到服务端的确认后,向服务端发送确认信息,确认号是 ack=y+1 表示服务端可以发 送下一个数据包序号从 y+1 开始,此时客户端处于“已建立连接”的状态; 5、服务端收到客户端的确认后,也进入“已建立连接”的状态。 从三次握手的过程可以看出如果只有两次握手,那么客户端的起始序列号可以确认,服务端的起始 序列号将得不到确认。
十、TCP 如何保证可靠性
序列号和确认号机制:
TCP 发送端发送数据包的时候会选择一个 seq 序列号,接收端收到数据包后会检测数据包的完整性,如果检测通过会响应一个 ack 确认号表示收到了数据包。
超时重发机制:
TCP 发送端发送了数据包后会启动一个定时器,如果一定时间没有收到接受端的确认后,将会重新发送该数据包。
对乱序数据包重新排序:
从 IP 网络层传输到 TCP 层的数据包可能会乱序,TCP 层会对数据包重新排序再发给应用层。
丢弃重复数据:
从 IP 网络层传输到 TCP 层的数据包可能会重复,TCP 层会丢弃重复的数据包。
流量控制:
TCP 发送端和接收端都有一个固定大小的缓冲空间,为了防止发送端发送数据的速度太快导致接收端缓冲区溢出,发送端只能发送接收端可以接纳的数据,为了达到这种控制效果,TCP 用了流量控制协议(可变大小的滑动窗口协议)来实现。