当前位置:   article > 正文

浏览器中网址访问过程详解

网址访问

https://blog.csdn.net/fuziwang/article/details/83825573

前言
当我们在浏览器中输入一个网址,比如www.google.cn,浏览器就会加载出百度的主页。那么浏览器背后完成的具体是怎么样的呢? 
总结起来大概的流程是这样的: 
(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)在浏览器中输入www.google.cn域名,操作系统会先检查自己本地的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服务器地址(google.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找google.com域服务器,重复上面的动作,进行查询,直至找到www.google.com主机。 
(6)如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。

2. Socket建立连接
当我们输入这样一个请求时,首先要建立一个socket连接,因为socket是通过ip和端口建立的,所以之前还有一个DNS解析过程,把www.google.com变成ip,如果url里不包含端口号,则会使用该协议的默认端口号。

3. 发送HTTP请求
连接成功建立后,开始向web服务器发送请求,当浏览器向Web服务器发出请求时,它向服务器传递了一个数据块,也就是请求信息,HTTP请求信息由3部分组成: 
(1)请求方法URI协议/版本 
(2)请求头(Request Header) 
(3)请求正文 
下面是一个HTTP请求的例子:

  1. GET /sample.jsp HTTP/1.1
  2. Accept:image/gif.image/jpeg,*/*
  3. Accept-Language:zh-cn
  4. Connection:Keep-Alive
  5. Host:localhost
  6. User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)
  7. Accept-Encoding:gzip,deflate
  8. username=jinqiao&password=1234


3.1 请求方法URI协议/版本
请求的第一行是“方法URL议/版本”:GET/sample.jsp HTTP/1.1`` 
以上代码中“GET”代表请求方法,/sample.jsp表示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)
请求头包含许多有关的客户端环境和请求正文的有用信息。例如,请求头可以声明浏览器所用的语言,请求正文的长度等。

  1. Accept:image/gif.image/jpeg.*/*
  2. Accept-Language:zh-cn
  3. Connection:Keep-Alive
  4. Host:localhost
  5. User-Agent:Mozila/4.0(compatible:MSIE5.01:Windows NT5.0)
  6. Accept-Encoding:gzip,deflate.


3.3 请求正文
请求头和请求正文之间是一个空行,这个行非常重要,它表示请求头已经结束,接下来的是请求正文。请求正文中可以包含客户提交的查询字符串信息:

username=jinqiao&password=1234
1
在以上的例子的HTTP请求中,请求的正文只有一行内容。当然,在实际应用中,HTTP请求正文可以包含更多的内容。

3.4 HTTP请求方法:GET方法与POST方法
3.4.1 GET方法
GET方法是默认的HTTP请求方法,我们日常用GET方法来提交表单数据,然而用GET方法提交的表单数据只经过了简单的编码,同时它将作为URL的一部分向Web服务器发送,因此,如果使用GET方法来提交表单数据就存在着安全隐患上。例如 
Http://127.0.0.1/login.jsp?Name=zhangshi&Age=30&Submit=%cc%E+%BD%BB 
从上面的URL请求中,很容易就可以辩认出表单提交的内容。(?之后的内容)另外由于GET方法提交的数据是作为URL请求的一部分所以提交的数据量不能太大

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的文件index.html。如果找到该文件,Web服务器把该文件内容传送给相应的Web浏览器。为了告知浏览器,Web服务器首先传送一些HTTP头信息,然后传送具体内容(即HTTP体信息),HTTP头信息和HTTP体信息之间用一个空行分开。

4.1 HTTP响应报文头
HTTP应答与HTTP请求相似,HTTP响应也由3个部分构成,分别是: 
(1)协议状态版本代码描述 
(2)响应头(Response Header) 
(3)响应正文 
下面是一个HTTP响应的例子:

  1. HTTP/1.1 200 OK
  2. Server:Apache Tomcat/5.0.12
  3. Date:Mon,6Oct2003 13:23:42 GMT
  4. Content-Length:112
  5. <html>
  6.     <head>
  7.         <title>HTTP响应示例<title>
  8.     </head>
  9.     <body>
  10.         Hello HTTP!
  11.     </body>
  12. </html>

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/808735
推荐阅读
相关标签
  

闽ICP备14008679号