关于http那些事

283 阅读4分钟

常见的面试题

- 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

  1. 传统
  • get 获取服务器数据
  • post 向服务器提交数据
  1. 现在
  • 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(强制缓存失效,协商缓存失效)