这是面试过程中一道高频考题。
从面试官的角度思考:
基本回答:
如果应聘者只回答了上述步骤,很多关键步骤(前端应该了解的知识点)没有提及,很有可能达不到面试官想要的回答效果。
笔者针对一些关键步骤,具体展开说明。让这道题成为我们面试考卷中的加分项。
浏览器会构建请求行:
// 请求方法是 GET,路径为根路径,HTTP 协议版本为 1.1
GET / HTTP/1.1
复制代码然后根据 Cache-control 和 Expires 字段,检查强缓存,如果命中直接使用,否则进入下一步。关于强缓存,如果不清楚可以参考下图:
由于我们输入的是域名,而数据包是通过 IP 地址传给对方的。因此我们需要得到域名对应的 IP 地址。这个过程需要依赖一个服务系统,这个系统将域名和 IP 一一映射,我们将这个系统就叫做 DNS (域名系统)。
DNS 协议提供通过域名查找 IP 地址,或逆向从 IP 地址反查域名的服务。得到具体 IP 的过程就是 DNS 解析。
DNS 是一个网络服务器,我们的域名解析简单来说就是在 DNS 上记录一条信息记录。
例如 baidu.com 220.114.23.56(服务器外网IP地址)80(服务器端口号)
复制代码浏览器通过域名去查询 URL 对应的 IP :
TCP 三次握手的过程如下:
谢希仁著《计算机网络》中讲“三次握手”的目的是“为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误”。
现在 TCP 连接建立完毕,浏览器可以和服务器开始通信,即开始发送 HTTP 请求。浏览器发 HTTP 请求要携带三样东西:请求行、请求头和请求体。
1.请求行包含请求方法、URL、协议版本
POST /user.html HTTP/1.1
复制代码2.请求头包含请求的附加信息,由关键字/值对组成,如下
// 服务器可以接受的文件格式
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng;q=0.8,application/signed-exchange;v=b3
// 指定浏览器可以支持的 Web 服务器返回的内容压缩编码类型
Accept-Encoding: gzip, deflate, br
// 浏览器支持的语言
Accept-Language: zh-CN,zh;q=0.9
// 缓存机制
Cache-Control: no-cache
// 是否需要持久连接
Connection: keep-alive
// 发送该请求域名下所有 Cookie 值到服务器
Cookie: /* 省略cookie信息 */
// 指定请求的服务器的域名和端口号
Host: www.baidu.com
Pragma: no-cache
Upgrade-Insecure-Requests: 1
// 用户代理 UA,包含发出请求的用户信息
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1
复制代码3.请求体,可以承载多个请求参数的数据,包含回车符、换行符和请求数据,一般在 POST 方法下存在。
跟请求部分类似,网络响应具有三个部分:响应行、响应头和响应体。
1.响应行包含:协议版本,状态码,状态码描述
HTTP/1.1 200 OK
复制代码状态码规则如下:
2.响应头部包含响应报文的附加信息,由 名/值 对组成,如下:
// 缓存机制
Cache-Control: no-cache
Connection: keep-alive
Content-Encoding: gzip
// 表示具体请求中的媒体类型信息,决定浏览器将以什么形式、什么编码读取这个文件
Content-Type: text/html;charset=utf-8
// 原始服务器消息发出的时间
Date: Wed, 04 Dec 2019 12:29:13 GMT
// Web 服务器软件名称
Server: apache
// 由服务器端向客户端发送 cookie
Set-Cookie: rsv_i=f9a0SIItKqzv7kqgAAgphbGyRts3RwTg%2FLyU3Y5Eh5LwyfOOrAsvdezbay0QqkDqFZ0DfQXby4wXKT8Au8O7ZT9UuMsBq2k; path=/; domain=.baidu.com复制代码这里注意下 Set-Cookie 中关于网络安全方面的两个值:HttpOnly、SameSite
设置了 HttpOnly 属性的 cookie 不能使用 JavaScript 经由 Document.cookie 属性、XMLHttpRequest 和 Request APIs 进行访问,以防范跨站脚本攻击(XSS)。
SameSite=Lax 允许服务器设定一则 cookie 不随着跨域请求一起发送,这样可以在一定程度上防范跨站请求伪造攻击(CSRF)。
3.响应主体包含回车符、换行符和响应返回数据,并不是所有响应报文都有响应数据
响应完成之后要判断 Connection 字段,如果请求头或响应头中包含 Connection: Keep-Alive ,表示建立了持久连接,这样 TCP 连接会一直保持,之后请求统一站点的资源会复用这个连接。 否则断开 TCP 连接, 请求-响应流程结束。
总结浏览器端的网络请求过程:
浏览器解析渲染页面分为以下五个步骤:
回流时,以上流程会重新走一遍。重绘时,会重新计算样式,跳过中间步骤直接生成绘制列表。可见,重绘不一定导致回流,但回流一定发生了重绘。
CSS 样式来源一般为三种:
浏览器无法直接识别 CSS 样式文本,这里渲染引擎接收到 CSS 文本之后将其转化为一个结构化的对象,即 styleSheets 。
可以在浏览器控制台输入 document.styleSheets 来查看这个最终结构(包含上述三种 CSS 来源)。
有一些渲染引擎不容易直接理解的 CSS 样式数值,需要在计算样式之前将它们标准化。如:em -> px,red -> #ff0000,bold -> 700 等等。
计算具体样式主要遵循两个规则:继承和层叠
计算完样式之后,所有样式值会被挂载到 window.getComputedStyle 中,也就是可以通过 JS 获取计算后的样式。
布局树生成主要分两部:
布局树只包含可见元素,对于 head 标签和设置了 display: none 的元素将不会被放入其中。
如果想了解布局的细节,可以读一读人人 FED 团队的文章从Chrome源码看浏览器如何layout布局。
这里分两种情况,一种是显式合成,一种是隐式合成。
一、拥有层叠上下文的节点
层叠上下文也基本上是有一些特定的 CSS 属性创建的,一般有以下情况:
二、需要剪裁的地方
比如一个 div,你只给他设置 100 * 100 像素的大小,而你在里面放了非常多的文字,那么超出的文字部分就需要被剪裁。当然如果出现了滚动条,那么滚动条会被单独提升为一个图层。
简单说就是层叠等级低的节点被提升为单独的图层之后,那么所有层叠等级比它高的节点都会成为一个单独的图层。
这个隐式合成其实隐藏着巨大风险,如果在一个大型应用中,当一个 z-index 比较低的元素被提升为单独图层之后,层叠在它上面的元素统统会被提升为单独的图层,可能会增加上千个图层,大大增加内存压力,甚至直接让页面崩溃。这就是层爆炸的原理
当需要 repaint 时,只需要 repaint 本身,而不会影响到其他层。
渲染引擎会将图层的绘制拆分成一个个绘制指令,比如先画背景、再描绘边框......然后将这些指令按顺序组合成一个待绘制列表。
大家可以 F12 打开 Chrome 开发者工具,在设置栏展开 more tools ,然后选择 Layers 面板,就能看到绘制列表了。
后面就是渲染进程的主线程把绘制列表提交给合成线程。然后合成线程选择视口附近的图块,把它交给栅格化线程池生成位图。
栅格化操作完成后,合成线程会生成一个绘制指令 DrawQuad,并发送给浏览器进程。浏览器进程中的 viz 组件 接收到命令,把页面内容绘制到内存,也就是生成了页面。
当数据传送完毕,需要断开 TCP 连接,此时发起四次挥手。
如果本文对你有帮助,就点个赞支持下吧!感谢阅读。
来源:掘金-推荐
动端应用到底需要做SEO吗?答案很重要。随着智能手机的出现,越来越多的人使用智能手机进行搜索。交通意味着一切。很多人会在零碎的时间内使用手机来满足他们的搜索和查询需求。如果移动网站搜索引擎优化做得不错,这意味着他们可以分享流量红利。所以手机上的seo非常重要。
如何做手机站SEO?移动站定位和页面设计移动站和PC站除了页面大小,显示形式不同,在分析用户需求时都要做。例如,对于一个地方装修网站,PC站是重点展示装修效果的图纸案例、装修报价和公司装修设计师的风度,所以移动站应该重点关注公司的联系人、地图、电话等。移动网站需要”及时、快速“。同时,考虑到网站的反应速度,整个页面应该用DIV CSS代码编写。不要为了方便而使用flash或js,所以搜索引擎很难掌握。还有许多移动浏览器不支持Flash播放。你需要单独安装手机falsh插件,但是为什么用户有那么多时间等待呢?
移动站应简洁,用户浏览量大的手机内容,或者屏幕大一些,在平板电脑上浏览,但不大于普通电脑屏幕,所以移动站页面应更简洁,特别是对于有下载需求的网站,移动站上的下载按钮应为CLE。Arly放在用户面前。用户知道在哪里单击以查找所需的内容。还有一点,内容页面不应该太长,因为用手机浏览网站的用户,时间非常紧迫,而且有些还在骑行过程中,流量和网络速度是一个大问题,所以一个问题可以用一句话一张图来解决,不要讲太长的故事。
对于商场的移动支付,除了以上几点之外,最重要的支付页面必须简单化。这可以参考京东和淘宝,他们的支付页面做得很好。移动台应该简单大方。
移动台应禁止使用弹窗(必须禁止)弹窗。PC站的用户已经够烦躁了。如果在像手机或平板电脑这样的地方做了一个子弹窗,用户会说不出话来:”我们进来吧,但这并不能让我们轻松地看到它。“哪种网络语言更适合移动台?这一点我在之前的移动网站优化教程中已经讨论过,详细分析了HTML4和HTML5作为移动站的区别。
URL路径必须标准化为移动站。不要使用列表页面来节省空间成本,也不要购买新的空间。最好使用单独的辅助域名作为移动站。表单为m.xxx.com或wap.xx.com。
PC站和移动站做开放匹配,我的装修网站,移动站,在线后只有针对性的更新内容,一个外链不存在,现在大部分的主要关键字都排在主页上,最重要的原因是我的移动站做了开放匹配。
如果你不知道如何做开放匹配,你可以在我的博客的移动网站优化部分看到如何做开放匹配,这是以视频的形式显示的,一步一步地教你如何做开放匹配。关于机器人、地图、关键字设置等问题,与PC站是一样的,PC站怎么办,移动站怎么办。手机站首页的标题只能写公司品牌的文字,也可以和PC站的标题相同,这是没有危害的 。
前几天看到有同学问“H5和html5是一个东西吗?它们有什么区别?”
有网友回答说“H5和html5就像ps和photoshop一样,h5更厉害一点儿”
这个机智的回答我真的是看笑了~
很多人都以为H5是html5的简称,符合 HTML5 标准实现的页面,大家为了方便,简称 H5“。百度和搜狗百科上的答案也似乎是这样——H5(HTML5)”一般是指“html5,但是真的是这样的吗? 当连续有人问相关的问题,并详细了解一些业务以后,慢慢的发现 H5 已经不单单是一个技术相关的词。
按照百度百科理解来说:“符合 HTML5 标准实现的页面就是 H5页面”,那么当前互联网上的网站基本上都在采用了 HTML5 标准。
但大多数的客户要求是把微信里面那种好友之间,或者朋友圈分享的那种带有主题性质的宣传页面(实在是不知道怎么描述)和我们平时电脑上访问的页面通过技术区分识别出来。所以说在业务人员和一些客户眼里,微信上分享的那种炫酷的页面就是H5页面。所以 H5 和 HTML5就不是一个东西了。
如果 H5 不等于 HTML5 了,那 H5 到底是什么呢?
网友猜想可能是这样的:HTML5 在 2013 年左右就发布,在 2014 年底宣布标准制定完成,但是市面的浏览器的支持主要还是在手机上,电脑上主要有 IE 的存在导致标准普及缓慢,所以开始有开发者在手机上做很多酷炫的页面,当这些酷炫的效果在业务人员看到了以后,开始加以有效的利用,特别是在活动宣传和广告方面,为了宣传业务人员会问技术人员:“这种炫酷的效果是怎么实现的?”
技术人员说:“我用的是HTML5的技术”。业务人员的宣传营销能力那是相当厉害,在客户面前大量的宣传:“我们用到了一个牛逼技术,让你的手机网页非常炫酷好看”,慢慢的客户都知道了有一种技术可以把页面在手机上做的非常好看,非常炫酷,然后客户又开始对其他人说:“我们的这个网页用了现在最新的技术,叫什么什么5页面,对H5页面”。然后客户之间口口相传,当以后遇到同样的业务需求的时候,找另外一家供应商说:“我要一个H5页面,要长的类似什么..一样的网页”,然后这一家做网站的公司开始也把这种网站也开始叫着H5页面。
最后铺天盖地的“H5页面”就出来了。
当然,这只是网友的一个猜想……
最后
为帮助那些往想互联网方向转行想学习,却因为时间不够,资源不足而放弃的人。我搜集整理了一套完整的IT学习资料,包括Java、SEO优化、Python入门书籍等等等,比自己在网上零散收集的结构性和连贯性更强,只为帮助那些想学习的人!需要的同学可私信!私信!回复“学习”
*请认真填写需求信息,我们会在24小时内与您取得联系。