http get请求为什么也可以有请求体

发布于 2022-09-12 04:20:13 字数 1465 浏览 20 评论 0

http get请求读书的时候说没有请求体,但是为什么我测试可以有请求体
测试过程
1.编写controller

import java.io.BufferedReader;
import java.io.InputStreamReader;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.litong.utils.io.IOUtils;

import lombok.extern.slf4j.Slf4j;

@RestController
@RequestMapping("test")
@Slf4j
public class TestController {
  // 这里我没做异常处理
  @RequestMapping("/request")
  public String request(HttpServletRequest request, HttpServletResponse response) {
    String method = request.getMethod();
    log.info("method : " + method);
    StringBuilder requestBody = new StringBuilder();
    BufferedReader buffredReader = null;
    try {
      buffredReader = new BufferedReader(new InputStreamReader(request.getInputStream()));
      String inputStr;
      while ((inputStr = buffredReader.readLine()) != null) {
        requestBody.append(inputStr);
      }
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      IOUtils.closeQuietly(buffredReader);
    }
    return requestBody.toString();
  }
}

使用post发送测试
方法选get,发送json数据测试
image.png
服务器日志中显示这是个get方法,通过上图可知,请求体中确实有数据

2020-08-25 20:46:18.451 INFO  TestController.request:24 - method : GET

这是为什么?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

怕倦 2022-09-19 04:20:13

RFC 文档中从来就没有说过 GET 没有请求体.RFC 只是说 只是说 GET 意味着通过 URI 来识别资源。 这就意味着,各种代理缓存以及 CDN 都是通过 URI 区分出资源.如果你把参数丢在了 REQUEST BODY里,那这些服务都要混乱了..

有些 http 的 lib 里不让甚至直接不提供 GET 方法追加请求体的操作,单实际上,这并不是错误.

ps. http://web-sniffer.net/rfc/rfc2616.html#section-9.3

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文