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表示操作类型
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 强制缓存
如果服务器感觉这个资源可以被缓存,就会加上cache-control
eg. Cache-Control: max-age=31536000(单位是秒)
cache-control的值
- max-age
- no-cache 不用本地强制缓存 让服务端去设置缓存措施
- no-store 不用任何缓存措施 直接重复去请求服务端
- private 只能允许最终用户做缓存
- public 允许中间代理做缓存
4.2 协商缓存(对比缓存)
- 服务端缓存策略
- 服务端判断客户端资源是否和服务端资源一样
- 一致则返回304 否则返回200和最新的资源
根据Etag资源的唯一标识或者Last-modifed
会优先使用Etag,因为Last-Modified只能精确到秒级,如果资源被重复生成而内容不变,则Etag更准确。
5. 三种刷新操作
- 正常操作:地址栏输入url, 跳转拦截, 前进后退等 -- 强制缓存、协商缓存都有效
- 手动刷新:F5,单击刷新按钮,右击菜单刷新 -- 强制缓存失效、协商缓存有效
- 强制刷新:ctrl+F5 -- 强制缓存失效,协商缓存失效