Skip to content

网络

状态码

分类范围含义常见码说明
1xx100-199信息响应101切换协议(WebSocket 升级)
2xx200-299成功200OK,请求成功
201Created,资源创建成功(POST)
204No Content,无返回内容(DELETE)
206Partial Content,范围请求(断点续传)
3xx300-399重定向301永久重定向(搜索引擎会更新链接)
302临时重定向(仍使用原 URL)
304未修改(协商缓存命中)
307临时重定向(保持请求方法不变)
308永久重定向(保持请求方法不变)
4xx400-499客户端错误400错误请求(参数格式错误)
401未授权(需要登录)
403禁止访问(无权限)
404未找到资源
405方法不允许
408请求超时
429请求过多(限流)
5xx500-599服务端错误500内部服务器错误
502网关错误(上游无效响应)
503服务不可用(停机/过载)
504网关超时

跨域(CORS)

同源策略:协议、域名、端口三者相同才同源。

不同源之间的访问请求就叫做跨域。

预检请求

跨域时,浏览器向服务端预检,询问是否允许对应的跨域请求。

请求分为简答请求和复杂请求

简单请求:

  • 请求方法只能是 GET、HEAD、POST
  • 不允许自定义请求头 如 x-token
  • content-type只能是 text/plain application/x-www-form-urlencoded multipart/form-data

简单请求不需要发起预检,服务器仍然需要返回allow-origin,浏览器需要根据它来判断是否拦截,只发起一次请求。

复杂请求:

浏览器发起预检,服务器返回allow-origin,浏览器根据它来判断是否发起正式请求,一共两次请求。

服务端可以设置预检的缓存时间,有效期内不会重复发起预检。

从输入 URL 到页面展示

  1. url 解析与 dns 解析
    • 解析成一个结构化的对象,协议、域名、端口、路径、query、hash 等等
    • 域名解析,把域名解析成ip地址
  2. 建立 tcp 连接
    • 通过三次握手与服务器建立 tcp 连接
  3. 发送 http/https 请求
    • 构建 http 请求报文并发送
  4. 服务器处理并返回
    • 收到请求,处理后返回相应(包含 HTML、CSS、JS 等)
  5. 浏览器解析与渲染
    • 解析 html 构建 dom 树
    • 解析 css 构建 cssom 树
    • 结合 dom cssom 生成渲染树
    • 布局/重排
    • 绘制/重绘
    • 合成与显示
  6. 执行 js
    • 遇到 <script> 标签会阻塞解析(除非加 async/defer),下载并执行 JavaScript
  7. 断开连接
    • tcp 四次挥手