常见的面试题
- http 常见的状态码
- http 常见的headers有哪些
- 什么是Restful API
- 描述一下http的缓存机制(重点)
状态码分类
- 1xx 服务器收到请求
- 2xx 请求成功 eg:200
- 3xx 重定向 eg:302
- 4xx 客户端错误 eg:404
- 5xx 服务端错误 eg:500
http 常见的状态码
- 200 成功
- 301 永久重定向(配合location,浏览器自动处理) 应用场景:换了访问地址
- 302 临时重定向(配合location,浏览器自动处理)
- 304 资源未被修改(与缓存相关,和之前请求到的资源一样)
- 403 没有访问权限
- 404 资源未找到
- 500 服务器错误
- 504 网关超时
http methods
- 传统
- get 获取服务器数据
- post 向服务器提交数据
- 现在
- get 获取数据
- post 新建数据
- patch/put 更新数据
- delete 删除数据
3.Restful API(重点)
含义:一种新的API设计方法
传统API设计是把每个url当作一个功能,Restful API是把每个url当作一个唯一的资源
特点:
1.不使用url参数
传统/api/list?page=2
Restful API /api/list/2
2.用method表示操作类型
传统
post请求 /api/update-blog?page=2
get请求 /api/get-blog?page=2
Restful API
post请求 /api/blog/2
get请求 /api/blog/2
http headers
常见的Request Headers(请求头)
- Accept:浏览器可接收的数据格式
- Accept-Encoding:浏览器可接收的压缩算法 eg:gzip
- Accept-Language:浏览器可接收的语言 eg:zh-CN,zh
- Connection:keep-alive一次TCP连接重复使用
- cookie:浏览器自带的
- Host:请求的域名
- User-Agent(简称UA)浏览器信息 eg:Chrome/92.0.4515.131
- Content-type:发送数据的格式 eg:application/json
常见的Response Headers(响应头)
- Content-type:返回数据的格式 eg:application/json
- Content-length:返回数据的大小,多少字节 eg:7
- Content-Encoding:返回数据的压缩算法 eg:gzip
- Set-Cookie:服务器端改cookie的方式
Request Headers:
accept:text/html,application/xhtml+xml,application/xml;q=0.9,
accept-encoding:gzip, deflate, br
accept-language:zh-CN,zh;q=0.9,en;q=0.8
cookie:_ga=GA1.2.16668714
Host:www.baidu.com
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36
Response Headers:
Connection:keep-alive
content-length:7
Content-Type:text/html;charset=utf-8
Set-Cookie:BDSVRTM=17; path=/
Content-Encoding:gzip
自定义 headers
axios-js.com/docs/#Request-Config
headers:{'X-RequestedWith':'XMLHttpRequest'}
缓存相关的headers
Cache-Control:no-cache
Etag:"3e3e-dwd"
Last-Modified:Wed, 10 Mar 2021 02:33:24 GMT
http缓存
静态资源可以缓存(css,js,img,hash)
缓存策略:强制缓存和协商缓存
强制缓存Cache-Control(替代Expires)
**Response Headers:**
cache-control:
max-age:该资源在客户端delta-secondes秒内是新鲜的,无需发请求(缓存最大保持多少毫秒)max-age=2592000
no-cache:不直接使用缓存,需要重新向服务器发送请求
no-store:所有内容都不会保存到缓存或者internet临时文件中
private:表示返回的全部或者部分仅开放给某些用户做缓存使用,其他用户则不能缓存这些数据
public:表示在任何情况下都得缓存该资源
协商缓存
服务端缓存策略,服务端判断客户端资源是否和服务端一样,一致就返回304,否则返回200和最新的资源 过程:初次请求,返回数据和资源标识,再次请求则携带资源标识请求,返回304或者200、最新的资源和最新的资源标识
资源标识有两种: Response Headers:
1.Last-Modified:该资源的最后更改时间
客户端下次请求时通过Request Headers带着If-Modified-Since(或者If-Unmodified-Since)带上Last-Modified,服务端检查该时间是否与服务器的最后修改时间一致
If-Modified-Since和If-Unmodified-Since的区别是:
- If-Modified-Since:告诉服务器如果时间一致,返回状态码304
- If-Unmodified-Since:告诉服务器如果时间不一致,返回状态码412
2.Etag:资源标识的唯一标识(一个字符串) Etag:"3e3e-dwdddb4e500"
优先以Etag为准,因为它更精准些
Request Headers
If-Modified-Since:Wed, 10 Mar 2021 02:33:24 GMT
If-None-Match:"3e3e-dwd"
Response Headers:
Last-Modified:Wed, 10 Mar 2021 02:33:24 GMT
Etag:"3e3e-dwd"
刷新页面对http缓存影响
三种刷新页面方式对应不同的缓存策略
- 正常操作:地址栏输入url,跳转链接,前进后退等(强制缓存有效,协商缓存有效)
- 手动刷新:f5,点击刷新按钮,右键菜单刷新(强制缓存失效,协商缓存有效)
- 强制刷新:ctrl+f5(强制缓存失效,协商缓存失效)