目标URL未接收到POST数据。

4

我遇到了这样一个场景:希望将http://www.omsite.com中的表单数据发布到另一个网站,比如说http://www.hissite.com/myfolder

然而,每当我尝试发布数据时,它并没有成功,返回的是状态码301,表示永久重定向,因此数据无法被发布。

检查目标URL后,我将目标URL从http://www.hissite.com/myfolder更改为http://www.hissite.com/myfolder/,只是在/myfolder后面添加了一个斜杠,这样我就得到了成功的响应。

请帮我理解一下为什么仅仅在目标URL末尾添加一个斜杠就能够成功发布我的数据?

备注:目标网页是源网页的子域名。


不应该。对于网站的根目录,带斜杠和不带斜杠的URL是完全相同的。 - Quentin
你可能在某个地方错过了一些要点,添加斜杠并没有什么作用。 - Abhay Maurya
让我为这个场景添加更多细节...在问题中添加了一个注意事项。 - OM The Eternity
@Leaner 我已经检查了它的每一个位,那是我所做的唯一更改... - OM The Eternity
更新了目标URL,场景完全相同。 - OM The Eternity
3个回答

5
我需要帮助理解,为什么在目标URL末尾添加正斜杠就能成功发布我的数据? 这是因为目标站点上的“myfolder”是一个真实的目录。出于安全原因,Apache中有一个名为“mod_dir”的模块负责此行为。 当一个请求来到一个没有斜杆结尾的真实目录时,“mod_dir”会使用301状态码重定向到相同的URI加上斜杆。 一旦发生301重定向,POST数据就会丢失。 当您使用“http://www.hissite.com/myfolder/”发布数据时,“mod_dir”不会参与,因为您的URI已经有了斜杠,因此没有重定向和POST数据的丢失。 可以使用以下方法更改此行为:
DirectorySlash Off

但是它被认为是一个潜在的安全风险,因为它可能会显示目录内容。


1
靶心!!!这就是自上周以来让我疯狂的原因...感谢你推动我更多地了解mod_dir..干杯,Anubhava - OM The Eternity

2
由于搜索引擎会在相同页面的不同 URL 版本中检测到重复内容问题,因此许多网站管理员会使任何目录页面都带有尾随斜杠。现在,任何没有尾随斜杠的目录都将重定向到带有斜杠的版本,你可能会发现 index.html、index.php 等也会重定向到带有斜杠的版本。然而,这意味着服务器上有一个策略(例如使用 .htaccess 规则)强制进行 301 重定向,并阻止了 POST 请求的工作。这里有一些答案展示了收件人如何管理它。

这实际上是在某些情况下出现问题的细节,有不同的处理方式,但我仍然无法弄清楚为什么在Origin表单的操作URL中添加尾部斜杠会帮助我成功提交数据并避免301重定向!!! - OM The Eternity

1
当我在打字的时候,@anubhava已经提交了他的答案,他的解释是正确的。 我可以添加更多细节:这取决于您的服务器设置,特别是DirectorySlash。大约两年前,我在尝试向我创建的API端点进行POST时遇到了学习曲线。如果您在文件夹名称末尾不加斜杠,则服务器可能会认为您所引用的文件夹实际上是一个文件(无论它是否存在都无关紧要)。这就是为什么它不会尝试访问其中的任何“index”文件,以及为什么请求似乎不起作用的原因。DirectorySlash设置告诉Apache在URL末尾添加斜杠(如果它不是文件(没有扩展名)),通过这样做,它将尝试在其中查找“index”文件。可以使用另一个称为DirectoryIndex的设置来指定要搜索的“index”文件类型。在发出斜杠的重定向错误时,POST数据可能会丢失-最常见的情况是在.htaccess中使用mod_rewrite并且您没有告诉它正确重定向的情况下。简而言之,如果未告知服务器自动将斜杠添加到URL末尾,则最常见的情况是将其视为没有扩展名的文件。
这是一个指向Apache设置和额外信息的链接: https://httpd.apache.org/docs/2.4/mod/mod_dir.html

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接