2023年6月27日发(作者:)
浏览器中⽹址访问过程详解前⾔当我们在浏览器中输⼊⼀个⽹址,⽐如,浏览器就会加载出百度的主页。那么浏览器背后完成的具体是怎么样的呢?
总结起来⼤概的流程是这样的:
(1)浏览器本⾝是⼀个客户端,当你输⼊URL的时候,⾸先浏览器会去请求DNS服务器,通过DNS获取相应的域名对应的IP
(2)然后通过IP地址找到IP对应的服务器后,要求建⽴TCP连接
(3)浏览器发送完HTTP Request(请求)包后,服务器接收到请求包之后才开始处理请求包
(4)在服务器收到请求之后,服务器调⽤⾃⾝服务,返回HTTP Response(响应)包
(5)客户端收到来⾃服务器的响应后开始渲染这个Response包⾥的主体(body),等收到全部的内容随后断开与该服务器之间的TCP连接。
就可以⽤下⾯的这幅图来进⾏解释
1. DNS解析在浏览器中输⼊的是⼀个⽹址,是不能直接⽤来进⾏连接的,因⽽就要使⽤DNS地址解析将输⼊的URL⽹址转换为IP地址。查找的流程图是这样的
具体的查找过程和策略可以分为下⾯这⼏步:
(1)在浏览器中输⼊域名,操作系统会先检查⾃⼰本地的hosts⽂件是否有这个⽹址映射关系,如果有,就先调⽤这个IP地址映射,完成域名解析。
(2)如果hosts⾥没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个⽹址映射关系,如果有,直接返回,完成域名解析。
(3)如果hosts与本地DNS解析器缓存都没有相应的⽹址映射关系,⾸先会找TCP/IP参数中设置的⾸选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。
(4)如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此⽹址映射关系,则调⽤这个IP地址映射,完成域名解析,此解析不具有权威性。
(5)如果本地DNS服务器本地区域⽂件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进⾏查询,如果未⽤转发模式,本地DNS就把请求发⾄13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回⼀个负责该顶级域名服务器的⼀个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果⾃⼰⽆法解析,它就会找⼀个管理.com域的下⼀级DNS服务器地址()给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找域服务器,重复上⾯的动作,进⾏查询,直⾄找到主机。
(6)如果⽤的是转发模式,此DNS服务器就会把请求转发⾄上⼀级DNS服务器,由上⼀级服务器进⾏解析,上⼀级服务器如果不能解析,或找根DNS或把转请求转⾄上上级,以此循环。不管是本地DNS服务器⽤是是转发,还是根提⽰,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。2. Socket建⽴连接当我们输⼊这样⼀个请求时,⾸先要建⽴⼀个socket连接,因为socket是通过ip和端⼝建⽴的,所以之前还有⼀个DNS解析过程,把变成ip,如果url⾥不包含端⼝号,则会使⽤该协议的默认端⼝号。3. 发送HTTP请求连接成功建⽴后,开始向web服务器发送请求,当浏览器向Web服务器发出请求时,它向服务器传递了⼀个数据块,也就是请求信息,HTTP请求信息由3部分组成:
(1)请求⽅法URI协议/版本
(2)请求头(Request Header)
(3)请求正⽂
下⾯是⼀个HTTP请求的例⼦:GET / HTTP/1.1Accept:image//jpeg,*/*Accept-Language:zh-cnConnection:Keep-AliveHost:localhostUser-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)Accept-Encoding:gzip,deflate
username=jinqiao&password=12343.1 请求⽅法URI协议/版本请求的第⼀⾏是“⽅法URL议/版本”:GET/ HTTP/1.1``
以上代码中“GET”代表请求⽅法,/表⽰URI,HTTP/1.1“`代表协议和协议的版本。
根据HTTP标准,HTTP请求可以使⽤多种请求⽅法。例如:HTTP1.1⽀持7种请求⽅法:GET、POST、HEAD、OPTIONS、PUT、DELETE和TARCE。在Internet应⽤中,最常⽤的⽅法是GET和POST。
URL完整地指定了要访问的⽹络资源,通常只要给出相对于服务器的根⽬录的相对⽬录即可,因此总是以“/”开头,最后,协议版本声明了通信过程中使⽤HTTP的版本。3.2 请求头(Request Header)请求头包含许多有关的客户端环境和请求正⽂的有⽤信息。例如,请求头可以声明浏览器所⽤的语⾔,请求正⽂的长度等。Accept:image//jpeg.*/*Accept-Language:zh-cnConnection:Keep-AliveHost:localhostUser-Agent:Mozila/4.0(compatible:MSIE5.01:Windows NT5.0)Accept-Encoding:gzip,deflate.3.3 请求正⽂请求头和请求正⽂之间是⼀个空⾏,这个⾏⾮常重要,它表⽰请求头已经结束,接下来的是请求正⽂。请求正⽂中可以包含客户提交的查询字符串信息:username=jinqiao&password=1234在以上的例⼦的HTTP请求中,请求的正⽂只有⼀⾏内容。当然,在实际应⽤中,HTTP请求正⽂可以包含更多的内容。3.4 HTTP请求⽅法:GET⽅法与POST⽅法3.4.1 GET⽅法3.4.2 POST⽅法POST⽅法是GET⽅法的⼀个替代⽅法,它主要是向Web服务器提交表单数据,尤其是⼤批量的数据。POST⽅法克服了GET⽅法的⼀些缺点。通过POST⽅法提交表单数据时,数据不是作为URL请求的⼀部分⽽是作为标准数据传送给Web服务器,这就克服了GET⽅法中的信息⽆法保密和数据量太⼩的缺点。因此,出于安全的考虑以及对⽤户隐私的尊重,通常表单提交时采⽤POST⽅法。3.5 各种HTTP请求的含义GET
通过请求URI得到资源
POST
⽤于添加新的内容
PUT
⽤于修改某个内容
DELETE
删除某个内容
CONNECT
⽤于代理进⾏传输,如使⽤SSL
OPTIONS
询问可以执⾏哪些⽅法
PATCH
部分⽂档更改
PROPFIND
查看属性
PROPPATCH
设置属性
MKCOL
创建集合(⽂件夹)
COPY
拷贝
MOVE
移动
LOCK
加锁
UNLOCK
解锁
TRACE
⽤于远程诊断服务器
HEAD
类似于GET, 但是不返回body信息,⽤于检查对象是否存在,以及得到对象的元数据4. 服务器响应应答 web服务器收到这个请求,进⾏处理。从它的⽂档空间中搜索⼦⽬录mydir的⽂件。如果找到该⽂件,Web服务器把该⽂件内容传送给相应的Web浏览器。为了告知浏览器,Web服务器⾸先传送⼀些HTTP头信息,然后传送具体内容(即HTTP体信息),HTTP头信息和HTTP体信息之间⽤⼀个空⾏分开。4.1 HTTP响应报⽂头HTTP应答与HTTP请求相似,HTTP响应也由3个部分构成,分别是:
(1)协议状态版本代码描述
(2)响应头(Response Header)
(3)响应正⽂
下⾯是⼀个HTTP响应的例⼦:HTTP/1.1 200 OKServer:Apache Tomcat/5.0.12Date:Mon,6Oct2003 13:23:42 GMTContent-Length:112
HTTP/1.1 200 OK
响应头(Response Header)响应头也和请求头⼀样包含许多有⽤的信息,例如服务器类型、⽇期时间、内容类型和长度等:Server:Apache Tomcat/5.0.12Date:Mon,6Oct2003 13:13:33 GMTContent-Type:text/htmlLast-Moified:Mon,6 Oct 2003 13:23:42 GMTContent-Length:112响应正⽂响应正⽂就是服务器返回的HTML页⾯:
2XX-成功类(Successful),表⽰⽤户请求被正确接收,理解和处理例如:200 OK
3XX - 重定向类(Redirection),表⽰请求没有成功,客户必须采取进⼀步的动作。
4XX - 客户端错误(Client Error),表⽰客户端提交的请求有错误 例如:404 NOT Found,意味着请求中所引⽤的⽂档不存在。
5XX - 服务器错误(Server Error)表⽰服务器不能完成对请求的处理:如 500
对于我们Web开发⼈员来说掌握HTTP应答码有助于提⾼Web应⽤程序调试的效率和准确性。5. 关闭连接当应答结束后,Web浏览器与Web服务器必须断开,以保证其它Web浏览器能够与Web服务器建⽴连接。
发布者:admin,转转请注明出处:http://www.yc00.com/news/1687866212a52087.html
评论列表(0条)