# 常见的请求方法及其相关面试问题
# 请求方法
- GET
用来请求服务器的资源,是一个幂等请求,不会造成服务器数据的改变 - POST
用来向服务器提供实体,服务器会保存提供的实体数据,不是一个幂等请求,会对服务器存储的数据造成改变。 - PUT
用来提供数据,以更新服务器存储的数据。 - DELETE
用来删除服务器里存储的相关数据 - HEAD
和 GET 类似,只不过没有请求体 - OPTIONS
用来发起预请求,通常用于跨域问题 - CONNECT
要求在与代理服务器通信时建立一个隧道,用于 TCP 通信 - TRACE
通常用于测试
# 相关面试问题
- GET 请求和 POST 请求的区别
- 应用场景
GET 请求通常用来请求数据,是一个幂等请求,不会对服务器存储的数据做出改变。POST 请求通常用来提交数据,不是一个幂等请求,会对服务器存储的数据造成改变 - 发送的报文格式
GET 请求的请求体为空,POST 请求的请求体一般存储着要发给服务器的数据。 - 是否缓存
因为 GET 请求通常时来向服务器请求资源,所以浏览器一般会对 GET 请求做缓存,但是很少对 POST 请求做缓存。 - 安全性
GET 请求可以在 url 中携带一些参数,但是这种方式对于 POST 而言时不安全的,因为 POST 的参数中可能会携带用户的星期,而 URL 会被浏览器缓存。 - 请求长度
因为浏览器对 url 的长度做了限制,所以 GET 请求发送请求的参数的个数会受到影响 - 参数类型
POST 请求的参数支持更多类型
- 应用场景
# 常见的 HTTP 请求头和响应头
请求头
- 本次请求的相关信息
- Content-Type: 客户端发出去的请求体的类型
- Host: 发出请求的所在页面的域名
- Referer: 发送请求的所在页面的 url
- origin:最初的请求是从哪里发起的,只会精确到端口号,更尊重隐私
- 希望收到的响应体的类型
- Accept:浏览器支持的类型
- Accept-Charset: 浏览器支持的字符集
- Accept-Encoding: 浏览器支持的压缩编码
- Accept-Language: 浏览器自持的语言
- 缓存相关
- Cache-Contral: 是否开启缓存,开启协商缓存还是强缓存,no-store 不开启缓存,no-cache 开启强缓存。
- Expires: 缓存到期时间
- Max-age: 缓存保存多长时间
- If-Modified-Since: 对标响应头的 Last-Modified, 用来匹配文件是否变动,只能精确到 1s 之内
- If-None-Match: 对标响应头的 Etag,非常精确
- Cookie
- 可以携带相关信息,同源访问时会自动带上
- 用户信息
- User-Agent: 用户客户端的一些必要信息
响应头
- 本次响应的相关信息
- Content-Type: 同上
- Server: 服务器的一些相关信息
- 同源策略
- Access-Contral-Allow-Origin: 服务器允许请求的 Origin 头部
- 缓存相关
- Cache-Contral: 同上
- Expires: 同上
- Max-age: 同上
- Last-Modified: 请求资源最后修改的时间
- Etag: 资源特定版本的标识符
- Cookie
- Set-Cookie: 返回给客户端,用于设置 Cookie
# http 请求报文
# http 响应报文
# 常见状态码
- 1xx 请求正在处理
- 2xx 请求处理成功
- 200 请求已经被服务器正确处理
- 204 请求被正确处理,但是没有返回响应体
- 206 表示进行了范围请求
- 3xx 请求发送重定向
- 301 请求永久重定向
- 302 请求临时重定向
- 304 让服务器去请求缓存文件
- 4xx 客户端发生错误
- 400 请求体存在语法错误
- 401 请求没有权限
- 403 请求的资源被服务器拒绝
- 404 请求的资源不存在
- 405 服务器不支持这种请求方式
- 5xx 服务器发生错误
- 500 服务器发送错误
- 501 服务器不支持请求所需要的某个功能
- 502 服务器从上层服务器得到了空的响应
- 503 服务器发送临时错误
- 504 服务器响应超时