http请求详解(看完必懂)

来源:07素材网 10月16日 20:53

1.域名解析

(2)发起TCP的三次握手

(3)建立TCP连接后发起http请求

(4)服务器响应http请求,浏览器得到HTML代码

(5)浏览器解析HTML代码,并请求HTML代码中的资源

(6)浏览器对页面进行渲染呈现给用户

(7)连接结束

2.用什么解析成IP?

从网址到IP地址的转换,称为DNS解析,DNS解析是一个递归查询的过程,具体步骤如下(以www.google.com为例):

(1)首先在本地域名服务器(最近的一台DNS服务器)中查询IP地址

(2)如果没有找到,本地域名服务器会向根域名服务器发送一个请求

(3)如果根域名服务器中也不存在该域名,但判定这个域名属于“com”域,则本地域名服务器会向com顶级域名服务器发送一个请求

(4)如果com顶级域名服务器没有找到该域名,但判定这个域名属于“google.com”域,则本地域名服务器会向google.com域名服务器发送一个请求,以此类推

(5)直到本地域名服务器得到域名对应的IP地址,并将其缓存到本地,供下次查询使用

(6)综上,网址的解析过程为.->.com->google.com->www.google.com.。

3.Tcp三次握手?四次挥手?

三次握手的必要性:为了保证服务器能接收到客户端的信息并做出正确的应答而进行前两次(第一次和第二次)握手,为了保证客户端能够接收到服务端的信息并能做出正确的应答而进行后两次(第二次和第三次)握手。

上图部分标志说明:

Description

(1)ACK:TCP规定,只有当ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1

(2)SYN(SYNchronization):在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这个是一个连接请求报文。对方若同意建立连接,则响应报文中SYN=1,ACK=1。因此,SYN置1表示这是一个连接请求或连接接受报文。

(3)FIN(finish):终结的意思,用来释放一个连接。当FIN=1时,表明此报文段的发送方的数据已经发送完毕,并请求释放连接。

4.三次握手说明:

(1)第一次握手:建立连接。客户端发送连接请求报文段,将SYN位置1,序列号seq(sequence number)为x;然后,客户端进入SYN_SEND状态,等待服务器的确认。

(2)第二次握手:服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,ACK位置1,确认号ack(acknowledgement number)为x 1;同时,自己还要发送SYN请求信息,将SYN位置1,序列号seq为y;服务器将上述SYN ACK报文段一并发送给客户端,此时服务器进入SYN_RECV状态。

(3)第三次握手:客户端收到服务器的SYN ACK报文段。然后将确认号ack设置为y 1,向服务器发送ACK报文段。这个报文段发送完毕后,客户端和服务器都进入ESTABLISHED状态,完成TCP三次握手,之后可以开始传数据。

5.四次挥手:当客户端和服务器通过三次握手建立了TCP连接之后,当数据传输完毕,就要断开TCP连接,这个过程称为四次挥手。四次挥手说明:

(1)第一次挥手:主机1(可以是客户端,也可以是服务器)设置序列号seq为u,向主机2发送一个FIN报文段;此时,主机1进入FIN_WAIT状态,这表示主机1没有数据要发送给主机2了。

(2)第二次挥手:主机2收到了主机1发送的FIN报文段,向主机1回复一个ACK报文段,确认号ack为u 1,序列号seq为v;主机2进入CLOSE_WAIT状态;主机1收到主机2发送的ACK报文段之后,进入FIN_WAIT_2状态。

(3)第三次挥手:主机2向主机1发送FIN报文段,设置序列号seq为w,确认号ack为u 1,请求关闭连接,同时主机2进入LAST_ACK状态

(4)第四次挥手:主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,确认号ack为w 1,序列号seq为u 1,然后主机1进入TIME_WAIT状态;主机2收到主机1的ACK报文段以后,就关闭连接;此时,主机1等待2MSL(MSL,最长报文段寿命)后依然没有收到回复,则证明服务端已经正常关闭,那么主机1也可以关闭连接了。

附:

SYN,ACK是标志位
SEQ,AN是数据包序号
SYN=1, ACK=0, SEQ=200 的意思是:发送的为一个SYN请求,发送端的初始数据包序号为200
SYN=1, ACK=1, SEQ=4800, AN=201 的意思是:接收端的确认信息,且接收端的初始数据包序号为4800
原文出处:https://www.ltonus.com/Fenxiang/http-request-detail.html
版权声明:本文来源地址若非本站均为转载,若侵害到您的权利,请及时联系我们,我们会在第一时间进行处理。

头条

在使用SQLite3时遇到的几个坑

在使用SQLite3时遇到的几个坑

《本打算在SQLite3数据库里执行一个查询语句,使用的是php语言,起初遇到的是权限问题: permission denied,因为SQLite3数据库文件和PHP执行者属于两个不同的用户,首先需要对这个文件执行mode 777的权限开放,然后,又遇到了下面这样的PHP错误