【问题标题】:POST Requests seen as GET by serverPOST 请求被服务器视为 GET
【发布时间】:2013-10-03 15:50:45
【问题描述】:

这里遇到了一个非常奇怪的问题。向我的 PHP 脚本发送 post 请求时

$_SERVER['REQUEST_METHOD'] 

返回“GET”而不是“POST”。

它适用于所有其他 REST 方法

这就是我得到的

GET -> GET
POST-> GET
PUT -> PUT
DELETE -> DELETE

它只发生在我的一台服务器上,所以我假设这是一个 apache 问题,我设法弄清楚它只有在我的 url 添加“www”时才会发生。

即

www.something.com

导致问题,但是

something.com

没有

我在同一台服务器上的不同站点上进行了测试,得到了相同的结果,所以我假设它是全局配置。

任何想法

【问题讨论】:

  • hmm.. 如果表单的操作,子域是什么?它们可能与当前页面不同的子域。我不确定这是否是个问题,但值得一试。
  • 它们不是子域,我尝试过的每个站点都有自己的主域。不过感谢您的建议。
  • 尝试比较 phpinfo() 输出
  • phpinfo() 给出与上面相同的结果。对于 GET 请求,REQUEST_METHOD 仍以 POST 形式返回。
  • “只有当我将“www”添加到我的 url 时才会发生这种情况。” – 您是否进行了重写以将这些请求重定向到非 www 版本?重定向始终使用 GET 进行,因此此时您将丢失 POST 数据。

标签: apache rest httpverbs


【解决方案1】:

正如HTTP spec 所说的响应代码 301 和 302:

注意:由于历史原因,用户代理可以更改请求方法 从 POST 到 GET 用于后续请求。如果这种行为是 不需要,可以使用 307(临时重定向)状态码 而是

第三种(但不太可能)的可能性是您收到了对初始 URI 的 303 响应。解决方案是双重的:

  • 将受您控制的客户端配置为 POST 到规范 URI,这样它们就不会被重定向。
  • 在这种情况下,将您的服务器配置为使用 307 而不是 301/302 进行重定向。

【讨论】:

  • 对,你让我走上了正轨,现在我已经解决了。问题是我没有 www.something.com 作为服务器别名,我只有 something.com。所以它是转发而不是将其识别为合法地址。然后你的转发问题就开始了。谢谢!
猜你喜欢
  • 2021-08-02
  • 2017-03-16
  • 1970-01-01
  • 2016-11-14
  • 2017-10-18
  • 1970-01-01
  • 2018-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多