【问题标题】:Long URL hangs up PHP page长 URL 挂起 PHP 页面
【发布时间】:2014-12-11 09:59:29
【问题描述】:

我将我的 PHP 网站托管在一个共享的网络托管帐户上,所以我不确定是什么原因造成的,因为我没有直接访问服务器的权限。

有问题的页面非常简单。它的 PHP 脚本通过 GET 请求接收数据并用它填写页面上的表单(在用户填写其余部分之前作为默认设置。)

例如,它可以接受这样的 URL:

http://www.example.com/test.php?id=sendform&name=somename&ver=1.0&desc=some%20description

然后 PHP 脚本读取传递给它的参数(通过 stripslashes($_REQUEST['desc']); 之类的函数)并创建 HTML 标记,其中的表单字段填充了传递给它的数据。

所以这工作正常,直到我注意到如果我传递一个长 URL(我不知道确切的限制,但例如我的测试 URL 是 1,280 个字符长)我的test.php 中的脚本不会执行并且页面挂了很长时间,直到浏览器出现错误超时。

我首先认为应该归咎于 stripslashes($_REQUEST['desc']); 调用,因此我删除了所有内容,只留下了一行:

print("Got to the end");

它仍然被一个长 URL 挂断。

所以我很好奇,为什么会这样?以及如何防止这种“挂机”?

【问题讨论】:

  • GET有关。如果您要发送大量文本,则需要通过POST 发送。
  • @Darren:嗯,首先我远远低于这个限制(大约 2K)。其次,我不能使用 POST。此请求从 Chrome 扩展程序中的 JavaScript 进入新的浏览器窗口。
  • 对于那些感兴趣的人,这里是如何使用 JavaScript 使用 POST 请求打开一个新的浏览器页面:stackoverflow.com/a/17793207/843732

标签: php url get


【解决方案1】:

理想情况下,您不应使用长 URL,因为建议的限制是不超过 256 个字符(包括主机)。根据您提供的信息很难弄清楚,但可能是因为

  1. 浏览器(检查请求捕获工具并查看请求是否真的被发送或被浏览器本身阻止。
  2. 服务器(服务器可能对配置中的url长度有限制,您可以查看访问日志或错误日志以获取详细信息)
  3. 防火墙设置(服务器上的防火墙可能会阻止如此长的 URL)

建议避免使用较长的 URL,并尽可能使用 POST 方法发送数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-01
    • 1970-01-01
    • 2016-01-19
    • 1970-01-01
    • 2011-05-16
    相关资源
    最近更新 更多