【问题标题】:Getting a 411 Length Required error when parameters are very long当参数很长时出现 411 Length Required 错误
【发布时间】:2015-06-03 08:26:16
【问题描述】:

我正在使用 Angular JS 对运行在 Google App Engine 上的 Java servlet 执行 POST 请求。代码工作正常,不幸的是我注意到如果一个(或多个)参数很长,我会收到以下错误:

错误:需要长度

POST 请求需要一个 Content-length 标头。

这是我的 Angular JS 代码:

app.controller('mycontroller', ['$scope', '$http', '$log', function($scope,$http,$log) {

this.myfunction = function() {

$http({
    method: 'POST',
    url: '/myservlet',
    params: { method: 'my_method', param1 : $("#param1").val(), param 2: ... }
}).success(function(data) {
                
}).error(function(data) {
                
});

};
}

Param1、param2 等是不同的字段,但主要是 textarea。有什么建议吗?老实说,我不知道该怎么办。

编辑:我尝试自己在标头中设置 Content-Length,但我得到了我预期的错误...

headers : { 'Content-Length' : 0 },

拒绝设置不安全的标头“Content-Length”

所以基本上,如果我设置 Content-Length 浏览器拒绝执行调用,如果我不设置它然后服务器说它是必需的......我该怎么办?

【问题讨论】:

    标签: java angularjs google-app-engine


    【解决方案1】:

    您使用的 params 参数用于传递 GET 变量作为 url 的一部分,即使 method 是 POST ($http docs)。要在 POST 请求的正文中传递信息,您必须使用 data 参数。

    所以,你的要求应该是:

    $http({
        method: 'POST',
        url: '/myservlet',
        data: { method: 'my_method', param1 : $("#param1").val(), param 2: ... }
    }).success(function(data) {
    
    }).error(function(data) {
    
    });
    

    【讨论】:

    • 这种方式在 servlet 端 request.getParameter("method") 返回 null :(
    • 等一下,看看java是怎么吃这个的
    • stackoverflow.com/questions/14525982/… 他们在这里说你需要使用getReader() 来阅读请求的正文
    • 我不想改变我现有的代码服务器端,有没有办法设置内容长度和/或继续使用请求,getParameter?谢谢。
    • 我不熟悉。对不起
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-30
    相关资源
    最近更新 更多