http请求的流程

浅谈HTTP的请求过程。HTTP的请求过程大致为6步。

  1. 域名解析
什么是域名?
	域名是用来定位网站的 独一无二的 名字。
	分析	http://mail.163.com/index.html
	
	协议		 	  					  http://	(超文本传输协议)
	服务器名							 mail
	域名			  					  163.com
	网站名		  	 					  mail.163.com
	/ 		       						这是根目录
	index.html	   						根目录下的默认网页
    http://mail.163.com/index.html		URL,统一资源定位符,全球性地址

域名解析的目的
	获取到服务器的ip地址
	
域名解析的流程
	1、浏览器首先解析url地址,然后搜索自身的DNS缓存。如果自身的缓存中有对应的条目且没有过期,则解析到此结束。
	2、自身没有对应的条目、或者过期;浏览器会搜索操作系统自身的DNS缓存,如果找到且没有过期则解析到此结束。
	3、如果自身的DNS缓存也没有找到,那么尝试读取hosts文件(C:\Windows\System32\drivers\etc),看看这里面有没有该域名对应的IP地址,如果有则解析成功。 
	4、如果没有找到对应的条目,浏览器就会发起一个DNS的系统调用,就会向本地配置的首选DNS服务器发起域名解析请求直到获取至服务器的IP地址。
	
	注:一般情况下以上步骤就可以解析成功,如不成功会进行以下步骤
	
	5、操作系统会查找NetBIOS name Cache(NetBIOS名称缓存,就存在客户端电脑中,这个缓存有最近一段时间内和我成功通讯的计算机的计算机名和Ip地址)什么情况下该步能解析成功呢?就是该名称正好是几分钟前和我成功通信过,那么这一步就可以成功解析。 
	6、如果第5步也没有成功,那会查询WINS 服务器(是NETBIOS名称和IP地址对应的服务器)。
	7、如果第6步也没有查询成功,那么客户端就要进行广播查找。 
	8、如果第7步也没有成功,那么客户端就读取LMHOSTS文件(和HOSTS文件同一个目录下,写法也一样)


如果第8步还没有解析成功,那么就宣告这次解析失败,那就无法跟目标计算机进行通信。只要这8步中有一步可以解析成功,那就可以成功和目标计算机进行通信。
  1. TCP的三次握手
TCP(Transmission Control Protocol 传输控制协议)
拿到域名对应的IP地址之后,User-Agent(一般是指浏览器)会以一个随机端口(1024 < 端口 < 65535)向服务器的WEB程序(常用的有httpd,nginx等)80端口发起TCP的连接请求。这个连接请求(原始的http请求经过TCP/IP4层模型的层层封包)到达服务器端后(这中间通过各种路由设备,局域网内除外),进入到网卡,然后是进入到内核的TCP/IP协议栈(用于识别该连接请求,解封包,一层一层的剥开),还有可能要经过Netfilter防火墙(属于内核的模块)的过滤,最终到达WEB程序,最终建立了TCP/IP的连接。

在这里插入图片描述

1、Client首先发送一个连接试探,ACK=0 表示确认号无效,SYN = 1 表示这是一个连接请求或连接接受报文,同时表示这个数据报不能携带数据,seq = x 表示Client自己的初始序号(seq = 0 就代表这是第0号包),这时候Client进入syn_sent状态,表示客户端等待服务器的回复。

2、Server监听到连接请求报文后,如同意建立连接,则向Client发送确认。TCP报文首部中的SYN 和 ACK都置1 ,ack = x + 1表示期望收到对方下一个报文段的第一个数据字节序号是x+1,同时表明x为止的所有数据都已正确收到(ack=1其实是ack=0+1,也就是期望客户端的第1个包),seq = y 表示Server 自己的初始序号(seq=0就代表这是服务器这边发出的第0号包)。这时服务器进入syn_rcvd,表示服务器已经收到Client的连接请求,等待client的确认。

3、Client收到确认后还需再次发送确认,同时携带要发送给Server的数据。ACK 置1 表示确认号ack= y + 1 有效(代表期望收到服务器的第1个包),Client自己的序号seq= x + 1(表示这就是我的第1个包,相对于第0个包来说的),一旦收到Client的确认之后,这个TCP连接就进入Established状态,就可以发起http请求了。
  1. 发起http请求

Http会发起一次请求request报文,它包括:请求行(request line)、请求头部(header)、空行和请求数据这四个部分。

浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器

  1. 服务器请求响应

服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器

  1. 浏览器解析html代码

  2. 浏览器对页面进行渲染呈现给用户

猜你喜欢

转载自blog.csdn.net/KinCae/article/details/94553651