JavaScript学习笔记5:Http

103 阅读3分钟

0. 面试题预热

  • http常见的状态码有哪些
  • http常见的header有哪些
  • 什么是RestfulAPI
  • 描述一下http的缓存机制(重要)
  • 从输入url到生成页面的过程

1. 状态码

  • 1xx 服务器收到请求 (但是还没有返回)
  • 2xx 请求成功 200
  • 3xx 重定向 301永久重定向 302临时重定向 304
  • 4xx 客户端错误 404 资源未找到 403 没有权限
  • 5xx 服务端错误 500 服务器错误 504 网关超时

2. http methods

  • 传统的methods
  • 现在的methods
  • Restful API

传统的methods

  • get获取数据
  • post提交数据

现在的methods

  • get获取数据
  • post新建数据
  • patch/put更新数据
  • delete删除数据

传统API设计: 把每个url当作一个功能 RestfulAPI设计:把每个url当作一个唯一的资源

如何设计成一个资源

  • 尽量不用url参数
  • 用method表示操作类型

image.png

image.png

image.png

3. http headers

Request Headers

  • Accept 浏览器可以接受的数据格式
  • Accept-Encoding 浏览器可以接收的压缩算法,如gzip
  • Accept-Language 浏览器可接收的语言,如zh-CN
  • Connection: keep-alive 一次TCP连接重复使用
  • User-Agent: 浏览器信息
  • Content-type 发送数据的格式 如 application/json
  • Content-Type设置与get请求无关,一般与post请求相关

  • 当用form表单提交时 Content-Type 默认为'application/x-www-form-urlencoded'。当用XHR提交时,Content-Type默认为'application/json'

  • Content-Type:'multipart/form-data' 一般用于上传文件时使用,多用于form表单提交 multipart:多重的。 当使用xhr形式提交时和application/json提交时的数据格式一样

  • Content-Type为'application/x-www-form-urlencoded'时提交数据的方式为"a=123&b=456&c=[1,2,3]"。但我们一般都是对象形式的写法,所以需要转换成以&符号拼接的形式 这也是为什么需要qs序列化的原因。因为这样后台才能正确的解析提交的数据

Response Headers

  • Content-type 返回数据的格式
  • Content-length 返回数据的大小 多少字节
  • Content-Encoding 返回数据的压缩算法 如gzip
  • set-cookie
  • Cache-Control
  • Expires
  • Last-Modified
  • Etag

4. http缓存

  • 关于缓存的介绍
  • http缓存策略(强制缓存+协商缓存)
  • 刷新操作方式,对缓存的影响

第一次访问完一个页面之后,重复访问,有些数据被缓存下来就不再需要重复获取。缓存能够让页面加载得更快,不再需要重复向服务器发送请求。
可以被缓存的资源:静态资源(Js,CSS,img)

4.1 强制缓存

image.png 如果服务器感觉这个资源可以被缓存,就会加上cache-control
eg. Cache-Control: max-age=31536000(单位是秒)

image.png

cache-control的值

  • max-age
  • no-cache 不用本地强制缓存 让服务端去设置缓存措施
  • no-store 不用任何缓存措施 直接重复去请求服务端
  • private 只能允许最终用户做缓存
  • public 允许中间代理做缓存

image.png

4.2 协商缓存(对比缓存)

  • 服务端缓存策略
  • 服务端判断客户端资源是否和服务端资源一样
  • 一致则返回304 否则返回200和最新的资源

image.png

根据Etag资源的唯一标识或者Last-modifed

image.png

image.png

会优先使用Etag,因为Last-Modified只能精确到秒级,如果资源被重复生成而内容不变,则Etag更准确。

5. 三种刷新操作

  • 正常操作:地址栏输入url, 跳转拦截, 前进后退等 -- 强制缓存、协商缓存都有效
  • 手动刷新:F5,单击刷新按钮,右击菜单刷新 -- 强制缓存失效、协商缓存有效
  • 强制刷新:ctrl+F5 -- 强制缓存失效,协商缓存失效