text: (window.webpackJsonp=window.webpackJsonp||[]).push([[129],{685:function(t,e,a){"use strict";a.r(e);var s=a(6),r=Object(s.a)({},(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h2",{attrs:{id:"一、url到网页呈现发生了什么"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#一、url到网页呈现发生了什么"}},[t._v("#")]),t._v(" 一、URL到网页呈现发生了什么？")]),t._v(" "),a("h3",{attrs:{id:"_1-1、过程"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_1-1、过程"}},[t._v("#")]),t._v(" 1.1、过程")]),t._v(" "),a("ul",[a("li",[t._v("1、浏览器首先使用 "),a("code",[t._v("HTTP")]),t._v(" 协议或者 "),a("code",[t._v("HTTPS")]),t._v(" 协议，向服务端请求页面")]),t._v(" "),a("li",[t._v("2、把请求回来的 "),a("code",[t._v("HTML")]),t._v(" 代码经过解析，构建成 "),a("code",[t._v("DOM")]),t._v(" 树")]),t._v(" "),a("li",[t._v("3、计算 "),a("code",[t._v("DOM")]),t._v(" 树上的 "),a("code",[t._v("CSS")]),t._v(" 属性")]),t._v(" "),a("li",[t._v("4、最后根据 "),a("code",[t._v("CSS")]),t._v(" 属性对元素逐个进行渲染，得到内存中的位图")]),t._v(" "),a("li",[t._v("5、一个可选的步骤是对位图进行合成，这会极大地增加后续绘制的速度")]),t._v(" "),a("li",[t._v("6、合成之后，再绘制到界面上")])]),t._v(" "),a("h3",{attrs:{id:"_1-2、流程图"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_1-2、流程图"}},[t._v("#")]),t._v(" 1.2、流程图")]),t._v(" "),a("p",[t._v("winter用访问极客时间网站为例整理了一下流程")]),t._v(" "),a("p",[a("img",{attrs:{src:"https://static001.geekbang.org/resource/image/63/4c/6391573a276c47a9a50ae0cbd2c5844c.jpg",alt:"流程图"}})]),t._v(" "),a("p",[t._v("注意一点：从 HTTP 请求回来，就产生了流式的数据，后续的 DOM 树构建、CSS 计算、渲染、合成、绘制，都是尽可能地流式处理前一步的产出")]),t._v(" "),a("h2",{attrs:{id:"二、http协议"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#二、http协议"}},[t._v("#")]),t._v(" 二、HTTP协议")]),t._v(" "),a("h3",{attrs:{id:"_2-1、http标准"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_2-1、http标准"}},[t._v("#")]),t._v(" 2.1、HTTP标准")]),t._v(" "),a("h4",{attrs:{id:"_2-1-1、介绍"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_2-1-1、介绍"}},[t._v("#")]),t._v(" 2.1.1、介绍")]),t._v(" "),a("p",[t._v("1、HTTP 标准由 "),a("code",[t._v("IETF")]),t._v(" 组织制定，跟它相关的标准主要有两份：")]),t._v(" "),a("p",[t._v("1）、"),a("code",[t._v("HTTP1.1")]),t._v("："),a("a",{attrs:{href:"https://tools.ietf.org/html/rfc2616",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://tools.ietf.org/html/rfc2616"),a("OutboundLink")],1)]),t._v(" "),a("p",[t._v("2）、"),a("code",[t._v("HTTP1.1")]),t._v("："),a("a",{attrs:{href:"https://tools.ietf.org/html/rfc7234",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://tools.ietf.org/html/rfc7234"),a("OutboundLink")],1)]),t._v(" "),a("p",[t._v("2、"),a("code",[t._v("TCP")]),t._v(" 协议是一条双向的通讯通道，"),a("code",[t._v("HTTP")]),t._v(" 在 "),a("code",[t._v("TCP")]),t._v("的基础上，规定了 "),a("code",[t._v("Request-Response")]),t._v(" 的模式。这个模式决定了通讯必定是由浏览器端首先发起的。")]),t._v(" "),a("p",[t._v("3、"),a("code",[t._v("HTTP")]),t._v(" 是纯粹的文本协议，它是规定了使用 "),a("code",[t._v("TCP")]),t._v(" 协议来传输文本格式的一个应用层协议。")]),t._v(" "),a("h4",{attrs:{id:"_2-1-2、小实验"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_2-1-2、小实验"}},[t._v("#")]),t._v(" 2.1.2、小实验")]),t._v(" "),a("blockquote",[a("p",[t._v("winter用一个纯粹的 "),a("code",[t._v("TCP")]),t._v(" 客户端来手工实现 "),a("code",[t._v("HTTP")]),t._v("，实验需要使用"),a("code",[t._v("telnet")]),t._v("客户端")])]),t._v(" "),a("p",[t._v("1、运行 "),a("code",[t._v("telnet")]),t._v("，连接到极客时间主机")]),t._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[t._v("telnet time.geekbang.org "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("80")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])]),a("p",[t._v("2、"),a("code",[t._v("TCP")]),t._v(" 连接已经建立，输入下面字符作为请求（请求部分）")]),t._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[t._v("GET / HTTP/1.1\nHost: time.geekbang.org\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br")])]),a("p",[t._v("第一行被称作 "),a("code",[t._v("request line")]),t._v("，它分为三个部分，"),a("code",[t._v("HTTP Method")]),t._v("（请求的方法）、请求的路径、请求的协议和版本。")]),t._v(" "),a("p",[t._v("紧跟在"),a("code",[t._v("request line")]),t._v("后面的是请求头，每行用冒号分隔名称和值")]),t._v(" "),a("p",[t._v("3、按下两次回车，收到服务端回复（响应部分）")]),t._v(" "),a("div",{staticClass:"language-bash line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-bash"}},[a("code",[t._v("HTTP/1.1 "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("301")]),t._v(" Moved Permanently\nDate: Fri, "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("25")]),t._v(" Jan "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2019")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("13")]),t._v(":28:12 GMT\nContent-Type: text/html\nContent-Length: "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("182")]),t._v("\nConnection: keep-alive\nLocation: https://time.geekbang.org/\nStrict-Transport-Security: max-age"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("15768000")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("html"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("head"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("title"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("301")]),t._v(" Moved Permanently"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("/title"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("/head"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("body "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("bgcolor")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"white"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("center"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("h"),a("span",{pre:!0,attrs:{class:"token operator"}},[a("span",{pre:!0,attrs:{class:"token file-descriptor important"}},[t._v("1")]),t._v(">")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("301")]),t._v(" Moved Permanently"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("/h"),a("span",{pre:!0,attrs:{class:"token operator"}},[a("span",{pre:!0,attrs:{class:"token file-descriptor important"}},[t._v("1")]),t._v(">")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("/center"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("hr"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("center"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("openresty"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("/center"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("/body"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("/html"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br")])]),a("p",[t._v("第一行被称作 "),a("code",[t._v("response line")]),t._v("，它也分为三个部分，协议和版本、状态码和状态文本。")]),t._v(" "),a("p",[t._v("紧随在 "),a("code",[t._v("response line")]),t._v(" 之后，是响应头，每行用冒号分隔的名称和值")]),t._v(" "),a("h2",{attrs:{id:"三、http-协议格式"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#三、http-协议格式"}},[t._v("#")]),t._v(" 三、HTTP 协议格式")]),t._v(" "),a("h3",{attrs:{id:"_3-1、http协议划分"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_3-1、http协议划分"}},[t._v("#")]),t._v(" 3.1、HTTP协议划分")]),t._v(" "),a("p",[a("img",{attrs:{src:"https://static001.geekbang.org/resource/image/3d/a1/3db5e0f362bc276b83c7564430ecb0a1.jpg",alt:"HTTP协议划分"}})]),t._v(" "),a("h3",{attrs:{id:"_3-2、http-method-方法"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_3-2、http-method-方法"}},[t._v("#")]),t._v(" 3.2、HTTP Method（方法）")]),t._v(" "),a("blockquote",[a("p",[t._v("类型："),a("code",[t._v("GET、POST、HEADPUT、DELETE、CONNECT、OPTIONS、TRACE")])])]),t._v(" "),a("p",[t._v("1、浏览器通过地址栏访问页面都是 "),a("code",[t._v("GET")]),t._v(" 方法")]),t._v(" "),a("p",[t._v("2、表单提交产生 "),a("code",[t._v("POST")]),t._v(" 方法")]),t._v(" "),a("p",[t._v("3、"),a("code",[t._v("PUT")]),t._v(" 和 "),a("code",[t._v("DELETE")]),t._v(" 分别表示添加资源和删除资源")]),t._v(" "),a("p",[t._v("4、"),a("code",[t._v("CONNECT")]),t._v(" 现在多用于 "),a("code",[t._v("HTTPS")]),t._v(" 和 "),a("code",[t._v("WebSocket")])]),t._v(" "),a("p",[t._v("5、"),a("code",[t._v("OPTIONS")]),t._v(" 和 "),a("code",[t._v("TRACE")]),t._v(" 一般用于调试，多数线上服务都不支持")]),t._v(" "),a("h3",{attrs:{id:"_3-3、-http-status-code-状态码-和-status-text-状态文本"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_3-3、-http-status-code-状态码-和-status-text-状态文本"}},[t._v("#")]),t._v(" 3.3、 HTTP Status code（状态码）和 Status text（状态文本）")]),t._v(" "),a("h4",{attrs:{id:"_3-3-1、1xx"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_3-3-1、1xx"}},[t._v("#")]),t._v(" 3.3.1、1xx")]),t._v(" "),a("blockquote",[a("p",[t._v("临时回应，表示客户端请继续。对前端来说"),a("code",[t._v("1xx")]),t._v(" 系列的状态码是非常陌生的，原因是 "),a("code",[t._v("1xx")]),t._v(" 的状态被浏览器 "),a("code",[t._v("http")]),t._v(" 库直接处理掉了，不会让上层应用知晓。")])]),t._v(" "),a("h4",{attrs:{id:"_3-3-2、2xx"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_3-3-2、2xx"}},[t._v("#")]),t._v(" 3.3.2、2xx")]),t._v(" "),a("blockquote",[a("p",[a("code",[t._v("2xx")]),t._v(" 系列的状态最熟悉的就是 "),a("code",[t._v("200")]),t._v("，这通常是网页请求成功的标志")])]),t._v(" "),a("h4",{attrs:{id:"_3-3-3、3xx"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_3-3-3、3xx"}},[t._v("#")]),t._v(" 3.3.3、3xx")]),t._v(" "),a("blockquote",[a("p",[t._v("表示请求的目标有变化，希望客户端进一步处理。")])]),t._v(" "),a("ul",[a("li",[a("code",[t._v("301")]),t._v("&"),a("code",[t._v("302")]),t._v("：永久性与临时性跳转。")]),t._v(" "),a("li",[a("code",[t._v("304")]),t._v("：跟客户端缓存没有更新。")])]),t._v(" "),a("h4",{attrs:{id:"_3-3-4、4xx"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_3-3-4、4xx"}},[t._v("#")]),t._v(" 3.3.4、4xx")]),t._v(" "),a("blockquote",[a("p",[t._v("客户端请求错误。")])]),t._v(" "),a("ul",[a("li",[a("code",[t._v("403")]),t._v("：无权限。")]),t._v(" "),a("li",[a("code",[t._v("404")]),t._v("：表示请求的页面不存在。")]),t._v(" "),a("li",[a("code",[t._v("418")]),t._v("："),a("code",[t._v("It’s a teapot.")]),t._v(" 这是一个彩蛋，来自 "),a("code",[t._v("IETF")]),t._v(" 的一个愚人节玩笑。（"),a("a",{attrs:{href:"https://tools.ietf.org/html/rfc2324",target:"_blank",rel:"noopener noreferrer"}},[t._v("超文本咖啡壶控制协议"),a("OutboundLink")],1),t._v("）")])]),t._v(" "),a("h4",{attrs:{id:"_3-3-5、5xx"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_3-3-5、5xx"}},[t._v("#")]),t._v(" 3.3.5、5xx")]),t._v(" "),a("blockquote",[a("p",[t._v("服务端请求错误。")])]),t._v(" "),a("ul",[a("li",[a("code",[t._v("500")]),t._v("：服务端错误。")]),t._v(" "),a("li",[a("code",[t._v("503")]),t._v("：服务端暂时性错误，可以一会再试。")])]),t._v(" "),a("h3",{attrs:{id:"_3-4、http-head-http-头"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_3-4、http-head-http-头"}},[t._v("#")]),t._v(" 3.4、HTTP Head (HTTP 头)")]),t._v(" "),a("h4",{attrs:{id:"_3-4-1、request-header"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_3-4-1、request-header"}},[t._v("#")]),t._v(" 3.4.1、Request Header")]),t._v(" "),a("p",[a("img",{attrs:{src:"https://static001.geekbang.org/resource/image/2b/a2/2be3e2457f08bdf624837dfaee01e4a2.png",alt:"Request Header"}})]),t._v(" "),a("h4",{attrs:{id:"_3-4-2、response-header"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_3-4-2、response-header"}},[t._v("#")]),t._v(" 3.4.2、Response Header")]),t._v(" "),a("p",[a("img",{attrs:{src:"https://static001.geekbang.org/resource/image/ef/c9/efdeadf27313e08bf0789a3b5480f7c9.png",alt:"Response Header"}})]),t._v(" "),a("h3",{attrs:{id:"_3-5、http-request-body"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_3-5、http-request-body"}},[t._v("#")]),t._v(" 3.5、HTTP Request Body")]),t._v(" "),a("blockquote",[a("p",[a("code",[t._v("HTTP")]),t._v(" 请求的 "),a("code",[t._v("body")]),t._v(" 主要用于提交表单场景。")])]),t._v(" "),a("p",[t._v("常见的 "),a("code",[t._v("body")]),t._v(" 格式是：")]),t._v(" "),a("ul",[a("li",[a("code",[t._v("application/json")])]),t._v(" "),a("li",[a("code",[t._v("application/x-www-form-urlencoded")])]),t._v(" "),a("li",[a("code",[t._v("multipart/form-data")])]),t._v(" "),a("li",[a("code",[t._v("text/xml")])])]),t._v(" "),a("p",[t._v("1、使用 "),a("code",[t._v("html")]),t._v(" 的 "),a("code",[t._v("form")]),t._v(" 标签提交产生的 html 请求，默认会产生 "),a("code",[t._v("application/x-www-form-urlencoded")]),t._v(" 的数据格式")]),t._v(" "),a("p",[t._v("2、当有文件上传时，则会使用 "),a("code",[t._v("multipart/form-data")]),t._v("。")]),t._v(" "),a("h2",{attrs:{id:"四、https"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#四、https"}},[t._v("#")]),t._v(" 四、HTTPS")]),t._v(" "),a("h3",{attrs:{id:"_4-1、作用"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_4-1、作用"}},[t._v("#")]),t._v(" 4.1、作用")]),t._v(" "),a("ul",[a("li",[t._v("1、确定请求的目标服务端身份")]),t._v(" "),a("li",[t._v("2、保证传输的数据不会被网络中间节点窃听或者篡改")])]),t._v(" "),a("h3",{attrs:{id:"_4-2、标准"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_4-2、标准"}},[t._v("#")]),t._v(" 4.2、标准")]),t._v(" "),a("p",[a("code",[t._v("HTTPS")]),t._v(" 的标准也是由 "),a("code",[t._v("RFC")]),t._v(" 规定的"),a("a",{attrs:{href:"https://tools.ietf.org/html/rfc2818",target:"_blank",rel:"noopener noreferrer"}},[t._v("查看详情"),a("OutboundLink")],1)]),t._v(" "),a("ul",[a("li",[a("code",[t._v("HTTPS")]),t._v(" 是使用加密通道来传输 "),a("code",[t._v("HTTP")]),t._v(" 的内容。")]),t._v(" "),a("li",[a("code",[t._v("HTTPS")]),t._v("首先与服务端建立一条 "),a("code",[t._v("TLS")]),t._v(" 加密通道。")]),t._v(" "),a("li",[a("code",[t._v("TLS")]),t._v(" 构建于 "),a("code",[t._v("TCP")]),t._v(" 协议之上，它实际上是对传输的内容做一次加密，所以从传输内容上看，HTTPS 跟 HTTP 没有任何区别。")])]),t._v(" "),a("h2",{attrs:{id:"五、http2"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#五、http2"}},[t._v("#")]),t._v(" 五、HTTP2")]),t._v(" "),a("blockquote",[a("p",[t._v("HTTP 2 是 HTTP 1.1 的升级版本"),a("a",{attrs:{href:"https://tools.ietf.org/html/rfc7540",target:"_blank",rel:"noopener noreferrer"}},[t._v("查看详情"),a("OutboundLink")],1)])]),t._v(" "),a("h3",{attrs:{id:"_5-1、最大改进"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_5-1、最大改进"}},[t._v("#")]),t._v(" 5.1、最大改进")]),t._v(" "),a("ul",[a("li",[t._v("1、"),a("code",[t._v("支持服务端推送")]),t._v("：服务端推送能够在客户端发送第一个请求到服务端时，提前把一部分内容推送给客户端，放入缓存当中，这可以避免客户端请求顺序带来的并行度不高，从而导致的性能问题。")]),t._v(" "),a("li",[t._v("2、"),a("code",[t._v("支持 TCP 连接复用")]),t._v("：TCP 连接复用，则使用同一个 TCP 连接来传输多个 HTTP 请求，避免了 TCP 连接建立时的三次握手开销，和初建 TCP 连接时传输窗口小的问题。")])])])}),[],!1,null,null,null);e.default=r.exports}}]);