http请求的流程

本文深入浅出地介绍了HTTP请求的全过程,从域名解析到TCP三次握手,再到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. 浏览器对页面进行渲染呈现给用户

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值