WEB页面解析流程全分析

1. 理解域名解析的整个过程

解析过程:
(1)向ISPDNS或本地电脑网络设置的DNS服务器发起查询www.baidu.com域名请求
(2)ISPDNS接收到请求后,检查自己的缓存中是否有该域名对应的地址记录。若存在 记录直接返回ip地址,但此记录会被标记为非权威服务器的应答。
(3)若DNS服务器没有此域名的记录,ISPDNS会从配置文件中读取13个根域名服务器的地址(【A-M】.root-servers.net)
在这里插入图片描述
(4)根据所处位置,负载情况,ISPDNS向其中一台根域名服务器的镜像服务器发起请求
(5)根域名服务器接收到请求后,解析出此请求的顶级域名是com. ,然后返回com域中的NS记录,一般情况下是13台主机名和ip(隐藏)
在这里插入图片描述
(6)ISPDNS收到返回结果后向其中一台再次发起请求
(7)com域的服务器收到请求后解析出此请求的二级域是baidu.com,所以检索此域的NS记录,将结果返回
(8)ISPDNS收到返回结果后,向baidu.com这个域的权威服务器发起请求
在这里插入图片描述
(9)baidu.com域中的权威服务器收到请求后,查询一下发现了有www的这台主机,并将这台主机的ip返回给ISPDNS
在这里插入图片描述
(10)ISPDNS收到返回结果后,将其返回给客户端,并把这个记录保存在自己的缓存中
在这里插入图片描述
解析图解:

在这里插入图片描述

2. 理解web页面请求的整个过程,绘制流程图(nginx处理的11个过程)

请求过程:
(1)DNS解析

  1. ·查看浏览器缓存

  2. ·查看hosts文件缓存

  3. ·查看路由器缓存

  4. ·查看ISP解析服务器缓存

  5. ·使用ISP-DNS发起递归查询请求

  6. ·客户端获取网址对应的IP地址

(2)建立TCP套接字,发起TCP连接

  1. ·三次握手

(3)服务器永久重定向响应
(4)浏览器跟踪重定向地址并向web服务器发送一个http请求
(5)服务器接受请求

(6)服务器处理请求(Nginx)

  1. ·NGX_HTTP_POST_READ_PHASE 接收到完整的HTTP头部后处理的阶段

  2. ·NGX_HTTP_SERVER_REWRITE_PHASE 修改URI的阶段,用于重定向

  3. ·NGX_HTTP_FIND_CONFIG_PHASE 根据URI寻找匹配前的location块配置项

  4. ·NGX_HTTP_REWRITE_PHASE 上一阶段找到location块后再修改URI

  5. ·NGX_HTTP_POST_REWRITE_PHASE 防止重写URL后导致的死循环

  6. ·NGX_HTTP_PREACCESS_PHASE 下一阶段之前的准备

  7. ·NGX_HTTP_ACCESS_PHASE让HTTP模块判断是否允许这个请求进入Nginx服务器

  8. ·NGX_HTTP_POST_ACCESS_PHASE 向用户发送拒绝服务的错误码

  9. ·NGX_HTTP_TRY_FILES_PHASE 为访问静态文件资源而设置

  10. ·NGX_HTTP_CONTENT_PHASE 处理HTTP请求内容的阶段

  11. ·NGX_HTTP_LOG_PHASE 处理完请求后的日志记录阶段

(7)服务器返回HTML响应
(8)浏览器接收响应后开始解析渲染

  1. ·构建dom树,采用深度遍历方法

  2. ·将CSS解析成CSS Rule Tree

  3. ·根据DOM树和CSSOM构建Render树

  4. ·布局Render树

  5. ·绘制Render树

3. 学习http协议中的字段及含义

HTTP请求/响应报文结构:
· 请求行 · 响应行
· 请求头 · 响应头
· 请求体 · 空行
· 响应体
请求报文示例:
在这里插入图片描述
响应报文示例:
在这里插入图片描述
(1)请求方法:POST、GET、PUT、DELETE
(2)请求URL:http://chapter17/user.html
(3)HTTP协议及版本:HTTP1.1
(4)Accept:表示客户端期望服务器返回的媒体格式,但由于服务端可能没有所期望的资源类型,所以Accept会设置多种类型,并且设置优先级
(5)Accept-Charset:表示客户端期望服务端返回的内容的编码格式。可指定多个编码。
(6)Accept-Language:表示客户端期望返回的内容语言。
(7)Content-Type:表示内容的媒体类型和编码格式。GET方法通常使用text/html格式POST方法通常使用application/x-www-form-urlencoded。
(8)Content-Language:此字段是对Accept-Language的应答。服务器通过此字段告知客户端返回的Body信息的语言是什么
(9)Content-Length:表示传输的请求/响应的Body长度。GET由于没有Body所以无这个字段。当body太大时,采用分块传输也不需要此字段。
(10)Content-Location:表示服务器告知客户端请求资源的其他可选地址
(11)Content-MD5:此字段用来对Body内容进行校验。
(12)Date:若服务器没有缓存则表示响应报文的即时生成时间,如果服务器设有缓存,则表示响应内容被缓存的时间。
(13)Age:表示资源已被缓存的时间,单位是秒
(14)Expires:表示服务器告知客户端资源何时失效。
(15)ETag:表示资源标签,每个资源可以提供多个标签信息常用来判断资源有效性。
(16)Allow:表示资源支持访问的HTTP Method类型。
(17)Connection:表示客户端和服务器协商连接的属性,常用值是close,告知对方在当前请求结束后关闭连接
(18)Except:用于请求发送之前向服务器询问许可。
(19)From:一般用来标记请求发起者的邮件地址,相当于给请求赋予一个责任人。
(20)Host:RFC协议规定所有HTTP请求必须携带Host头,即使没有值也要附加上一个空串。表示发起请求的主机地址。
(21)Last-Modified:标记资源的最近修改时间。
(22)IF-Modified-Since:浏览器向服务器请求静态资源时,如果浏览器本地已有缓存,就会携带此头,值为资源的Last-Modified时间,询问服务器自这个时间之后有没有被修改。
(23)Range:表示客户端请求资源的一部分时指定的请求字节范围。
(24)Content-Range:表示服务器响应请求时,传输的Body数据在整体资源块中的字节范围。
(25)Location:表示服务器向客户端发送响应报文302跳转时,指向目标URL
(26)Max-Forwards:表示限定网关或者代理的层数,也就是最大转发次数。
(27)Referer:常用于同源限制策略,表示请求发起来源的URI,也就是当前页面资源的父页面。通过追踪Referer可得出资源页面之间复杂的跳转链。
(28)Server:用于返回服务器相关的软件信息,来告知客户端当前的HTTP服务是由某某软件提供的。
(29)User-Agent:携带当前的用户代理信息,一般包含浏览器、浏览器内核和操作系统的版本型号信息。
(30)Transfer-Encoding:表示响应包传送的Body信息时需要对Body数据采取何种变换。
(31)Upgrade:表示服务器建议客户端升级传输协议
(32)Vary:此字段用于缓存控制,再请求包中增加此头可以告知缓存服务器对不同的Vary参数的响应使用不同的缓存单元。
(33)Via:此字段用来标志一个请求经过的网关路由节点,表示网关信息
(34)Warning:用于在响应中添加一些附加的警告信息,包含错误码和错误说明。
(35)WWW-Authenticate:是401 Unauthorized错误码返回时必须携带的头,该头会携带一个问题Challenge给客户端,告知客户端需要携带这个问题的答案来请求服务器才可以继续访问目标资源。
(36)Authorization:对于某些需要特殊权限才能访问的资源需要客户端在请求里提供用户名密码的认证信息。它是对WWW-Authenticate的应答
(37)cache-control:这个字段既可用于请求也可用于响应。
当字段的值为no-cache时表示不允许缓存,对于请求来说服务器不得使用缓存内容直接返回,对于响应来说,客户端不得缓存响应的资源内容。
当字段的值为no-store时,表示不要持久化请求/响应数据到其他地方,这种信息是敏感的,要保持它的易失性。
当字段的值为no-transform时表示对方不要转换数据。
当字段的值为only-if-cached时,只用于请求头,告知服务器只要那些已经缓存的内容不要去reload。
当字段的值为max-stale时,只用于请求头,表示客户端允许服务器返回缓存已过期的资源内容,但是限定了最大过期时间。
当字段的值为min-fresh时,只用于请求头,表示客户端限制服务器不要那些即将过期的资源内容。
当字段的值为public时,只用于响应头,表示允许客户端缓存响应信息,并可以给别人使用。
当字段的值为private时,只用于响应头,表示仅允许客户端缓存响应信息给自己使用,不得分享给别人。

4. 学习http请求方法以及返回状态码的类型和含义

1xx:信息
100 Continue 服务器仅接收到部分请求,但是一旦服务器并没有拒绝该请求,客户端应该继续发送其余的请求
101 Switching Protocols 服务器转换协议,服务器将遵从客户的请求转换到另外一种协议

2xx:成功
200 OK 请求成功
201 Created 请求被创建完成,同时新的资源被创建
202 Accepted 供处理的请求已被接受,但是处理未完成
203 Non-authoritative Information
文档已经正常地返回,但一些应答头可能不正确,因为使用的是文档的拷贝
204 No Content 没有新文档,浏览器应该继续显示原来的文档。如果用户定期的刷新页面,而Server可以确定用户文档足够新,这个状态代码是很有用的
205 Reset Content 没有新文档,但浏览器应该重置它所显示的内容,用来强制浏览器清出表单输入内容
206 Partial Content 客户发送了一个带有Range头的GET请求,服务器完成了它

3xx:重定向
300 Multiple Choices 多重选择,链接列表,用户可以选择某连接到达目的地,最多允许五个地址
301 Moved Permanently 所请求的页面已经转移到新的URL
302 Found 所请求的页面已经临时转移至新的URL
303 See Other 所请求的页面可在别的URL下被找到。
304 Not Modified 未按预期修改文档,客户端有缓冲的文档开发出了一个条件性的请求(一般是提供IF-Modified-Since头表示客户只想比指定日期更新的文档),服务器告诉客户,原来缓冲的文档还可以继续使用。
305 Use Proxy 客户请求的文档应该通过Location头所指明的代理服务器提取
306 Unused 此代码而被用于前一版本,目前已不再使用但是代码依然保留。
307 Temporary Redirect 此请求的页面已经临时转移至新的URL

4xx:客户端错误
400 Bad Request 服务器未能理解请求
401 Unauthorized 被请求的页面需要用户名和密码
402 Payment Required 此代码尚无法使用
403 Forbidden 对被请求的页面需要用户名和密码
404 Not Found 服务器无法找到被请求的页面
405 Method Not Allowed 请求中指定的方法不被允许
406 Not Acceptable 服务器生成的响应无法被客户端所接受
407 Proxy Authentication Required 用户必须首先使用代理服务器进行验证,这样请求才会被处理
408 Request Timeout 请求超出了服务端的等待时间
409 Conflict 由于冲突、请求无法被完成
410 Gone 被请求的页面不可用
411 Length Required “Content-Length”未被定义,如果无此内容服务器不会接受请求
412 Precondition Failed 请求中的前提条件被服务器评估为失败
413 Request Entry Too Large 由于请求的实体太大,服务器不接受请求
414 Request-url Too Long 由于URL太长,服务器不会接受请求
415 Unsupported Media Type 由于媒介类型不支持,服务器不接受请求
416 服务器不能满足客户在请求中指定的Range
417 Expectation Failed

5xx:服务器错误
500 Internal Server Error 请求未完成,服务器遇到不可预知的情况
501 Not Implemented 请求未完成,服务器不支持所请求的功能
502 Bad Gateway 请求未完成,服务器从上游服务器收到一个无效的响应
503 Service Unavaliable 请求未完成,服务器临时过载或宕机
504 Gateway Timeout 网关超时
505 HTTP Version Not Supported 服务器不支持请求中指明的HTTP协议版本

发布了21 篇原创文章 · 获赞 14 · 访问量 4075

猜你喜欢

转载自blog.csdn.net/m0_38103658/article/details/101538556