【问题标题】:Workaround for too long querystring in IE6, IE7?IE6、IE7 中查询字符串过长的解决方法?
【发布时间】:2013-06-19 22:51:47
【问题描述】:

我有一个可以在 FF、Opera、Safari、Chrome 和 IE8 中正常提交的表单... 但它不会在 IE6 或 IE7 中提交...

我注意到 99% 确定问题是查询字符串过长。 我有很多选择...

现在,在这里将方法更改为 POST 是不可能的,所以请不要问这个问题...

我想知道,这个问题还有其他解决方法吗? 还有,为什么只有IE6和IE7有这个问题?

如果没有解决方法,“禁用”超出限制的“太多”输入是否有助于缩短查询字符串?换句话说,禁用的表单元素是否也会添加到查询字符串中?

谢谢

【问题讨论】:

  • 为什么不能使用 POST?
  • 您的查询需要多长时间? stackoverflow.com/questions/812925/…
  • 为什么不能使用POST?因为你提到的错误here?也许我们应该看看那些; GET 从未设计用于发送大量数据; GET 请求应该是idempotent

标签: javascript html forms browser internet-explorer-6


【解决方案1】:

为了回答你的第二个问题,微软在这里得到了答案: http://support.microsoft.com/kb/208427 最大 URL 为 2,083 个字符,因此 GET 请求产生的页面必须有一个比这更短的 URL。

回答你的第三个问题, w3.org/TR/html401/interact/forms.html#h-17.12: “禁用的控件不能成功”,即它们不会提交。

要回答您的第一个问题,也许您可​​以对某些字段设置字符限制,例如 textarea。另一种选择可能是使用 javascript 压缩输入,以某种方式对其进行哈希处理,然后在提交的页面上在服务器端取消哈希处理。

【讨论】:

  • 没有完全了解禁用输入的部分......所以通过禁用它们,我可以缩短查询字符串吗?
  • 通过“他们不会提交”和“不能成功”,是的,他们不会成为查询字符串的一部分。
  • 是的,但是“它可以成功”解决我的问题,这是令人困惑的部分......所以我将制作一个 js 代码,用于在输入表单时禁用所有其他输入,除了那些需要...谢谢
  • @Camran:但这能解决实际问题吗?我想你毕竟需要数据。如果没有发送,您将无法对其进行任何操作,并且输入字段将无用。
  • @Marcel:没错,这就是我将禁用所有无用输入的原因。只是为了澄清一点,输入是很多“选择选项”。并且基于类别,js 显示包含选项的 div。但是,所有其他 div 都是不可见的,但它们对各个类别的选项不可见。通过禁用它们,我将显着缩短查询字符串。这在除 IE 之外的任何浏览器中都不是问题,所以我从来没有想过。谢谢
【解决方案2】:

如果您确定这是问题所在,而不是其他数百万个跨浏览器问题,您可以尝试 ajax 调用。将查询拆分为 2、3、n 个调用。

它只是一种形式吗?请问为什么POST是不可能的?

【讨论】:

    【解决方案3】:

    它不是很好,但您可以将值放入 cookie 中

    【讨论】:

    • Cookies 也有每个浏览器的长度限制,这将是不同形式的相同问题。
    【解决方案4】:

    首先回答您的最后一个问题 禁用的表单输入是 NOT GETted 或 POSTed 回服务器

    如果发布不是一个选项,您可以尝试消除不必要的表单输入,虽然很俗气,但减少元素名称的长度也会缩短查询字符串。

    【讨论】:

      【解决方案5】:

      您也可以尝试在 JavaScript 中对查询字符串值进行一些客户端压缩。

      我在使用 base 93 加密来显着减少字符串大小方面取得了一些成功。

      您也可以尝试哈夫曼压缩,虽然它更重处理器。

      http://rumkin.com/tools/compression/compress_huff.php

      如果您只期望有限的字符集(小写 a-z),您可以想出一些其他技巧。

      【讨论】:

      • 在所有情况下,您都必须依赖 JavaScript;尽管有很好的解决方法,但它们只是对一个无论如何都不应该存在的问题的丑陋破解。
      • 是的,最好使用post,或者如果你的表单很长,可以将它拆分为多个子表单。但是,我遇到过一些使用 JS 压缩非常有用的情况。特别是在通过 JSONP 跨域 API 发送数据时。如果您要发送的字符数是已知的,那么选择合适的编码基数可以显着缩短您发送的字符串,并且 JS 开销相当低。仍然比标准的表单提交更适合 JS 繁重的网络应用程序。
      【解决方案6】:

      通过简单的 IIS 设置更改可以避免查询字符串过长错误。 http://www.mytecbits.com/microsoft/iis/query-string-too-long

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-15
        相关资源
        最近更新 更多