GET请求中JSON参数的长度限制

时间:2015-07-29 11:07:41

标签: android json api get

我的Android应用程序正在对我的Server API进行两次GET调用。在第一个中,就是这个,其中参数code是256个字符串。

$.getJSON( myServerEndpoint, {
    action: "doStuff1",
    username: $("#username").val(),
    code: my256charString,
    format: "json"
})
.done(function( data ) {
    doStuff2Response(data);  
});

第二个是这个,其中参数code是一个5120 char字符串。两者都到达相同的服务器端点。

$.getJSON( myServerEndpoint, {
    action: "doStuff2",
    username: $("#username").val(),
    code: my5120CharString,
    format: "json"
})
.done(function( data ) {
    doStuff2Response(data);  
});

当我从同一设备和连接到WiFi或大多数移动数据提供商的同一用户呼叫它们时,它运行良好。

但是,当我从Vodafone数据连接进行连接时,第二个请求永远不会到达服务器。除了Vodafone的参数长度有限制之外,我找不到任何其他解释。

任何想法或解决方案?

2 个答案:

答案 0 :(得分:7)

好的,就这样吧。首先,请阅读:What is the maximum length of a URL in different browsers?

是的,“URL”的长度是有限制的,但有些我不知道如何解释为什么它只发生在沃达丰。另外,我甚至不知道请求如何通过他们的服务器。

对于解决方案,当有效负载太大时,您应该考虑从GET请求更改为POST请求。

答案 1 :(得分:1)

快速解决方案:Base64编码消息的code部分。缺点:您必须在服务器上解码。这是大多数语言的标准功能。

如果您已经在使用Base64或某些cypher,那么Blob呢? https://developer.mozilla.org/en-US/docs/Web/API/Blob

chromano的建议也是现货,只需切换到POST,你肯定会得到一个无限制的Post Body。缺点:你自己必须使用JSON.stringify和JSON.parse,如果你想将这个URL暴露给用户(比如作为共享的链接),它现在不能携带相同的信息(URL是GET请求)。 / p>