网络
状态码
| 分类 | 范围 | 含义 | 常见码 | 说明 |
|---|---|---|---|---|
| 1xx | 100-199 | 信息响应 | 101 | 切换协议(WebSocket 升级) |
| 2xx | 200-299 | 成功 | 200 | OK,请求成功 |
| 201 | Created,资源创建成功(POST) | |||
| 204 | No Content,无返回内容(DELETE) | |||
| 206 | Partial Content,范围请求(断点续传) | |||
| 3xx | 300-399 | 重定向 | 301 | 永久重定向(搜索引擎会更新链接) |
| 302 | 临时重定向(仍使用原 URL) | |||
| 304 | 未修改(协商缓存命中) | |||
| 307 | 临时重定向(保持请求方法不变) | |||
| 308 | 永久重定向(保持请求方法不变) | |||
| 4xx | 400-499 | 客户端错误 | 400 | 错误请求(参数格式错误) |
| 401 | 未授权(需要登录) | |||
| 403 | 禁止访问(无权限) | |||
| 404 | 未找到资源 | |||
| 405 | 方法不允许 | |||
| 408 | 请求超时 | |||
| 429 | 请求过多(限流) | |||
| 5xx | 500-599 | 服务端错误 | 500 | 内部服务器错误 |
| 502 | 网关错误(上游无效响应) | |||
| 503 | 服务不可用(停机/过载) | |||
| 504 | 网关超时 |
跨域(CORS)
同源策略:协议、域名、端口三者相同才同源。
不同源之间的访问请求就叫做跨域。
预检请求
跨域时,浏览器向服务端预检,询问是否允许对应的跨域请求。
请求分为简答请求和复杂请求
简单请求:
- 请求方法只能是 GET、HEAD、POST
- 不允许自定义请求头 如 x-token
- content-type只能是
text/plainapplication/x-www-form-urlencodedmultipart/form-data
简单请求不需要发起预检,服务器仍然需要返回allow-origin,浏览器需要根据它来判断是否拦截,只发起一次请求。
复杂请求:
浏览器发起预检,服务器返回allow-origin,浏览器根据它来判断是否发起正式请求,一共两次请求。
服务端可以设置预检的缓存时间,有效期内不会重复发起预检。
从输入 URL 到页面展示
- url 解析与 dns 解析
- 解析成一个结构化的对象,协议、域名、端口、路径、query、hash 等等
- 域名解析,把域名解析成ip地址
- 建立 tcp 连接
- 通过三次握手与服务器建立 tcp 连接
- 发送 http/https 请求
- 构建 http 请求报文并发送
- 服务器处理并返回
- 收到请求,处理后返回相应(包含 HTML、CSS、JS 等)
- 浏览器解析与渲染
- 解析 html 构建 dom 树
- 解析 css 构建 cssom 树
- 结合 dom cssom 生成渲染树
- 布局/重排
- 绘制/重绘
- 合成与显示
- 执行 js
- 遇到
<script>标签会阻塞解析(除非加async/defer),下载并执行 JavaScript
- 遇到
- 断开连接
- tcp 四次挥手