互联网、浏览器相关知识点
关于浏览器相关知识点总结, 持续更新中……
文章主要包含以下内容:
- 互联网相关知识
- 浏览器相关知识
互联网相关知识
HTTP 是什么?
- HTTP 是超文本传输协议,也就是HyperText Transfer Protocol。主要包含超文本、传输、协议。具体就不多介绍,网上资料还是很多的。
- HTTP 是一个在计算机世界里专门在「两点」之间「传输」文字、图片、音频、视频等「超文本」数据的「约定和规范」(协议)。
HTTP 的状态码有哪些?
- 1XX
- 接受,继续处理, 实际用到的很少
- 【101】 切换请求协议
- 2XX
- 表示服务器成功处理了客户端的请求,也是我们最愿意看到的状态。
- 【200】是最常见的成功状态码,表示一切正常。如果是非 HEAD 请求,服务器返回的响应头都会有 body 数据。
- 【204】也是常见的成功状态码,与 200 OK 基本相同,但响应头没有 body 数据。
- 【206】是应用于 HTTP 分块下载或断点续传,表示响应返回的 body 数据并不是资源的全部,而是其中的一部分,也是服务器处理成功的状态。
- 3XX
- 这类状态码表示客户端请求的资源发送了变动,需要客户端用新的 URL 重新发送请求获取资源,也就是重定向。
- 【301】表示永久重定向,说明请求的资源已经不存在了,需改用新的 URL 再次访问。
- 【302】表示临时重定向,说明请求的资源还在,但暂时需要用另一个 URL 来访问。
- 【304】不具有跳转的含义,表示资源未修改,重定向已存在的缓冲文件,也称缓存重定向,用于缓存控制。
- 【307】临时重定向,和302的唯一区别在于307 状态码会保证请求方法和消息主体不会改变
- 4XX
- 这类状态码表示客户端发送的报文有误,服务器无法处理,也就是错误码的含义。
- 【400】请求语法错误
- 【401】没权限,未授权
- 【403】拒绝请求
- 【404】资源不存在
- 5XX
- 【500】服务器报错
- 【501】表示客户端请求的功能服务端还不支持,类似『开发中,敬请期待』的意思
- 【502】通常是服务器作为网关或代理时返回的错误码,表示服务器自身工作正常,访问后端服务器发生了错误。
- 【503】表示服务器当前很忙,暂时无法响应服务器,类似『网络服务正忙,请稍后重试』的意思。
HTTP 请求方式
GET
对服务器资源获取的简单请求POST
用于发送包含用户提交数据的请求PUT
向服务器提交数据, 以修改数据DELETE
删除服务器上的某些资源HEAD
请求页面的头部,获取资源的元信息OPTIONS
返回所有可用的方法,常用于跨域CONNECT
用于ssl隧道的基于代理的请求TRACE
追踪请求-响应传输的路径
常见HTTP 请求头和响应头
- 请求头
- Accept 浏览器能够处理的内容类型
- Accept-Charset 浏览器能够显示的字符集
- Accept-Encoding 浏览器能够处理的压缩编码
- Accept-Language 浏览器当前设置的语言
- Connection 浏览器和服务器之间的链接类型
- keep-alive 是保证我们的http请求能建立一个持久连接, 也就是说建立一次TCP连接即可进行多次「请求和响应的交互。它的特点就是只要有一方没有明确提出断开连接,则保持TCP连接状态,减少TCP连接和断开造成的额外开销。
- Cookie 当前页面设置的cookie
- Host 发出请求页面的域
- Referer 发出请求页面的URL
- User-Agent 浏览器的用户代理字符串
- 响应头
- Date 表示消息发送的时间,时间的描述格式由 rfc822 定义
- server 服务器名称
- Connection 浏览器与服务器之间连接的类型
- Cache-Control 控制http 缓存
- content-type 文档类型
- application/json 服务器返回序列化厚的 JSON 字符串
- application/x-www-form-urlencoded 浏览器原生 form表单,注意是按照key=val&key=value 的格式
- multipart/form-data 通常用于 post 请求上传文件时
- text/xml xml格式数据
常用了解的端口对应的服务
- 21 FTP 文件传输协议
- 22 ssh
- 23 Telnet 远程登录服务
- 25 SMTP 简单邮件传输协议
- 53 DNS 域名服务器
- 80 HTTP 超文本传输协议
- 110 POP3 邮件传输协议3
- 443 HTTPS
- 1080 Sockets
- 1521 Oracle 数据库默认端口
- 3306 Mysql 数据库默认端口
HTTP 演变过程
早期 HTTP/1.0 性能上的一个很大的问题,那就是每发起一个请求,都要新建一次 TCP 连接(三次握手),而且是串行请求,做了无畏的 TCP 连接建立和断开,增加了通信开销。
下图为 HTTP/1.0 短链接 和 HTTP/1.1 长连接 keep-alive 的图解:
一张图来概括 HTTP 的演变过程,包括 HTTP/1.1、HTTPS、HTTP/2、HTTP/3 的区别
由上图可以看出,HTTP 和 HTTPS 的主要区别:
- 在HTTP和TCP中插入了 SSL/TLS 安全协议;
- HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输。而 HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输;
- 除此之外,HTTP 的端口号是 80,HTTPS 的端口号是 443;
- HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。
HTTP 的演变过程:
- HTTP/1.0
- 无法复用链接,完成即断开,重新慢启动和 TCP 3次握手
- head of line blocking: 线头阻塞,导致请求之间互相影响
- HTTP/1.1
keep-alive
长连接 可复用,- 管道
pipeline
只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,可以减少整体的响应时间。当然管道是必须基于keep-alive
确认之后才可以使用。 - 新增了 断点续传
Content-Range
头、身份认证、状态管理、cache缓存(这点下面我们会仔细讲下HTTP的缓存) - host 字段指定对应的虚拟站点
- HTTP/2.0
- 多路复用
- HTTP/2 是可以在一个连接中并发多个请求或回应,而不用按照顺序一一对应。
- 多个请求也就造就了HTTP/2 的缺点,丢包现象发生,一旦丢包,就会触发
TCP
的重传机制,这样在一个 TCP 连接中的所有的 HTTP 请求都必须等待这个丢了的包被重传回来。 - 移除了 HTTP/1.1 中的串行请求,不需要排队等待,也就不会再出现「队头阻塞」问题,降低了延迟,大幅度提高了连接的利用率。
- 二进制分帧层:应用层、传输层
- 首部压缩
- HTTP/2 会压缩头(Header)如果你同时发出多个请求,他们的头是一样的或是相似的,那么,协议会帮你消除重复的分
- 这就是所谓的
HPACK
算法:在客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,以后就不发送同样字段了,只发送索引号,这样就提高速度了。
- 服务端推送
- HTTP/2 还在一定程度上改善了传统的「请求 - 应答」工作模式,服务不再是被动地响应,也可以主动向客户端发送消息。
- 举例来说,在浏览器刚请求 HTML 的时候,就提前把可能会用到的 JS、CSS 文件等静态资源主动发给客户端,减少延时的等待,也就是服务器推送(Server Push,也叫 Cache Push)。
- 多路复用
- HTTP/3.0
- 基于2.0 出现的丢包现象,不过这都是基于
TCP
传输层的问题,所以 HTTP/3 把 HTTP 下层的TCP
协议改成了 UDP! UDP
发生是不管顺序,也不管丢包的,所以不会出现 HTTP/1.1 的队头阻塞 和 HTTP/2 的一个丢包全部重传问题。- 大家都知道
UDP
是不可靠传输的,但基于UDP
的QUIC
协议 可以实现类似TCP
的可靠性传输。QUIC
有自己的一套机制可以保证传输的可靠性的。当某个流发生丢包时,只会阻塞这个流,其他流不会受到影响。 TL3
升级成了最新的 1.3 版本,头部压缩算法也升级成了QPack
。- HTTPS 要建立一个连接,要花费 6 次交互,先是建立三次握手,然后是 TLS/1.3 的三次握手。
QUIC
直接把以往的TCP
和 TLS/1.3 的 6 次交互合并成了 3 次,减少了交互次数。
- 基于2.0 出现的丢包现象,不过这都是基于
计算机网络体系结构
从输入 url 到展示的过程
-
DNS 解析
-
TCP 三次握手
-
发送请求,分析 url,设置请求报文(头,主体)
-
服务器返回请求的文件 (html)
-
浏览器渲染
-
HTML parser --> DOM Tree
- 标记化算法,进行元素状态的标记
- dom 树构建
-
CSS parser --> Style Tree
- 解析 css 代码,生成样式树
-
attachment --> Render Tree
- 结合 dom树 与 style树,生成渲染树
-
layout: 布局
-
GPU painting: 像素绘制页面
-
-
TCP 四次挥手