【问题标题】:XMLHttpRequest fails when outgoing Content-Length exceeds 3508 bytes. Why?当传出 Content-Length 超过 3508 字节时,XMLHttpRequest 失败。为什么?
【发布时间】:2010-11-08 13:43:13
【问题描述】:

更新:我继续前进,而不是寻找答案

更新:请参阅下面的最新更新。

我正在使用 JQuery 的 jQuery.ajax() 函数进行 POST 请求,当传出的 Content-Length 超过 3508 字节时,出现问题并且没有返回响应。只要 Content-Length 保持在 3509 字节以下,一切都会正常工作。

以下是我注意到的其他一些事情:

  • 如果我将方法从 POST 更改为 GET,一切正常,但由于 URL 具有(特定于浏览器的)最大长度,我认为我不能这样做(例如,最大长度为 2,083 Internet Explorer 的字符)。

  • 当我执行普通的非 XMLHttpRequest 表单 POST 时,一切正常(即使 Content-Length 远大于 3508 字节)。

  • Firefox (3.6.12) 仍将调用成功处理程序,数据为“未定义”,而 Internet Explorer (8) 将改为调用错误处理程序,文本状态为“错误”,errorThrown 为“未定义”。

请注意,在“服务器端”,我正在运行 ASP.NET 开发服务器并使用 ASP.NET MVC 1.0。

这基本上是我正在做的事情:

$.ajax({
    type: "POST",
    url: "", // A resource on localhost
    // The following string results in a Content-Length of 3509 bytes
    data: "-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------",
    success: function(response) {
        alert(response);
    },
    error: function(XMLHttpRequest, textStatus, errorThrown) {
        alert(textStatus + " " + errorThrown);
    },
    dataType: "json"
});

有什么想法吗?

更新:

以下是失败请求的请求标头(没有响应):

POST /WPA/BerekenEindcijfer HTTP/1.1
Host: localhost:4387
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 ( .NET CLR 3.5.30729)
Accept: application/json, text/javascript, */*
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Referer: http://localhost:4387/WPA
Content-Length: 3509

更新:我将应用程序发布到 IIS (5.1) 并没有出现问题,而且奇怪的是,现在使用 ASP.NET 开发服务器也不再出现问题。出于某种原因,请求中出现了两个新标头(尽管我不确定它们是否有任何影响):

Pragma: no-cache
Cache-Control: no-cache

我仍然对正在/正在发生的事情感到困惑。

【问题讨论】:

  • 传出或返回内容长度?
  • data 长什么样子,能举个例子吗?
  • 您能否确认您发布的“基本上我在做什么”的代码实际上重现了问题?塔。
  • @Matt Gibson:我现在可以了,原来我有method: "POST",但现在应该是type: "POST"(如果缺少类型,它默认为GET)。
  • 很奇怪。你能在不同的服务器上确认这一点吗?

标签: asp.net asp.net-mvc firefox jquery


【解决方案1】:

您是否尝试在您的 web.config 中更改此设置?:

 <scripting>
      <webServices>
        <jsonSerialization maxJsonLength="5000"/>
      </webServices>
    </scripting>

Configuring JSON Serialization

【讨论】:

  • 嗨 Rick,不想让你挂,所以只是让你知道我无法回复你的答案,因为我现在没有相关的开发环境设置(和忙于其他事情,无法进行上下文切换)。
猜你喜欢
  • 2010-11-17
  • 1970-01-01
  • 1970-01-01
  • 2011-09-10
  • 1970-01-01
  • 2016-08-21
  • 1970-01-01
  • 2012-04-11
相关资源
最近更新 更多