这是面试过程中一道高频考题。
从面试官的角度思考:
基本回答:
如果应聘者只回答了上述步骤,很多关键步骤(前端应该了解的知识点)没有提及,很有可能达不到面试官想要的回答效果。
笔者针对一些关键步骤,具体展开说明。让这道题成为我们面试考卷中的加分项。
浏览器会构建请求行:
// 请求方法是 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小时内与您取得联系。