Skip to content

浏览器与网络

浏览器

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
名称大小生命周期
cookie4kb默认是关闭浏览器后失效, 但是也可以设置过期时间
localstorage5M手动清除
SessionStorage5M关闭窗口或浏览器

cookie 默认跨域不共享,但是可以通过服务端设置 document.domain 实现跨域共享,例如

document.domain = 'baidu.com';
那么范围 www.baidu.com、image.baidu.com、xxx.baidu.com 都可以访问
浏览器攻击方式
  1. xss(代码注入攻击)
  2. csrf(利用 cookie)
  3. DDos 攻击
  4. sql 注入
浏览器调试
  1. 元素审查 Element
  2. 控制台 Console
  3. 网络 Network
  4. 内存 Memory
  5. 源代码 Source
  6. 应用 Application
  7. 性能 Performance

网络

说一下从 url 输入到返回请求的过程
  1. URL 解析

  2. 缓存判断

    1. 根据 Cache-Control 和 Expires(1.0 依赖本地时间) 判断是否使用强制缓存
    2. 根据 Etag、If-None-Match 判断是否使用协商缓存(更精准)
    3. 根据 Last-Modified、If-Modified-Since 判断是否使用协商缓存
  3. DNS 解析

  4. 获取 MAC 地址

  5. TCP 三次握手

  6. HTTPS 握手

  7. 发送请求

  8. 发送响应

  9. 页面渲染

    1. 解析 HTML 文档

      1.1 遇见 html,浏览器调用 html 解析器,构建 dom 树

      1.2 与此同时,遇见 style 标签、link 元素、行内样式等 CSS 样式,浏览器调用 css 解析器,构建 cssom 树(样式规则)

    2. 将 dom 树和 cssom 树合并成渲染树

    3. 根据渲染树布局

    4. 绘制

    5. 显示 image-20240520185637556

      如果在解析 HTML 时遇见 script,浏览器调用 javascript 解析器,处理 script 代码,如果没有做额外的设置,默认要等 cssom 构建完成才执行

  10. TCP 四次挥手

get 和 post 请求的区别
getpost
url 传输请求体传输
不安全相对安全
有缓存无缓存
长度有限制(不同浏览器限制范围不一致)长度无限制
幂等不幂等

幂等: 多次请求返回结果一致

说一下 http 状态码有那些

200、2xx 请求成功
302、3xx 重定向
404、4xx 客户端错误
500、5xx 服务器端错误
详情见:https://www.runoob.com/http/http-status-codes.html

http 和 https 区别
httphttps
80 端口443 端口
无需申请证书需要申请证书
超文本传输协议ssl 加密协议
快(无状态)慢(因为会有一个 ssl 包需要传输)
什么是浏览器同源策略?

同源指的是相同协议,域名和端口号

什么是跨域呢?

访问不同源的资源

什么是 options 请求?

跨域请求之前进行的一个预检查,浏览器自行发起,无需我们干预

如何解决跨域问题?
  1. JSONP(仅支持 get 方法,会遭受 XSS 攻击)
  2. websocket
  3. postMessage(iframe)
  4. 框架代理跨域
  5. nginx
  6. 跨域资源共享(CORS)

基于 MIT 许可发布