http与tcp面试题3

本文详细对比了HTTP/1.0、HTTP/1.1和HTTP/2.0的区别,包括连接方式、Host字段、状态码、分块编码、缓存管理、多路复用技术及数据压缩等。同时解析了TCP三次握手和四次挥手的过程,解释了为何断开连接需要四次交互,以及仅两次握手可能导致的问题。
摘要由CSDN通过智能技术生成

1、http/1.0、http/1.1和http2.0有什么区别。

      (1)、http/1.0协议默认使用非持久连接(短连接),既在非持久连接下,服务器处理完客户端一个请求后立即断开TCP连接,下次客户端再次请求需要重新建立连接,服务器不跟踪每个客户,也不记录过去的请求。
      (2)、http/1.1协议默认使用持久连接(长连接),即在长连接的情况下,服务器处理完客户端请求后不立即关闭一个TCP连接,而是一个tcp连接允许多个客户端请求,可以传输多个WEB对象。同时也可通过配置支持非持久连接。
      (3)、http/1.1增加了Host字段,因为目前一台计算机上有多个虚拟主机共享一个IP地址,请求和相应消息都应该支持Host头域,且请求消息中没有Host头域会报(400 Bad Request)。此外服务器应该接受以绝对路径标记的资源请求。而http/1.0中每台服务器都绑定一个唯一的IP,因此,请求消息中的URL没有传递主机名(hostname)。
      (4)、增加了新的状态码100(Continue)。客户端事先发送一个只带头域的请求,如果服务因权限等拒绝请求,就回送相应401(Unauthorized)或403;如果服务器接受此请求就回送相应吗100,客户端就可以继续发送带实体的完成请求。状态码的使用,在request在发送body之前,先发送header试探一下server,如果接受body,再发送body。可以节省带宽。
      (5)、http/1.0加入了分块编码(Chunked TransferCoding)。发送方将消息分割成若干个任意大小的数据块,每个数据块在发送时都会附上块的长度,最后一个零长度的块作为消息的结束标志。这种发送允许发送方只缓存一个片段,避免缓存整个片段带来的过载。
      (6)、http/1.1在http/1.0的基础上加入了一些cache的新特性,当缓存对象Age超过Expire时变为stale对象,cache不需要直接抛弃stale对象,而是与源服务器进行重新激活(revalidation)
      (7)、http/2.0支持多路复用技术,同一个连接并发处理多个请求(NIO),http/1.1可以通过建立多个TCP解决。
      (8)、http/1.1不支持Header数据的压缩,http/2.0使用HPACK算法对数据压缩,降体积提速度。
      (9)、http/2.0请求服务器,服务器推送数据时会额外推送客户需要的资源,客户下次调用不用请求直接调用。提升速度。

2、TCP三次握手和四次挥手的流程,为什么断开连接要4次,如果握手只有两次,会出现什么。

1)、TCP三次握手:
                 第一次握手:建立连接时,客户端发送syn(Synchronize Sequence Numbers:同步序列编号)包(sny=1)到服务器,并进入SYN_SEND(请求连接)状态,等待服务器确认;
                  第二次握手:服务器接收到syn包,必须确认客户的syn(ack=j+1)(ack:确认字符,表示发来的数据已确认接收无误),同时自己也发送一个syn包(sny=k),既ack+syn包,此时服务器进入SYN_RECV(发送了ACK时的状态)状态。
                  第三次握手:客户端收到服务端发送的syn+ack包,向服务端发送确认包ack(sny+1既ack=k+1),此包发送完毕,客户端与服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

 


--------------------- 

 (2)、TCP四次挥手(连接终止协议,性质为终止协议):
                   第一次挥手:TCP客户端发送一个FIN+ACK+SEQ,用来传输关闭客户端到服务端的数据。进入FIN_WAIT1状态。
                   第二次挥手:服务端收到FIN,被动发送一个ACK(SEQ+1),进入CLOSE_WAIT状态,客户端收到服务端发送的ACK,进入FIN_WAIT2状态。
                   第三次挥手:服务器关闭客户端连接,发送一个FIN给+ACK+SEQ客户端。进入LAST_ACK状态。
                   第四次挥手:客户端发送ACK(ACK=SQE序号+1)报文确认,客户端进入TIME_WAIT状态,服务端收到ACK进入CLOSE状态。

(3)、由于TCP连接时双工的,因此每个方向都需要单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个FIN只意味着这一个方向上没有数据流动,一个TCP连接到一个FIN后仍能发送数据。首次执行FIN的一方主动关闭,另一方则执行被动关闭。当只握手两次时,就只会关闭主动发起的一端,另一个仍能发送数据。
--------------------- 
 

http socket tcp 是指通过socket建立TCP连接进行网络通信的一种方式。下面是对该面试题的回答。 TCP(传输控制协议)是一种面向连接的协议,它提供了可靠的、字节流形式的数据传输。HTTP(超文本传输协议)是一种应用层协议,它基于TCP协议,用于在Web上进行通信。 Socket是一种抽象层,它在应用层与传输层之间提供了一个接口。通过socket,应用程序可以通过TCP协议与其他计算机进行通信。 首先,HTTP是构建于TCP协议之上的,它使用TCP协议来实现可靠的数据传输。当浏览器发送一个HTTP请求时,它会通过TCP协议与服务器建立一个socket连接。然后,浏览器通过TCP连接向服务器发送HTTP请求报文。服务器收到请求报文后,会通过TCP连接向浏览器发送HTTP响应报文。最后,浏览器通过TCP连接接收响应报文并显示在界面上。 在这个过程中,socket被用于建立和维护TCP连接。通过socket,应用程序可以通过TCP协议进行数据传输。通常,一个socket连接包括服务器的IP地址和端口号,以及客户端的IP地址和端口号。 总结来说,通过socket建立的TCP连接是为了实现HTTP协议的可靠数据传输。在Web上,大部分应用都是基于HTTP协议的,因此socket和TCP在Web开发中扮演着非常重要的角色。理解socket、TCPHTTP之间的关系,对于进行网络编程和解决网络通信问题非常有帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值