浏览器与网络
浏览器
Content-Type 值有哪些?
- application/x-www-form-urlencoded
- application/json
- application/xml
- multipart/form-data
- text/plain
常见的请求头(Request)有哪些?
- Accept: 浏览器能够处理的内容类型。例如:Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8
- Accept-Charset: 浏览器能够显示的字符集。例如:Accept-Charset: utf-8, iso-8859-1;q=0.5
- Accept-Encoding: 浏览器能够处理的压缩编码。例如:Accept-Encoding: gzip, deflate, br
- Accept-Language: 浏览器当前设置的语言。例如:Accept-Language: en-US,en;q=0.5
- Connection: 浏览器与服务器之间连接的类型。例如:Connection: keep-alive
- Cookie: 当前页面设置的任何 Cookie。例如:Cookie: name=value; name2=value2
- Host: 发出请求的页面所在的域。例如:Host: www.example.com
- Referer(应该是 Referrer): 发出请求的页面的 URL。例如:Referer: http://www.example.com/previous-page
- User-Agent: 浏览器的用户代理字符串。例如:User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3
- If-None-Match: 客户端的缓存版本标识符。例如:If-None-Match: "etag_value"
- If-Modified-Since: 客户端上次缓存该资源的时间。例如:If-Modified-Since: Wed, 21 Oct 2015 07:28:00 GMT
常见的响应头(Responses)有哪些?
- Content-Encoding: 服务器对数据进行的编码类型。例如:Content-Encoding: gzip
- Content-Type: 服务器返回的内容类型。例如:Content-Type: text/html; application/xml; application/json; application/x-www-form-urlencoded; multipart/form-data;
- Content-Length: 服务器返回的内容长度。例如:Content-Length: 348
- Date: 响应消息产生的日期和时间。例如:Date: Tue, 04 Jun 2024 12:00:00 GMT
- Authorization: 访问控制的认证信息,通常用于认证请求头。例如:Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l
- Cache-Control: 指示缓存机制的指令。例如:Cache-Control: no-cache, no-store, must-revalidate
- Expires: 响应过期的日期和时间。例如:Expires: Wed, 21 Oct 2015 07:28:00 GMT
- Etag: 资源的特定版本标识符。例如:Etag: "etag_value"
- Last-Modified: 资源最后修改的日期和时间。例如:Last-Modified: Wed, 21 Oct 2015 07:28:00 GMT
简述 cookie、localstorage、seesionstorage
| 名称 | 大小 | 生命周期 |
|---|---|---|
| cookie | 4kb | 默认是关闭浏览器后失效, 但是也可以设置过期时间 |
| localstorage | 5M | 手动清除 |
| SessionStorage | 5M | 关闭窗口或浏览器 |
cookie 默认跨域不共享,但是可以通过服务端设置 document.domain 实现跨域共享,例如
document.domain = 'baidu.com';
那么范围 www.baidu.com、image.baidu.com、xxx.baidu.com 都可以访问浏览器攻击方式
- xss(代码注入攻击)
- csrf(利用 cookie)
- DDos 攻击
- sql 注入
浏览器调试
- 元素审查 Element
- 控制台 Console
- 网络 Network
- 内存 Memory
- 源代码 Source
- 应用 Application
- 性能 Performance
网络
说一下从 url 输入到返回请求的过程
URL 解析
缓存判断
- 根据 Cache-Control 和 Expires(1.0 依赖本地时间) 判断是否使用强制缓存
- 根据 Etag、If-None-Match 判断是否使用协商缓存(更精准)
- 根据 Last-Modified、If-Modified-Since 判断是否使用协商缓存
DNS 解析
获取 MAC 地址
TCP 三次握手
HTTPS 握手
发送请求
发送响应
页面渲染
解析 HTML 文档
1.1 遇见 html,浏览器调用 html 解析器,构建 dom 树
1.2 与此同时,遇见 style 标签、link 元素、行内样式等 CSS 样式,浏览器调用 css 解析器,构建 cssom 树(样式规则)
将 dom 树和 cssom 树合并成渲染树
根据渲染树布局
绘制
显示

如果在解析 HTML 时遇见 script,浏览器调用 javascript 解析器,处理 script 代码,如果没有做额外的设置,默认要等 cssom 构建完成才执行
TCP 四次挥手
get 和 post 请求的区别
| get | post |
|---|---|
| url 传输 | 请求体传输 |
| 不安全 | 相对安全 |
| 有缓存 | 无缓存 |
| 长度有限制(不同浏览器限制范围不一致) | 长度无限制 |
| 幂等 | 不幂等 |
幂等: 多次请求返回结果一致
说一下 http 状态码有那些
200、2xx 请求成功
302、3xx 重定向
404、4xx 客户端错误
500、5xx 服务器端错误
详情见:https://www.runoob.com/http/http-status-codes.html
http 和 https 区别
| http | https |
|---|---|
| 80 端口 | 443 端口 |
| 无需申请证书 | 需要申请证书 |
| 超文本传输协议 | ssl 加密协议 |
| 快(无状态) | 慢(因为会有一个 ssl 包需要传输) |
什么是浏览器同源策略?
同源指的是相同协议,域名和端口号
什么是跨域呢?
访问不同源的资源
什么是 options 请求?
跨域请求之前进行的一个预检查,浏览器自行发起,无需我们干预
如何解决跨域问题?
- JSONP(仅支持 get 方法,会遭受 XSS 攻击)
- websocket
- postMessage(iframe)
- 框架代理跨域
- nginx
- 跨域资源共享(CORS)