前端网络相关的面试题

get和post经过几次tcp连接?

HTTP的GET和POST请求都是基于TCP协议的,因此在发送请求之前都需要建立TCP连接。TCP连接的建立通常被称为三次握手(Three-way Handshake)。

第一次握手:客户端发送一个SYN包(同步序列编号)到服务器,等待服务器确认。这时,客户端处于SYN_SENT状态。

第二次握手:服务器收到SYN包后,会以一个SYN+ACK包作为应答,确认客户端的SYN包同时也向客户端发送SYN请求。这时,服务器处于SYN_RCVD状态。

第三次握手:客户端收到服务器的SYN+ACK包后,会发送一个ACK包给服务器,确认服务器的SYN请求。这时,客户端处于ESTABLISHED状态。

在这个过程完成后,客户端和服务器就建立了TCP连接,可以开始进行数据传输。所以无论是GET还是POST请求,都至少需要经过一次完整的TCP连接过程。然后在数据传输完成后,还需要通过四次挥手(Four-way Handshake)来关闭TCP连接。

需要注意的是,HTTP/1.1版本开始默认开启了持久连接(Persistent Connection),也就是说在一个TCP连接上可以发送多个HTTP请求,不需要每次请求都重新建立TCP连接。

tcp连接然后怎么区分两个请求?

在一个TCP连接中,可以发送多个HTTP请求,这是通过HTTP消息的格式来实现的。每个HTTP请求和响应都是由一系列的头部和一个可选的体部组成,头部和体部之间由一个空行分隔。

HTTP请求的头部包含了请求的方法(如GET或POST)、请求的URI和HTTP版本。响应的头部则包含了HTTP版本、状态码和状态消息。头部还可以包含其他的字段,如Content-Type、Content-Length等,这些字段可以提供关于体部内容的信息。

当服务器收到一个HTTP请求后,它会解析请求的头部,根据头部的信息来处理请求的体部(如果存在的话)。然后,服务器会发送一个HTTP响应,响应的头部包含了处理请求的结果,响应的体部则包含了请求的结果。

因此,即使在一个TCP连接中发送了多个HTTP请求,服务器也可以通过解析每个请求的头部来区分和处理这些请求。同样,客户端也可以通过解析每个响应的头部来区分和处理这些响应。

此外,HTTP/1.1版本引入了管道化(pipelining)机制,允许客户端在收到上一个响应之前就发送下一个请求。这可以进一步提高HTTP的性能,但也需要服务器能够正确地处理和响应这些并发的请求。

cookies怎么跨域?

Cookie跨域主要涉及到两个概念:同源策略和跨域资源共享(CORS)。

同源策略:出于安全考虑,浏览器会限制一个网页中的脚本与其他源(协议、域名、端口)的交互。这就是所谓的同源策略。在同源策略下,Cookie、LocalStorage、IndexedDB等各种浏览器的存储技术都无法读取其他源的数据。

跨域资源共享(CORS):CORS是一种浏览器和服务器交互的方式,可以让服务器允许来自其他源的请求。在CORS中,服务器可以在响应头中设置Access-Control-Allow-Origin字段,指定哪些源可以访问该服务器的资源。

对于Cookie的跨域,需要满足以下条件:
请求方设置withCredentials为true。这是一个XMLHttpRequest对象的属性,表示是否允许发送Cookie。默认情况下,跨域请求不会发送Cookie,除非设置了这个属性。

响应方设置Access-Control-Allow-Origin为请求方的源,并且不能使用通配符*。这是因为浏览器不允许在发送Cookie时使用通配符。

响应方设置Access-Control-Allow-Credentials为true。这表示服务器允许接收Cookie。

满足以上条件后,就可以在跨域请求中发送和接收Cookie了。但需要注意的是,这种方式只能实现单个源的跨域,如果需要实现多个源的跨域,服务器需要动态地设置Access-Control-Allow-Origin字段。

你可能感兴趣的:(前端,网络)