Skip to content

get和post

面试题:Post 和 Get 的区别?

  • 副作用: 对服务器上的资源做改变,查询是无副作用的,插入是副作用的
  • 幂等: 发送 M 和 N 次请求(两者不相同且都大于 1),服务器上资源的状态一致,比如注册 10 个和 11 个帐号是不幂等的,对文章进行更改 10 次和 11 次是幂等的。因为前者是多了一个账号(资源),后者只是更新同一个资源。

按照规范使用post/get

  • Get 多用于无副作用,幂等的场景,例如搜索关键字
  • Post 多用于副作用,不幂等的场景,例如注册

区别

  • Get 请求能缓存,Post 不能
  • Post 相对 Get 安全一点点,因为Get 请求都包含在 URL 里(当然你想写到 body 里也是可以的),且会被浏览器保存历史纪录。Post 不会,但是在抓包的情况下都是一样的。
  • URL有长度限制,会影响 Get 请求,但是这个长度限制是浏览器规定的,不是 RFC 规定的
  • Post 支持更多的编码类型且不对数据类型限制

状态码

  • 2XX 成功
    • 200 OK,表示从客户端发来的请求在服务器端被正确处理
    • 204 No content,表示请求成功,但响应报文不含实体的主体部分
    • 205 Reset Content,表示请求成功,但响应报文不含实体的主体部分,但是与 204 响应不同在于要求请求方重置内容
    • 206 Partial Content,进行范围请求
  • 3XX 重定向
    • 301 moved permanently,永久性重定向,表示资源已被分配了新的 URL
    • 302 found,临时性重定向,表示资源临时被分配了新的 URL
    • 303 see other,表示资源存在着另一个 URL,应使用 GET 方法获取资源
    • 304 not modified,表示服务器允许访问资源,但因发生请求未满足条件的情况
    • 307 temporary redirect,临时重定向,和302含义类似,但是期望客户端保持请求方法不变向新的地址发出请求
  • 4XX 客户端错误
    • 400 bad request,请求报文存在语法错误
    • 401 unauthorized,表示发送的请求需要有通过 HTTP 认证的认证信息
    • 403 forbidden,表示对请求资源的访问被服务器拒绝
    • 404 not found,表示在服务器上没有找到请求的资源
  • 5XX 服务器错误
    • 500 internal sever error,表示服务器端在执行请求时发生了错误
    • 501 Not Implemented,表示服务器不支持当前请求所需要的某个功能
    • 503 service unavailable,表明服务器暂时处于超负载或正在停机维护,无法处理请求

TCP 协议

UDP 与 TCP 的区别

头部字节、状态机、3次握手、4次挥手、超时重传机制ARQ协议(滑动窗口、拥塞窗口)、拥塞处理(慢启动、拥塞避免、快速重传、快速恢复) 前端面试小册