|
7 [# V" \0 \( n: w* i 本文资料来源于https://github.com/qiu-deqing/FE-interview目前已在github获得4700个star,在前端知识项目中名列第一本文主要分享该项目中的HTML, HTTP,web综合问题的知识点及面试题部分,后续分享剩余5个章节。 % v2 D* e% [* w* x( y
目录前端需要注意哪些SEOweb开发中会话跟踪的方法有哪些的title和alt有什么区别doctype是什么,举例常见doctype及特点HTML全局属性(global attribute)有哪些 . D* z7 e$ A& k8 B7 m* I& m
什么是web语义化,有什么好处HTTP method从浏览器地址栏输入url到显示页面的步骤(以HTTP为例)HTTP request报文结构是怎样的HTTP response报文结构是怎样的如何进行网站性能优化 ' H$ n: S2 ?) ?+ _0 j6 y
什么是渐进增强HTTP状态码及其含义欢迎关注笔者,优质文章都在这里等你。常见排序算法的时间复杂度,空间复杂度
$ h$ b6 L2 P" c$ E* a. m+ B 前端需要注意哪些SEO合理的title、description、keywords:搜索对着三项的权重逐个减小,title值强调重点即可,重要关键词出现不要超过2次,而且要靠前,不同页面title要有所不同;description把页面内容高度概括,长度合适,不可过分堆砌关键词,不同页面description有所不同;keywords列举出重要关键词即可
$ }8 E; v2 k+ e' h+ R3 N# K# I7 Q4 Q 语义化的HTML代码,符合W3C规范:语义化代码让搜索引擎容易理解网页重要内容HTML代码放在最前:搜索引擎抓取HTML顺序是从上到下,有的搜索引擎对抓取长度有限制,保证重要内容一定会被抓取重要内容不要用js输出:爬虫不会执行js获取内容 ' a9 P3 k' a" M# n& H( ~: `
少用iframe:搜索引擎不会抓取iframe中的内容非装饰性图片必须加alt提高网站速度:网站速度是搜索引擎排序的一个重要指标web开发中会话跟踪的方法有哪些cookiesessionurl重写隐藏input
) B# W- u% R) i4 w3 ] ip地址的title和alt有什么区别title是global attributes之一,用于为元素提供附加的advisory information通常当鼠标滑动到元素上的时候显示alt是的特有属性,是图片内容的等价描述,用于图片无法加载时显示、读屏器阅读图片。
$ S4 t* w, Z3 m( F 可提图片高可访问性,除了纯装饰图片外都必须设置有意义的值,搜索引擎会重点分析doctype是什么,举例常见doctype及特点声明必须处于HTML文档的头部,在标签之前,HTML5中不区分大小写 " _. m2 M. Z# p0 j [
声明不是一个HTML标签,是一个用于告诉浏览器当前HTMl版本的指令现代浏览器的html布局引擎通过检查doctype决定使用兼容模式还是标准模式对文档进行渲染,一些浏览器有一个接近标准模型。 * x, r0 }/ y- _! o# i( O
在HTML4.01中声明指向一个DTD,由于HTML4.01基于SGML,所以DTD指定了标记规则以保证浏览器正确渲染内容HTML5不基于SGML,所以不用指定DTDHTML全局属性(global attribute)有哪些
8 L6 `! J/ F! X \ f! D( w5 j 参考资料:MDN: html global attribute或者W3C HTML global-attributesaccesskey:设置快捷键,提供快速访问元素如aaa在windows下的firefox中按alt + shift + a可激活元素 + g4 y3 V3 P1 k" T- K" w) e
class:为元素设置类标识,多个类名用空格分开,CSS和javascript可通过class属性获取元素contenteditable: 指定元素内容是否可编辑contextmenu: 自定义鼠标右键弹出菜单内容 2 \' F% E/ l& m" y( y
data-*: 为元素增加自定义属性dir: 设置元素文本方向draggable: 设置元素是否可拖拽dropzone: 设置元素拖放类型: copy, move, linkhidden: 表示一个元素是否与文档。
% I1 ]; r t5 ]$ Y4 T3 s 样式上会导致元素不显示,但是不能用这个属性实现样式效果id: 元素id,文档内唯一lang: 元素内容的的语言spellcheck: 是否启动拼写和语法检查style: 行内css样式tabindex: 设置元素可以获得焦点,通过tab可以导航 ; ~/ } y" q; L% {
title: 元素相关的建议信息translate: 元素和子孙节点内容是否需要本地化什么是web语义化,有什么好处web语义化是指通过HTML标记表示页面包含的信息,包含了HTML标签的语义化和css命名的语义化。
& o& m& ]- Z& Y" }& l+ D HTML标签的语义化是指:通过使用包含语义的标签(如h1-h6)恰当地表示文档结构 css命名的语义化是指:为html标签添加有意义的class,id补充未表达的语义,如Microformat通过添加符合规则的class描述信息 为什么需要语义化:。 5 z% s, G, }: n0 a, \: \- X
去掉样式后页面呈现清晰的结构盲人使用读屏器更好地阅读搜索引擎更好地理解页面,有利于收录便团队项目的可持续运作及维护
# o- a7 f3 E& \2 t F HTTP method一台服务器要与HTTP1.1兼容,只要为资源实现GET和HEAD方法即可GET是最常用的方法,通常用于请求服务器发送某个资源HEAD与GET类似,但服务器在响应中值返回首部,不返回实体的主体部分。 7 g/ g7 S5 m( v% G% `6 w8 e% q1 M
PUT让服务器用请求的主体部分来创建一个由所请求的URL命名的新文档,或者,如果那个URL已经存在的话,就用干这个主体替代它POST起初是用来向服务器输入数据的实际上,通常会用它来支持HTML的表单表单中填好的数据通常会被送给服务器,然后由服务器将其发送到要去的地方。
3 E8 g+ l0 C" n: ^& C# N3 t TRACE会在目的服务器端发起一个环回诊断,最后一站的服务器会弹回一个TRACE响应并在响应主体中携带它收到的原始请求报文TRACE方法主要用于诊断,用于验证请求是否如愿穿过了请求/响应链OPTIONS方法请求web服务器告知其支持的各种功能。 # h. I" O! l7 G& o1 u
可以查询服务器支持哪些方法或者对某些特殊资源支持哪些方法DELETE请求服务器删除请求URL指定的资源从浏览器地址栏输入url到显示页面的步骤(以HTTP为例)在浏览器地址栏输入URL浏览器查看缓存,如果请求资源在缓存中并且新鲜,跳转到转码步骤
/ A9 o; G' u" J' B& G 如果资源未缓存,发起新请求如果已缓存,检验是否足够新鲜,足够新鲜直接提供给客户端,否则与服务器进行验证检验新鲜通常有两个HTTP头进行控制Expires和Cache-Control:HTTP1.0提供Expires,值为一个绝对时间表示缓存新鲜日期。
6 ^ f9 A7 Y4 B2 { HTTP1.1增加了Cache-Control: max-age=,值为以秒为单位的最大新鲜时间浏览器解析URL获取协议,主机,端口,path浏览器组装一个HTTP(GET)请求报文浏览器获取主机ip地址,过程如下: 6 m9 A0 F) c- l4 B- y
浏览器缓存本机缓存hosts文件路由器缓存ISP DNS缓存DNS递归查询(可能存在负载均衡导致每次IP不一样)打开一个socket与目标IP地址,端口建立TCP链接,三次握手如下:客户端发送一个TCP的SYN=1,Seq=X的包到服务器端口
5 ^1 [6 O% e6 Q5 p$ A 服务器发回SYN=1, ACK=X+1, Seq=Y的响应包客户端发送ACK=Y+1, Seq=ZTCP链接建立后发送HTTP请求服务器接受请求并解析,将请求转发到服务程序,如虚拟主机使用HTTP Host头部判断请求的服务程序
2 @1 {7 V( X: ^ 服务器检查HTTP请求头是否包含缓存验证信息如果验证缓存新鲜,返回304等对应状态码处理程序读取完整请求并准备HTTP响应,可能需要查询数据库等操作服务器将响应报文通过TCP连接发送回浏览器浏览器接收HTTP响应,然后根据情况选择关闭TCP连接或者保留重用,关闭TCP连接的四次握手如下: ( Q5 u) a2 |( n4 p: K
主动方发送Fin=1, Ack=Z, Seq= X报文被动方发送ACK=X+1, Seq=Z报文被动方发送Fin=1, ACK=X, Seq=Y报文主动方发送ACK=Y, Seq=X报文浏览器检查响应状态吗:是否为1XX,3XX, 4XX, 5XX,这些情况处理与2XX不同
9 S) P. Z8 L" i2 y, A2 K& u& c8 ? 如果资源可缓存,进行缓存对响应进行解码(例如gzip压缩)根据资源类型决定如何处理(假设资源为HTML文档)解析HTML文档,构件DOM树,下载资源,构造CSSOM树,执行js脚本,这些操作没有严格的先后顺序,以下分别解释 ( O$ `8 r _8 Z2 j% Y
构建DOM树:Tokenizing:根据HTML规范将字符流解析为标记Lexing:词法分析将标记转换为对象并定义属性和规则DOM construction:根据HTML标记关系将对象组成DOM树解析过程中遇到图片、样式表、js文件,启动下载
. L$ c: k) n% O 构建CSSOM树:Tokenizing:字符流转换为标记流Node:根据标记创建节点CSSOM:节点创建CSSOM树根据DOM树和CSSOM树构建渲染树:从DOM树的根节点遍历所有可见节点,不可见节点包括:1)script,meta这样本身不可见的标签。 9 K; s/ p% u) p8 V9 o5 g
2)被css隐藏的节点,如display: none对每一个可见节点,找到恰当的CSSOM规则并应用发布可视节点的内容和计算样式js解析如下:浏览器创建Document对象并解析HTML,将解析到的元素和文本节点添加到文档中,此时document.readystate为loading 7 }0 h4 b/ t! G- u* _6 ]
HTML解析器遇到没有async和defer的script时,将他们添加到文档中,然后执行行内或外部脚本这些脚本会同步执行,并且在脚本下载和执行时解析器会暂停这样就可以用document.write()把文本插入到输入流中。 6 H% {+ S( I5 p8 i% V
同步脚本经常简单定义函数和注册事件处理程序,他们可以遍历和操作script和他们之前的文档内容当解析器遇到设置了async属性的script时,开始下载脚本并继续解析文档脚本会在它下载完成后尽快执行,但是解析器不会停下来等它下载。
9 d3 n9 k6 O; R2 Q* |- y 异步脚本禁止使用document.write(),它们可以访问自己script和之前的文档元素当文档完成解析,document.readState变成interactive所有defer脚本会按照在文档出现的顺序执行,延迟脚本能访问完整文档树,禁止使用document.write()
+ P( j& A4 } F2 |4 A 浏览器在Document对象上触发DOMContentLoaded事件此时文档完全解析完成,浏览器可能还在等待如图片等内容加载,等这些内容完成载入并且所有异步脚本完成载入和执行,document.readState变为complete,window触发load事件
. `$ l! u u" q- C. P( A3 t 显示页面(HTML解析过程中会逐步显示页面)HTTP request报文结构是怎样的rfc2616中进行了定义:首行是Request-Line包括:请求方法,请求URI,协议版本,CRLF首行之后是若干行请求头,包括general-header,request-header或者entity-header,每个一行以CRLF结束 3 U! ^1 K: n6 r/ F
请求头和消息实体之间有一个CRLF分隔根据实际请求需要可能包含一个消息实体 一个请求报文例子如下:GET /Protocols/rfc2616/rfc2616-sec5.html HTTP/1.1
) E4 p4 q8 _. C# R, } Host: www.w3.org5 S# h( u; P$ t' b
Connection: keep-alive
' o# z0 e' ]+ l7 ?/ `8 s5 z6 ^ Cache-Control: max-age=0
; J) m" R; Z5 w, X, e Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8! q( `: D5 H# F4 n" V
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36
r) b% P$ p5 n1 |' K Referer: https://www.google.com.hk/9 ?! p) L, f. @' _% m0 n2 ]" |
Accept-Encoding: gzip,deflate,sdch
8 J1 C3 ]$ s4 E- u5 |. _1 x Accept-Language: zh-CN,zh;q=0.8,en;q=0.6
( ]! a5 c3 @1 n Cookie: authorstyle=yes
& N; d1 u. U2 j$ n; [, |# P7 D If-None-Match: "2cc8-3e3073913b100"2 t5 ~; g0 w5 r3 W0 r
If-Modified-Since: Wed, 01 Sep 2004 13:24:52 GMT
% S. t3 v: l% o name=qiu&age=25
, r( T" z9 ]% m& @
& a, B7 }- X# F% v9 v/ B HTTP response报文结构是怎样的rfc2616中进行了定义:首行是状态行包括:HTTP版本,状态码,状态描述,后面跟一个CRLF首行之后是若干行响应头,包括:通用头部,响应头部,实体头部响应头部和响应实体之间用一个CRLF空行分隔 3 h9 a' b( N$ h
最后是一个可能的消息实体 响应报文例子如下:HTTP/1.1 200 OK$ ~0 X8 j. s0 \& b* W8 ~# B3 k
Date: Tue, 08 Jul 2014 05:28:43 GMT
( h" x8 K- v* U: Y7 K A w: {8 P Server: Apache/2
% M$ S: {8 ^8 J- X- S Last-Modified: Wed, 01 Sep 2004 13:24:52 GMT5 |" e" a9 Z B8 a' A1 _/ B5 \
ETag: "40d7-3e3073913b100": Q- s/ b6 r T2 K0 p- j7 p; u) @
Accept-Ranges: bytes3 C) Y- w% r/ T; v' a* Y
Content-Length: 165992 B, W7 M5 {+ A- N% a
Cache-Control: max-age=21600
/ u' f% z5 u! j) k4 T Expires: Tue, 08 Jul 2014 11:28:43 GMT- D4 \( `4 k" |4 K4 O9 [
P3P: policyref="http://www.w3.org/2001/05/P3P/p3p.xml"/ `' y3 i; |4 @5 D0 K- a' l
Content-Type: text/html; charset=iso-8859-1
/ [, |+ o& j7 ^ }7 Y3 k8 W {"name": "qiu", "age": 25}8 r* N8 ~# J4 u4 q9 G
5 E, |( ]: N6 m 如何进行网站性能优化雅虎Best Practices for Speeding Up Your Web Site:content方面减少HTTP请求:合并文件、CSS精灵、inline Image减少DNS查询:DNS查询完成之前浏览器不能从这个主机下载任何任何文件。 / \9 N5 M* v; m) I/ U
方法:DNS缓存、将资源分布到恰当数量的主机名,平衡并行下载和DNS查询避免重定向:多余的中间访问使Ajax可缓存非必须组件延迟加载未来所需组件预加载减少DOM元素数量将资源放到不同的域下:浏览器同时从一个域下载资源的数目有限,增加域可以提高并行下载量 . u; o0 \' d( F
减少iframe数量不要404Server方面使用CDN添加Expires或者Cache-Control响应头对组件使用Gzip压缩配置ETagFlush Buffer EarlyAjax使用GET进行请求 , D" F% e% S4 e
避免空src的img标签Cookie方面减小cookie大小引入资源的域名不要包含cookiecss方面将样式表放到页面顶部不使用CSS表达式使用不使用@import不使用IE的FilterJavascript方面
" g3 ?6 I/ F8 t/ n' _5 G) } 将脚本放到页面底部将javascript和css从外部引入压缩javascript和css删除不需要的脚本减少DOM访问合理设计事件监听器图片方面优化图片:根据实际颜色需要选择色深、压缩优化css精灵不要在HTML中拉伸图片 ! ?- Y5 J4 g, f' \& |0 x2 {
保证favicon.ico小并且可缓存移动方面保证组件小于25kPack Components into a Multipart Document什么是渐进增强渐进增强是指在web设计时强调可访问性、语义化HTML标签、外部样式表和脚本。 ( e5 ~& \' W, q
保证所有人都能访问页面的基本内容和功能同时为高级浏览器和高带宽用户提供更好的用户体验核心原则如下:所有浏览器都必须能访问基本内容所有浏览器都必须能使用基本功能所有内容都包含在语义化标签中通过外部CSS提供增强的布局 . y- ~# S6 ^, i& G$ N2 |" b, `
通过非侵入式、外部javascript提供增强功能end-user web browser preferences are respectedHTTP状态码及其含义参考RFC 26161XX:信息状态码
# P. F& W3 I& ]' A& t 100 Continue:客户端应当继续发送请求这个临时相应是用来通知客户端它的部分请求已经被服务器接收,且仍未被拒绝客户端应当继续发送请求的剩余部分,或者如果请求已经完成,忽略这个响应服务器必须在请求万仇向客户端发送一个最终响应。
% f6 H/ E2 ]- Z 101 Switching Protocols:服务器已经理解力客户端的请求,并将通过Upgrade消息头通知客户端采用不同的协议来完成这个请求在发送完这个响应最后的空行后,服务器将会切换到Upgrade消息头中定义的那些协议。 7 h% P1 Y, |/ P6 d* `; _3 u4 W
2XX:成功状态码200 OK:请求成功,请求所希望的响应头或数据体将随此响应返回201 Created:202 Accepted:203 Non-Authoritative Information:204 No Content: / Q, y1 U0 a& C3 t. k* z4 c) h
205 Reset Content:206 Partial Content:3XX:重定向300 Multiple Choices:301 Moved Permanently:302 Found:303 See Other:
0 P3 [% X9 Q, V0 S6 ~ 304 Not Modified:305 Use Proxy:306 (unused):307 Temporary Redirect:4XX:客户端错误400 Bad Request:401 Unauthorized: ' g! D4 O# ~6 e
402 Payment Required:403 Forbidden:404 Not Found:405 Method Not Allowed:406 Not Acceptable:407 Proxy Authentication Required:
4 `9 Y2 M6 {3 J& Z3 K# k, j5 j 408 Request Timeout:409 Conflict:410 Gone:411 Length Required:412 Precondition Failed:413 Request Entity Too Large:
v& N3 z1 U: f" j( L) F 414 Request-URI Too Long:415 Unsupported Media Type:416 Requested Range Not Satisfiable:417 Expectation Failed:
+ O4 }3 K6 k- m6 B t: R 5XX: 服务器错误500 Internal Server Error:501 Not Implemented:502 Bad Gateway:503 Service Unavailable:504 Gateway Timeout: ' _2 H ^5 W0 i5 i
505 HTTP Version Not Supported:您的转发+关注就是对笔者最大的支持,欢迎关注对大厂架构设计,BAT等厂家面试题解读,编程语言理论或者互联网圈逸闻趣事这些感兴趣,欢迎关注笔者,没有错,干货文章都在这里。 " o& x, [) R/ ?- y6 k4 |8 V% N; ?2 e
! m# ^1 d7 [1 q6 V! @% k1 `" u. }$ x G
8 H G, q9 t1 p, n5 X
7 q. ]* [! Y+ G2 ?6 ?! Z! c% j% h |