前端面试:GET和POST区别中预检查的疑惑?

最近在刷八股文,刷到这个问题的时候有一点不是很理解

1.get请求会向服务器发送一次请求;
2.post请求会向服务器发送两次请求,第一次是预检请求(也叫option请求),服务器会响应100,然后发送第二次请求,服务器响应200,但不是所有浏览器都发送两次请求,例如火狐;

我记得POST请求预检查不是跨域的时候才会发送吗?
chrome亲测也是如此,请问上面这个说法如何理解呢?

我如下回答可以吗

  • 约定功能定位不同

    • GET是获取数据,幂等
    • POST是新增或修改数据
  • 浏览器中传递请求参数位置

    • GET是url,POST是请求体
    • 都可以请求头携带参数
  • 参数大小限制

    • GET有限制(2KB,未验证),POST无限制
  • 特殊字符+编码

    • GET只能是ascii字符,POST无限制
    • GET遇到特殊字符会进行url编码,POST不是必需
  • 缓存 + 保存在浏览器历史记录

    • GET可以缓存,POST不可以
    • GET新开tab访问可以保存历史记录,POST不可以
阅读 3k
3 个回答

chrome 网络选项卡中隐藏了options请求(可以开起来的,不记得在哪里了)
但是你可以在服务器上检测到两次请求。
当然如果 Options 请求被浏览器或服务器拦截,你也看不到, 但是POST之前肯定会发送OPTIONS

(1)post更安全(不会作为url的一部分,不会被缓存、保存在服务器日志、以及浏览器浏览记录中)
(2)post发送的数据更大(get有url长度限制)
(3)post能发送更多的数据类型(get只能发送ASCII字符)
(4)post比get慢
(5)post用于修改和写入数据,get一般用于搜索排序和筛选之类的操作(淘宝,支付宝的搜索查询都是get提交),目的是资源的获取,读取数据

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题