Spring Boot 之面试官灵魂拷问:GET 和 POST 到底有啥区别?

62 阅读3分钟

《Spring Boot 注解探秘:HTTP 请求的魅力之旅》一文中,我们了解到了 Spring Boot 中用于处理 HTTP 请求的一些注解,包括 GET、PUT、POST、DELETE 等请求方法。在实际开发中,GET 和 POST 请求是最常用的两种请求方法,它们在很多方面都存在着差异。本文就来分享下GET请求和POST请求的区别。

一、GET请求

  1. 定义:GET 请求用于从服务器获取资源,通常用于查询操作。
  2. 数据传输:GET请求将参数附加在URL后面,以?开头,多个参数之间用&连接。例如:woaixuexi.com/api?usernam…
  3. 安全性:由于 GET 请求的参数在 URL 中可见,因此不太安全,不适合传输敏感信息。
  4. 缓存:GET 请求可以被缓存,除非指定了不同的缓存策略。
  5. 长度限制:GET 请求的 URL 长度通常有限制,具体限制取决于浏览器和服务器。如谷歌

二、POST请求

  1. 定义:POST 请求用于向服务器提交数据,通常用于创建、更新或提交表单等操作。
  2. 数据传输:POST 请求将数据放在请求体中发送给服务器。
  3. 安全性:POST 请求的数据在请求体中,相对 GET 请求更安全,适合传输敏感信息。
  4. POST 请求默认不会被缓存。
  5. POST 请求的长度限制相对较少,通常可以发送较大的数据量。

三、GET和POST的异同

  1. 数据传输方式:GET 请求通过 URL 传递参数,POST 请求通过请求体传递参数。
  2. 安全性:POST 请求比 GET 请求更安全,适合传输敏感信息。 缓存:GET 请求可被缓存,POST 请求默认不被缓存。
  3. 长度限制:GET 请求的 URL 长度有限制,POST 请求的长度限制相对较少。
  4. 用途:GET 请求通常用于获取数据,POST 请求通常用于提交数据。

四、为什么你的 POST 请求发送了两次

跨源资源共享(CORS, Cross-Origin Resource Sharing)场景下,由于同源策略(即协议、域名、端口相同)的限制,浏览器通常不允许跨域请求。然而,借助CORS 规范,服务器可以指定允许特定的外部源访问其资源。 当发起一个对跨域资源对POST请求时,为了安全起见,浏览器会先发送一个OPTIONS请求,也叫预检请求,以确认实际请求是否安全可接受。如果预检请求成功,浏览器随后才会发送实际对POST请求。因此,在开发者工具的控制台中,你会观察到两次请求发生:"OPTIONS"预检请求以及跟随其后的"POST"请求。这种现象会引发关于为何“POST请求会被发送两次”的疑问,这个问题也频繁出现在互联网大厂的面试中。

五、应用场景

  1. 查询数据:当需要从服务器获取数据时,如查询数据库中的记录,通常使用 GET 请求。
  2. 提交表单:当需要向服务器提交表单数据,如注册用户、提交订单等,通常使用 POST 请求。
  3. 上传文件:由于 POST 请求可以发送较大的数据量,因此适合用于上传文件。
  4. 安全性要求高的操作:如修改密码、进行支付等操作,应使用 POST 请求来确保数据的安全。

六、总结

GET 和 POST 请求是 HTTP 中最基本的两种请求方法,它们在数据传输、安全性、缓存等方面存在着明显的区别。在实际开发中,应根据具体的需求选择合适的请求方法,以确保数据的正确传输和安全性。