龙空技术网

别再这么写POST请求了~

互联网高级架构师 589

前言:

此刻兄弟们对“post请求不到数据”可能比较关切,看官们都需要分析一些“post请求不到数据”的相关知识。那么小编同时在网摘上收集了一些对于“post请求不到数据””的相关内容,希望姐妹们能喜欢,兄弟们一起来学习一下吧!

今天在进行组内code review,发现有一位同学在使用POST方式进行接口调用传参的时候,并不是按照HTTP规范,将参数写入到请求体中进行传输,而是拼接到接口URL上面。

那么,POST请求,是否适宜将参数拼接到URL中呢?

POST请求与参数传递的标准机制

在讨论这个问题之前,我们先了解一下POST请求参数传递的正确方式是怎样的?

按照HTTP协议规定,POST请求主要服务于向服务器提交数据的操作,这类数据通常包含表单内容、文件上传等。标准实践中,这些数据应封装于请求体(Request Body)内,而非附加在URL上。这是出于POST请求对数据容量和安全性的考量,URL因其长度限制和透明性特点并不适合作为大型或敏感数据的载体。

URL参数拼接的风险

从上所述,URL参数拼接并不是POST请求参数传递的正确方式,但是既然这样做也是可以正常进行请求的,对方服务端也能正常获取到参数,那么,URL参数拼接又有什么风险?

URL长度限制:URL长度并非无限制,大多数浏览器和服务器都有最大长度限制,一般在2000字符左右,若参数过多或过大,可能导致URL截断,进而使服务端无法完整接收到所有参数安全性隐患:将参数拼接到URL中,可能导致敏感信息泄露,如密码、密钥等。此外,URL中的参数容易被浏览器历史记录、缓存、代理服务器等记录,增加了信息泄露的风险不符合HTTP规范:POST请求通常将数据放在请求体中,而非URL中,违反这一规范可能导致与某些服务器或中间件的兼容性问题。

POST传参正确写法

以下是一个使用Java的HttpURLConnection发送Post请求并将数据放在请求体中的示例:

import java.io.OutputStream;import java.net.HttpURLConnection;import java.net.URL;public class PostRequestExample {    public static void sendPostRequest(String requestUrl, String postData) throws Exception {        URL url = new URL(requestUrl);        HttpURLConnection connection = (HttpURLConnection) url.openConnection();        connection.setRequestMethod("POST");        connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); // 设置请求头,表明请求体的内容类型        connection.setDoOutput(true); // 表示要向服务器写入数据        try (OutputStream os = connection.getOutputStream()) {            byte[] input = postData.getBytes("UTF-8"); // 将参数转换为字节数组,此处假设postData是已编码好的参数字符串            os.write(input, 0, input.length); // 将参数写入请求体        }        int responseCode = connection.getResponseCode();        if (responseCode == HttpURLConnection.HTTP_OK) {            // 处理响应...        } else {            // 错误处理...        }    }    public static void main(String[] args) throws Exception {        String requestUrl = ";;        String postData = "param1=value1¶m2=value2"; // 参数以键值对的形式编码        sendPostRequest(requestUrl, postData);    }}

作者:石头聊技术

链接:

标签: #post请求不到数据 #post请求没有请求体 #post请求接收不到参数 #post请求可以不带参数吗