0. Basic Abilities

123 阅读8分钟

HTTP

HTTP 过程

  1. 域名解析
  2. 发起 TCP 3 次握手
  3. 建立 TCP 连接后发起 HTTP 请求
  4. 服务器响应 HTTP 请求,浏览器下载(HTML)代码
  5. 浏览器解析(HTML)代码,并解析资源(如:Css、Js、图片、视频 等)
  6. 浏览器对页面进行渲染,呈现给用户

HTTP 消息结构

状态行

  • 协议版本
  • 状态码
  • 状态文

请求头 - Request Headers

名称描述
method请求类型
content-type内容类型
content-length内容长度
origin
referer来源
user-agent环境信息

响应头 - Response Headers

名称描述
allow服务器支持的请求类型(如:GET、POST 等)
content-encoding内容编码
content-length内容长度
content-type内容类型
date响应时间
expires过期时间
last-modified最后改动时间
location内容提取处(通常不现实,通过 HttpServletResponse 的 sendRedirect 设置 302)
refresh剩余刷新时间(单位:秒)
server服务器名称
set-cookie设置 Cookie

请求类型

类型描述
GET请求指定的页面信息,并返回实体主体。
POST向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。
HEAD类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
PUT从客户端向服务器传送的数据取代指定的文档的内容。
DELETE请求服务器删除指定的页面。
CONNECTHTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
OPTIONS允许客户端查看服务器的性能。
TRACE回显服务器收到的请求,主要用于测试或诊断。
PATCH是对 PUT 方法的补充,用来对已知资源进行局部更新 。

HTTP 状态码

状态码英文描述中文描述
1**继续操作服务器收到请求,需要请求者继续执行操作
100Continue继续请求
101Switching Protocols切换协议
状态码英文描述中文描述
2**请求成功操作被成功接收并处理
200OK请求成功。一般用于 GET 与 POST 请求
201Created已创建。成功请求并创建了新的资源
202Accepted已接受。已经接受请求,但未处理完成
203Non-Authoritative Information非授权信息。请求成功。但返回的 meta 信息不在原始的服务器,而是一个副本
204No Content无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档
205Reset Content重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域
206Partial Content部分内容。服务器成功处理了部分 GET 请求
状态码英文描述中文描述
3**重定向需要进一步的操作以完成请求
300Multiple Choices多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择
301Moved Permanently永久移动。请求的资源已被永久的移动到新 URI,返回信息会包括新的 URI,浏览器会自动定向到新 URI。今后任何新的请求都应使用新的 URI 代替
302Found临时移动。与 301 类似。但资源只是临时被移动。客户端应继续使用原有 URI
303See Other查看其它地址。与 301 类似。使用 GET 和 POST 请求查看
304Not Modified未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源
305Use Proxy使用代理。所请求的资源必须通过代理访问
306Unused已经被废弃的 HTTP 状态码
307Temporary Redirect临时重定向。与 302 类似。使用 GET 请求重定向
状态码英文描述中文描述
4**客户端错误请求包含语法错误或无法完成请求
400Bad Request客户端请求的语法错误,服务器无法理解
401Unauthorized请求要求用户的身份认证
402Payment Required保留,将来使用
403Forbidden服务器理解请求客户端的请求,但是拒绝执行此请求
404Not Found服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面
405Method Not Allowed客户端请求中的方法被禁止
406Not Acceptable服务器无法根据客户端请求的内容特性完成请求
407Proxy Authentication Required请求要求代理的身份认证,与 401 类似,但请求者应当使用代理进行授权
408Request Time-out服务器等待客户端发送的请求时间过长,超时
409Conflict服务器完成客户端的 PUT 请求时可能返回此代码,服务器处理请求时发生了冲突
410Gone客户端请求的资源已经不存在。410 不同于 404,如果资源以前有现在被永久删除了可使用 410 代码,网站设计人员可通过 301 代码指定资源的新位置
411Length Required服务器无法处理客户端发送的不带 Content-Length 的请求信息
412Precondition Failed客户端请求信息的先决条件错误
413Request Entity Too Large由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个 Retry-After 的响应信息
414Request-URI Too Large请求的 URI 过长(URI 通常为网址),服务器无法处理
415Unsupported Media Type服务器无法处理请求附带的媒体格式
416Requested range not satisfiable客户端请求的范围无效
417Expectation Failed服务器无法满足 Expect 的请求头信息
状态码英文描述中文描述
5**服务器错误服务器在处理请求的过程中发生了错误
500Internal Server Error服务器内部错误,无法完成请求
501Not Implemented服务器不支持请求的功能,无法完成请求
502Bad Gateway作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
503Service Unavailable由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的 Retry-After 头信息中
504Gateway Time-out充当网关或代理的服务器,未及时从远端服务器获取请求
505HTTP Version not supported服务器不支持请求的 HTTP 协议的版本,无法完成处理

Event Loop

(异步)微任务 与 (异步)宏任务

  • 宏任务:setTimeout、setInterval、Ajax、Dom 时间 等
  • 微任务:promise、async/await

微任务 比 宏任务 的执行时间要早

执行具体步骤顺序

  1. 优先执行 同步任务,遇 异步宏任务 时,则将 其 置入 宏任务队列
  2. 遇到 异步微任务 则将 其 置入 微任务队列
  3. 当所有 同步代码 执行完毕 后,再将 异步微任务 从 队列 中 调入 主线程 执行
  4. 微任务 执行完毕后,再将 异步宏任务 从 队列中 调入 主进程 执行。如此往复,直至 所有任务 执行完毕

缓存

优先级

  • 浏览器会优先检查 强缓存 再检查 协商缓存
  • 如经 浏览器 检查,资源强缓存是有效的,则直接返回资源
  • 如果是本地已经缓存过的资源,或 Cache-Control 设置不缓存,当 浏览器 向 服务器 发起资源请求时,如该资源未发生变动的,则直接返回 304,浏览器在接收到该状态码后,会使用本地缓存中的资源

强缓存

  • Cache-Control:
    • public: 仅浏览器可以缓存
    • private: 浏览器 和 代理服务器(CDN)都可以缓存
    • no-cache: 不进行强缓存(但会根据服务器返回状态码)
    • no-store: 不强缓存,也不协商缓存
    • max-age: 过期时间
  • Expire: 设置过期时间

协商缓存

  • Cache-Control 设值 no-cache,触发 协商缓存
  • max-age 过期了,触发 协商缓存

关于 Last-Modified 和 ETag

Last-Modified

  • 首次请求资源,响应头回带一个 last-modified 属性标记 资源的 最后修改时间
  • 二次请求资源,浏览器会向服务器发送 If-Modified-Since 报头,询问该时间之后文件是否被修改过
  • 如果服务端资源未发生变化,则返回 304;如服务端资源发生变化,则重新发送资源请求,返回与首次请求相同

ETag

  • 资源请求的唯一标记
  • 如果 ETag 无变更,则返回 304 后不返回
  • 浏览器使用 If-None-Match 检查 ETag 更新状态

优先级

  • 通常情况下,ETag 优先级高于 Last-Modified

(未完待续)