这是我参与「第四届青训营 」笔记创作活动的第5天
本堂课重点内容:
介绍了关于前端开发:起源、架构、变迁,前端与服务器、网页、浏览器相关知识、前端网页各种规范标准
前端开发:起源、架构、变迁
只读时代
1989-2004 HTML/CSS/JavaScript
特点:获取服务器的信息就要发送一次请求,获得一个网页。更新页面需要再发一次请求来替换。类似阅读器
- 单向发布
- 静态只读
- 链接跳转
- 刷新页面
- 表格对齐元素
- CGI
体验时代
2005-2010 Ajax/Web API/jQuery
特点:ajax,httprequest,修改dom树
- 动态交互
- 社交媒体
- 用户生成内容(UGC)
- 单页应用(SPA)
- jQuery
- YUI
敏捷时代
2010-2021 Fetch/Node.js/Webpack
- 模块化
- 组件化
- 转译(transpiling)
- 打包(bundling)
- React.js
- Vue.js
前端应用领域
- To Business 企业级应用
- To Customer 通过网站/手机端展示给客户
- To Developer 开发工具给开发者
服务器、网络、浏览器
HTTP 是一种能够获取如 HTML 这样的网络资源的 protocol(通讯协议)。它是在 Web 上进行数据交换的基础,是一种 client-server 协议,也就是说,请求通常是由像浏览器这样的接受方发起的。
HTTP
HTTP 是一种能够获取如 HTML 这样的网络资源的(通讯协议)
它是在 Web 上进行数据交换的基础,是一种 client-server 协议,也就是说,请求通常是由像浏览器这样的接受方发起的。
HTTP协议的主要特点
- 简单快速 --- 可以理解为每个资源的URI(统一资源定位符)都是固定的,所以在http协议处理起来比较容易
- 灵活 --- 每个http协议的头部都有一个类型,通过一个http协议就能完成不同类型的传输,所以比较灵活
- 无连接--- http协议连接一次之后就会断开,不会保持连接
- 无状态--- 可以理解为服务端和客户端是两种身份,单从http协议中是无法区分两次协议者的身份
常见状态码
- 1XX --- 指示信息,表示请求已接受,继续处理
- 2XX --- 成功,表示请求已被成功接受
-
- 200 --- OK,客户端请求成功
- 206 --- 客户端发送了一个带有Range头的GET请求,视频/音频可能会用到
- 3XX --- 重定向,要完成请求,必需进行近一步操作
重定向是服务器发起的跳转,要求客户端使用新的 URI 重新发送请求。在响应头字段 Location 中指示了要跳转的 URI。使用 Refresh 字段,还可以实现延时重定向。
-
- 301 --- 重定向,所请求的界面转移到新的url,永久重定向
- 302 --- 同上301,但是是临时重定向
- 304 --- 缓存,服务端告诉客户端有缓存可用,不用重新请求
- 4XX --- 客户端错误,请求有语法错误或请求无法实现
-
- 400 --- Bad Request, 客户端请求有语法错误
- 401 --- Unauthorized, 请求未授权
- 403 --- Forbidden, 禁止页面访问
- 404 --- Not found, 请求资源不存在
- 5XX --- 服务端错误,服务器未能实现合法的请求
-
- 500 --- Internal Server Error, 服务器错误
- 503 --- Server Unavailable, 请求未完成,服务器临时过载或者宕机,一段时间后可恢复正常
浏览器
从输入 URL 到显示发生了什么
- 浏览器从url中解析出服务器的主机名
- 浏览器将服务器的主机名转换成服务器的IP地址(DNS)
- 浏览器将端口号从url中解析出来
- 浏览器建立一条与web服务器的TCP连接
- 浏览器向服务器发送一条HTTP的请求报文
- 服务器向浏览器回送一条HTTP的响应报文
- 关闭连接,浏览器渲染
浏览器建立一条与web服务器的TCP连接的时候多了哪些事(三次握手/四次挥手)?
- 三次握手
-
- 客户端首先发送一个带有SYN标志的数据包给服务端
- 服务端接受SYN数据包之后,回传一个SYN/ACK标志的数据包以示传达确认连接信息
- 客户端收到SYN/ACK的确认数据包之后,再回传一个ACK标志的数据包给服务端,表示‘握手’结束
-
- 四次挥手
-
- 客户端向服务端先发送一个带有FIN标志的数据包给服务端
- 服务端接受FIN数据包之后,回传一个ACK的数据包给客户端以示传达确认关闭信息
- 服务端向客户端发送一个FIN标志的数据包,请求关闭连接
- 客户端收到FIN的数据包之后,回传一个ACK的数据包给服务端,以表示确认关闭
-
浏览器的渲染过程
- html元素转成DOM树
- css 样式转成CSS 树
- DOM 树和CSS 树整合形成渲染树
- 通过布局计算DOM 元素要显示的位置和样式
- 浏览器进行绘制渲染
TCP、UDP
- TCP是面向连接的,UDP 是无连接的,即发送数据前不需要先建立链接。
- TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付。 并且因为tcp可靠,面向连接,不会丢失数据因此适合大数据量的交换。
- TCP是面向字节流,UDP面向报文,并且网络出现拥塞不会使得发送速率降低(因此会出现丢包,对实时的应用比如IP电话和视频会议等)。
- TCP只能是1对1的,UDP不是
引用参考
- 「面试常问」从输入 URL 到显示发生了什么( 99 分答案)
- 深入理解现代浏览器
- W3C的规范 : W3C
- TC39规范 : TC39 – Specifying JavaScript.
- WHATWG规范 : Standards — WHATWG
- IETF规范 : IETF | Internet Engineering Task Force
- 前端学习路线: roadmap.sh