网页解析的全经过,HTTP完整请求进度

By admin in 4858美高梅 on 2019年4月10日

输入url用户按下回车键
主要的流水线下边那张图已经充鲜明显了。下图根本透过Navigation Timing
API在客户端收集品质数据,并用XMLHttpRequest 或任何技术传送到服务端。同时,该API使您能够衡量在此之前难以赢得的数码,如卸载前七个页面包车型大巴岁月,在域名解析上的时辰,在进行load事件处理器上海消防费的总时间等。

一.用户输入网站,浏览器发起DNS查询请求

一.用户输入网站,浏览器发起DNS查询请求

首要发明:谢谢原来的小说作者——沐风的心,想看原稿请戳那里!小编借鉴了初稿的页面请求流程,原作见时序图之后正文。

4858美高梅 1

用户访问网页,DNS服务器(域名解析系统)会依照用户提供的域名查找对应的IP地址。

用户访问网页,DNS服务器(域名解析系统)会基于用户提供的域名查找对应的IP地址。

第三发明:谢谢原来的小说我——1行两行,想看原稿请戳那里!小编借鉴了初稿的欧洲经济共同体HTTP请求流程。

从上到下依据事件爆发的先后顺序,那个事件的列表如下:

域名解析服务器是基于UDP协议落到实处的三个应用程序,经常经过监听53端口来取得客户端的域名解析呼吁。DNS查找进度如下:

域名解析服务器是基于UDP协议落实的2个应用程序,日常经过监听5三端口来收获客户端的域名解析呼吁。DNS查找进程如下:

日增了时序图,有不妥之处,欢迎指正~~
(未完待续,须要增添后端服务器框架之中处理)

navigationStart 加载起始时间
redirectStart 重定向开始时间(如果发生了HTTP重定向,每次重定向都和当前文档同域的话,就返回开始重定向的fetchStart的值。其他情况,则返回0)
redirectEnd 重定向结束时间(如果发生了HTTP重定向,每次重定向都和当前文档同域的话,就返回最后一次重定向接受完数据的时间。其他情况则返回0)
fetchStart 浏览器发起资源请求时,如果有缓存,则返回读取缓存的开始时间
domainLookupStart 查询DNS的开始时间。如果请求没有发起DNS请求,如keep-alive,缓存等,则返回fetchStart
domainLookupEnd 查询DNS的结束时间。如果没有发起DNS请求,同上
connectStart 开始建立TCP请求的时间。如果请求是keep-alive,缓存等,则返回domainLookupEnd
(secureConnectionStart) 如果在进行TLS或SSL,则返回握手时间
connectEnd 完成TCP链接的时间。如果是keep-alive,缓存等,同connectStart
requestStart 发起请求的时间
responseStart 服务器开始响应的时间
domLoading 浏览器把document.readyState设置为“loading”的时间点,开始构建dom树的时间点;
domInteractive 浏览器把document.readyState设置为“interactive”的时间点,DOM树创建结束;
domContentLoadedEventStart 开始触发DomContentLoadedEvent事件的时间
domContentLoadedEventEnd DomContentLoadedEvent事件结束的时间
domComplete 从图中看是dom渲染完成时间,浏览器把document.readyState设置为“complete”的时间点;
loadEventStart 触发load的时间,如没有则返回0
loadEventEnd load事件执行完的时间,如没有则返回0
unloadEventStart unload事件触发的时间
unloadEventEnd unload事件执行完的时间

浏览器缓存
– 浏览器会缓存DNS记录壹段时间。
有趣的是,操作系统未有报告浏览器储存DNS记录的时刻,那样区别浏览器会储存个自固定的3个时刻(二分钟到二十几分钟不等)。

浏览器缓存
– 浏览器会缓存DNS记录一段时间。
有趣的是,操作系统未有告知浏览器储存DNS记录的年月,那样不一致浏览器会储存个自固定的八个小时(2秒钟到二十6分钟不等)。

4858美高梅 2

当然那一个api包容性

系统缓存 –
要是在浏览器缓存里没有找到供给的笔录,浏览器会做二个类别调用(windows里是gethostbyname)。那样便可得到系统缓存中的记录。

系统缓存 –
假使在浏览器缓存里不曾找到要求的笔录,浏览器会做1个系统调用(windows里是gethostbyname)。那样便可获取系统缓存中的记录。

一、引言

前者不仅要让用户对网页有宏观的心得,让用户尽快体验到宏观的网页也是很关键的,这即将前端攻城狮通晓1些网络原理相关的学问了。那里就来聊壹聊从用户输入
url 到页面加载成功的进程中都发生了什么样工作?

4858美高梅 3

路由器缓存 –
接着,前边的询问请求发向路由器,它一般会有和好的DNS缓存。

路由器缓存 –
接着,前边的询问请求发向路由器,它一般会有友好的DNS缓存。

二、正文

用户输入 url 之后大概爆发了以下几件事:

  1. 浏览器查找域名的 IP 地址。这一步包罗 DNS
    具体的摸索进度,包罗:浏览器缓存 -> 系统缓存 -> 路由器缓存……
  2. 浏览器向 web 服务器发送一个 http
    请求:三遍握手、传送数据、7回挥手;
  3. 服务器的万古重定向响应:重返真正访问的地方;
  4. 浏览器跟踪重定向地址:另发一个 http 请求;
  5. 网页解析的全经过,HTTP完整请求进度。服务器处理请求;
  6. 服务器重回三个 http 响应;
  7. 浏览器突显 html 页面:解析 html 以构建 DOM 树 –> 构建渲染树
    –> 布局渲染树 –> 绘制渲染树;
  8. 浏览器发送请求,获取嵌入在 html
    中的能源(如图片、音频、摄像、CSSJS 等等);
  9. 浏览器发送异步请求。

附带附上 http 状态码 (其余状态码的详情,请戳那里):

http 状态码 详细状态码 状态原因
1xx 消息
2xx 成功
3xx 重定向
4xx 客户端错误
5xx 服务器错误
5xx 500 接口报错了
5xx 502 后端服务没启
5xx 503 启动挂了

上边大家就详细地了然一下那么些经过:

 

ISP DNS
缓存 –
接下来要check的正是ISP缓存DNS的服务器。在那貌似都能找到相应的缓存记录。

ISP DNS
缓存 –
接下来要check的便是ISP缓存DNS的服务器。在那相似都能找到呼应的缓存记录。

1. DNS 查找 IP 地址

DNS域名种类 (Domain Name System)
的缩写,是因特网的一项焦点服务。它看做能够将域名和 IP
地址互相映射的3个分布式数据库,能够使人更有利的访问互连网,而不用去记住可以被机器直接读取的
IP 数字串。

  1. DNS 查找进程:

    1. 浏览器缓存 —— 浏览器会缓存 DNS
      记录一段时间,可是操作系统并未告诉浏览器储存 DNS
      记录的日子。于是,不一致浏览器会储存各自的1个定位时间( 2 分钟到
      30 分钟不等)
    2. 系统缓存
      假若在浏览器缓存里从未找到必要的记录,浏览器会做二个类别调用
      Windows 里是 gethostbyname
      ,那样便可获取并询问系统缓存中的记录。
    3. 路由器缓存
      接着,前面包车型大巴查询请求发向路由器。路由器1般会有温馨的 DNS
      缓存。
    4. ISP DNS缓存 – 接下来要 check 的就是 ISP 缓存 DNS
      的服务器。ISP (Internet Service Provider)
      正是互连网服务提供商,在这相似都能找到呼应的缓存记录。
    5. 递归搜索 – 你的 ISPDNS
      服务器从跟域名服务器初阶开始展览递归搜索,从 .com 拔尖域名服务器到
      example 的域名服务器。一般 DNS 服务器的缓存中会有 .com
      域名服务器中的域名,所以到5星级服务器的分外进度不是那么必要了。
  2. DNS 举办域名解析的历程

    1. 客户端发出 DNS 请求翻译 IP 地址或主机名;
    2. DNS 服务器在接到客户端的伸手后,检查 DNS
      服务器的缓存,若查到请求的地点或名字,即向客户端发出回应音讯;
    3. 若未有查到,则在数据库中查找,若查到请求的地点或名字,即向客户端发出回应新闻;
    4. 若没有查到,则将呼吁发给根域 DNS
      服务器,并依序从根域查找超级域,由超级查找二级域,二级域查找三级,直至找到要分析的地址或名字。然后,向客户端所在互联网的
      DNS 服务器发出回应音讯,DNS
      服务器收到回复后,先在缓存中蕴藏,然后,将分析结果发给客户端。
    5. 若未有找到,则赶回错误音信。

   上边已经将浏览器的履行进度大致进行辨析,下边小编在捋1捋整个流程

递归搜索 –
你的ISP的DNS服务器从跟域名服务器早先展开递归搜索,从.com一流域名服务器到Facebook的域名服务器。一般DNS服务器的缓存中会有.com域名服务器中的域名,所以到5星级服务器的卓殊进度不是那么要求了。

递归搜索 –
你的ISP的DNS服务器从跟域名服务器起头展开递归搜索,从.com超级域名服务器到推文(Tweet)的域名服务器。1般DNS服务器的缓存中会有.com域名服务器中的域名,所以到5星级服务器的极度进度不是那么须要了。

2. http请求

  1. 三遍握手建立 TCP 连接

    http
    工作始于在此以前,浏览器首先要透过互连网与服务器建立连接,该连接是由此
    TCP 来实现的。该协议与 IP 协议员联盟手营造 Internet ,即有名的
    TCP/IP 协议族,因此 Internet 又被称作是 TCP/IP 网络。 http
    是比 TCP
    越来越高层次的应用层协议
    。依照规则,只有低层协议建立未来才能举行越来越高次层协议的接连。因而,首先要建立
    TCP 连接,一般 TCP 连接的端口号是 80 。在 TCP/IP
    协议中,TCP 协议提供有限支撑的总是服务,选拔叁遍握手建立一个再三再四:

    1. 第3回握手:建立连接时,客户端发送 SYN 包到服务器,并跻身
      SYN_SENT
      状态,等待服务器确认;SYN:同步连串编号(Synchronize Sequence
      Numbers)
    2. 其次次握手:服务器收到 SYN 包,必须承认客户的
      SYN,同时协调也发送二个 SYN 包,即 4858美高梅 ,SYN+ACK
      包,此时服务器进入 SYN_RECV 状态;
    3. 其一回握手:客户端收到服务器的 SYN+ACK 包,向服务器发送确认包
      ACK,此包发送达成,客户端和服务器进入
      ESTABLISHED景况,达成二次握手。

    完了一回握手,客户端与服务器开首传送数据。

    假定创立了 TCP 连接,浏览器就会向服务器发送 http
    请求命令。浏览器发送其请求命令之后,还要以头新闻的样式向服务器发送壹些别的音信。此后,浏览器发送了一空白行来通告服务器,它已经甘休了该头新闻的出殡。

  2. 八次挥手终止连接

    由于 TCP
    连接是全双工的,由此每一个方向都无法不独立进行倒闭。原则是当一方实现它的数量发送任务后,就能发送二个
    FIN 来终止那些样子的连日。收到贰个 FIN
    只意味着那一主旋律上从未有过数量流动。1个 TCP 连接在收到3个 FIN
    后仍是可以发送数据。首先举办关闭的壹方将执行积极关闭,而另一方执行被动关闭。

    1. 率先次挥手:TCP 客户端发送三个
      FIN,用来关闭客户端到服务器的数量传送。
    2. 其次次挥手:服务器收到这几个 FIN,它发回二个
      ACK,确认序号为接收的序号加 1 。和 SYN 一样,一个 FIN
      将占据3个序号。
    3. 其一回挥手:服务器关闭客户端的连天,发送一个 FIN 给客户端。
    4. 第13回挥手:客户端发回 ACK
      报文确认,并将承认序号设置为接到序号加 1
  • 用户输入浏览器网站(www.itwangziye.top),按下回车
  • 先是步浏览器有个2个开头时间,然后进入到重定向流程
  • 借使未有重定向,直接进去DNS流程
    • 浏览器缓存 – 浏览器会缓存DNS记录1段时间。
      有趣的是,操作系统未有报告浏览器储存DNS记录的小运,那样分歧浏览器会储存个自固定的一个年华(贰分钟到贰拾陆分钟不等)。
    • 系统缓存 –
      如若在浏览器缓存里未有找到须求的笔录,浏览器会做二个系统调用(windows里是gethostbyname)。那样便可取得系统缓存中的记录。
    • 路由器缓存 –
      接着,后面包车型客车查询请求发向路由器,它1般会有友好的DNS缓存。
    • ISP DNS 缓存 –
      接下来要check的正是ISP缓存DNS的服务器。在这貌似都能找到呼应的缓存记录。
    • 递归搜索 –
      你的ISP的DNS服务器从跟域名服务器伊始开始展览递归搜索,从.top一级域名服务器到域名服务器。一般DNS服务器的缓存中会有.com域名服务器中的域名,所以到伍星级服务器的合营进程不是那么须求了。
  • 查找到能源后向web服务器发送http请求,成立TCP连接,初始获得财富,借使有缓存直接跳过(协商缓存和强缓存)

2、建立TCP连接

2、建立TCP连接

叁. 服务器的永久重定向响应

服务器给浏览器响应1个 301 永久重定向响应,那样浏览器就会造访
而非

为什么服务器一定要重定向而不是直接发会用户想看的网页内容呢?这么些题材有过多妙不可言的答案。

其中3个原因跟搜寻引擎排行有关。你看,假诺3个页面有多少个地点,就好像

,搜索引擎会认为它们是四个网址,结果造成每3个的查找链接都减掉从而下落排行。而搜索引擎知道
301 永久重定向是怎么看头,这样就会把走访带 www 的和不带 www
的地方归到同3个网址排名下。

还有一个原因是用区别的地点会造成缓存友好性别变化差。当三个页面有有个别个名字时,它或者会在缓存里出现有个别次。

浏览器通过DNS获取到web服务器真的IP地址后,便向web服务器发起tcp连接请求,通过TCP1遍握手建立好连接后,浏览器便能够将HTTP请求数据通过发送给服务器了。

浏览器通过DNS获取到web服务器真的IP地址后,便向web服务器发起tcp连接请求,通过TCP3遍握手建立好连接后,浏览器便足以将HTTP请求数据通过发送给服务器了。

四. 浏览器跟踪重定向地址

现行反革命,浏览器知道了
才是要拜访的没有错地址,所以它会发送另1个取得请求。

  • 服务器收到请求处理后回到3个响应(既那里状态码为200)

 

 

5. 服务器“处理”请求

服务器收到到收获请求,然后处理并再次回到一个响应。

HTTP/1.1 200 OK
Cache-Control: private, no-store, no-cache, must-revalidate,
post-check=0,
pre-check=0
Expires: Sat, 01 Jan 2000 00:00:00 GMT
P3P: CP=”DSP LAW”
Pragma: no-cache
Content-Encoding: gzip
Content-Type: text/html; charset=utf-8
X-Cnection: close
Transfer-Encoding: chunked
Date: Fri, 12 Feb 2010 09:05:55 GMT

三、浏览器向 web
服务器发送2个 HTTP 请求

三、浏览器向 web
服务器发送八个 HTTP 请求

陆. 页面渲染

现代浏览器渲染页面包车型地铁长河是这么的:解析 html 以构建 DOM 树 –>
营造渲染树 –> 布局渲染树 –> 绘制渲染树

DOM 树是由 html 文件中的标签排列组合。

渲染树是在 DOM 树中投入 csshtml 中的 style
样式而形成。渲染树只含有须求出示在页面中的 DOM 元素,像 <head>
元素或 display 属性值为 none
的成分都不在渲染树中。在浏览器还没接受到壹体化的 html
文件时,它就起来渲染页面了。

在遇到表面链入的剧本标签、样式标签、图片时,会重新发送 http
请求重复上述的步调。在吸收 css
文件后,会对曾经渲染的页面重新渲染,出席它们应有的样式。图片文件加载完,立时展现在对应岗位。在那壹进度中大概会触发页面包车型地铁重绘或重排

2b3Tn@[…]

HTTP请求是3个依照TCP协议之上的应用层协议——超文本传输协议。1个http事务由一条(从客户端发往服务器的)请求命令和三个(从服务器发回客户端的)响应结果组成。

HTTP请求是1个依照TCP协议之上的应用层协议——超文本传输协议。二个http事务由一条(从客户端发往服务器的)请求命令和一个(从服务器发回客户端的)响应结果组成。

三、结语

做前端不仅要领会前端的文化,对有的前端相关的例如总计机互联网、数据结构、总结机原理都要有早晚的打听,因为互联网世界连接在共同的,前端与这一个知识都以有接触的,说不准哪一天就会用上。而且,学好那些知识,对前者优化也有非常大的帮手。

——————— 本文来源 沐风的心 的CSDN 博客
,全文地址请点击:

  • 浏览器开头显示HTML,浏览器未有接受完全的html文书档案,伊始显得页面,开首读取js,css,图片等财富。
  • 每一个财富都要拓展呼吁,获取财富(页面实行回流和纪念)
  • 时至前几日整个流程结束
GET http://www.cricode.com/ HTTP/1.1
Host: www.cricode.com
Connection: keep-alive
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
GET http://www.cricode.com/ HTTP/1.1
Host: www.cricode.com
Connection: keep-alive
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8

浏览器缓存

浏览器第3遍呼吁时:

 4858美高梅 4

 

 浏览器后续在展开呼吁时:

4858美高梅 5

 

 

  

  

浏览器回流回溯

  1. 当render
    tree中的一片段(或任何)因为成分的规模尺寸,布局,隐藏等转移而急需再一次营造。这就叫做回流。每一个页面至少要求2回回流,便是在页面第1次加载的时候。

  2. 当render
    tree中的一些因素供给更新属性,而那些属性只是影响因素的外观,风格,而不会潜移默化布局的,比如background-color。则就叫称为重绘。

注:回流必将唤起重绘,而重绘不自然会滋生回流。

 

 

4、发送响应数据给客户端

肆、发送响应数据给客户端

Web服务器1般通过监听80端口,来取得客户端的HTTP请求。与客户端建立好TCP连接后,web服务器起始接受客户端发来的数码,并由此HTTP解码,从接受到的互连网数据中分析出请求的url音信在此之前其余诸如Accept-Encoding、Accept-Language等音讯。Web服务器依据HTTP请求头的音信,获得响应数据重返给客户端。三个杰出的HTTP响应头数据报如下:

Web服务器常常通过监听80端口,来获得客户端的HTTP请求。与客户端建立好TCP连接后,web服务器开端接受客户端发来的数额,并由此HTTP解码,从收受到的互联网数据中分析出请求的url消息在此之前其余诸如Accept-Encoding、Accept-Language等新闻。Web服务器依照HTTP请求头的新闻,获得响应数据再次来到给客户端。三个第一名的HTTP响应头数据报如下:

HTTP/1.1 200 OK
Date: Fri, 24 Oct 2014 13:55:18 GMT
Server: Apache
X-Powered-By: PHP/5.4.32
Keep-Alive: timeout=5, max=10000
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8
a0f6
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=10,IE=9,IE=8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0, minimum-scale=1.0, maximum-scale=1.0">
<title></title>
<body class="home"></body>
</html>
HTTP/1.1 200 OK
Date: Fri, 24 Oct 2014 13:55:18 GMT
Server: Apache
X-Powered-By: PHP/5.4.32
Keep-Alive: timeout=5, max=10000
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8
a0f6
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=10,IE=9,IE=8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0, minimum-scale=1.0, maximum-scale=1.0">
<title></title>
<body class="home"></body>
</html>

  

  

于今,二个HTTP通讯进度一鼓作气。web服务器会基于HTTP请求头中的Connection字段值决定是还是不是关闭TCP链接通道,当Connection字段值为keep-alive时,web服务器不会马上关闭此三番五次。(这一步一起来容许还会有重定向及浏览器跟踪重定向地址等)。

由来,2个HTTP通讯进度完成。web服务器会遵照HTTP请求头中的Connection字段值决定是还是不是关闭TCP链接通道,当Connection字段值为keep-alive时,web服务器不会应声关闭此三番五次。(这一步一开始容许还会有重定向及浏览器跟踪重定向地址等)。

伍、浏览器解析http
response

伍、浏览器解析http
response

(1)html文书档案解析(DOM
Tree)

(一)html文书档案解析(DOM
Tree)

在浏览器未有完整接受一切HTML文档时,它就已经上马显得那么些页面了。生成解析树即dom树,是由dom成分及品质节点组成,树的根是document对象。

在浏览器未有完全接受全部HTML文书档案时,它就早已开首体现这么些页面了。生成解析树即dom树,是由dom元素及品质节点组成,树的根是document对象。

(2)浏览器发送获取嵌入在HTML中的对象

(2)浏览器发送获取嵌入在HTML中的对象

加载进度中碰着外部css文件,浏览器其它发出1个请求,来获得css文件。遭逢图片能源,浏览器也会此外发出1个伸手,来赢得图片财富。那是异步请求,并不会影响html文书档案实行加载。

加载进程中境遇外部css文件,浏览器其它发出1个请求,来赢得css文件。境遇图片能源,浏览器也会其它发出三个伸手,来博取图片财富。那是异步请求,并不会潜移默化html文书档案举办加载。

可是当文书档案加载过程中相遇js文件,html文书档案会挂起渲染(加载解析渲染同步)的线程,不仅要等待文书档案中js文件加载实现,还要拭目以待解析执行落成,才方可过来html文书档案的渲染线程。

唯独当文书档案加载进程中遇见js文件,html文书档案会挂起渲染(加载解析渲染同步)的线程,不仅要等待文书档案中js文件加载完结,还要拭目以俟解析执行实现,才方可过来html文书档案的渲染线程。

(3)css解析(parser
Render Tree)

(3)css解析(parser
Render Tree)

浏览器下载css文件,将css文件分析为样式表对象,并用来渲染dom
tree。该目的涵盖css规则,该规则包涵选取器和注解对象。

浏览器下载css文件,将css文件分析为样式表对象,并用来渲染dom
tree。该对象涵盖css规则,该规则包括选用器和评释对象。

css成分遍历的各种,是从树的低端发展遍历。

css成分遍历的依次,是从树的低端发展遍历。

(4)js解析

(4)js解析

浏览器UI线程:单线程,大多数浏览器(比如chrome)让1个单线程共用来实施javascrip和翻新用户界面。

浏览器UI线程:单线程,当先二分之一浏览器(比如chrome)让二个单线程共用来执行javascrip和翻新用户界面。

js阻塞页面:浏览器里的http请求被卡住1般都以由js所引起,具体原因是js文件在下载完毕之后会立刻实施,而js执行时候会阻塞浏览器的其余行为,有1段时间是从未互联网请求被处理的,那段时间过后http请求才会随之执行,那段空闲时间就是所谓的http请求被封堵。

js阻塞页面:浏览器里的http请求被打断1般都以由js所引起,具体原因是js文件在下载完成之后会立马施行,而js执行时候会卡住浏览器的别样表现,有一段时间是未曾网络请求被处理的,那段日子之后http请求才会随着执行,那段空闲时间正是所谓的http请求被堵塞。

js阻塞原因:之所以会阻塞UI线程的履行,是因为js能控制UI的显得,而页面加载的条条框框是要挨个执行,所以在境遇js代码时候UI线程会首先实施它

js阻塞原因:之所以会阻塞UI线程的履行,是因为js能控制UI的体现,而页面加载的规则是要依次执行,所以在遭逢js代码时候UI线程会首先实施它

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有