Php 为什么web服务中的尾部斜杠如此重要?

Php 为什么web服务中的尾部斜杠如此重要?,php,python,wsdl,soappy,Php,Python,Wsdl,Soappy,我正在用PHP和Python测试一个web服务。比如说,web服务的地址是http://my.domain.com/my/webservice。当我使用该URL在PHP中测试web服务时,一切正常。但是,当我使用相同的位置,但在Python中使用SOAPpy时,我得到了一个错误 下面是我用来与web服务(Python)通信的代码: 我从服务器得到的响应: HTTPError: <HTTPError 301 Moved Permanently> 为什么缺少尾随斜杠会导致错误?因为实际

我正在用PHP和Python测试一个web服务。比如说,web服务的地址是
http://my.domain.com/my/webservice
。当我使用该URL在PHP中测试web服务时,一切正常。但是,当我使用相同的位置,但在Python中使用SOAPpy时,我得到了一个错误

下面是我用来与web服务(Python)通信的代码:

我从服务器得到的响应:

HTTPError: <HTTPError 301 Moved Permanently>

为什么缺少尾随斜杠会导致错误?

因为实际的服务器URL是:


默认情况下,PHP库必须遵循重定向。

它们是不同的URL<代码>http://my.domain.com/my/webservice表示在
my
文件夹中有一个文件
webservice
<代码>http://my.domain.com/my/webservice/表示my/webservice文件夹中的默认文档


许多Web服务器会自动更正此类URL,但并不要求他们这样做。

[免责声明:这是我答案的副本。我知道有些人不喜欢这种复制,但这解释了斜杠为什么很重要。]

想象一下你服务了一页

http://mydomain.com/bla
包含

<a href="more.html">Read more...</a>

(使用相同的内容),浏览器将检索
http://mydomain.com/bla/more.html
。为了避免这种歧义,如果URL指向目录,重定向会附加一个斜杠。

错误是301重定向,这意味着web服务器正在将您重定向到URL,斜杠在末尾

PHP似乎会自动遵循这个重定向,因此不会抛出错误,而Python不会。您需要执行以下操作:

  • 尝试连接到初始URL
  • 捕获任何301重定向,也可能捕获302重定向
  • 如果存在重定向,则尝试连接到该URL
  • 新URL应在响应标题中可用


    HTH.

    如果需要斜杠,则SOAP-URL的外观取决于服务器和SOAP实现

    在您的例子中,我假设目标服务器是apache服务器,SOAP URL实际上是包含SOAP处理脚本的目录。 当您在服务器上进行访问时,apache确定该目录的地址正确为,并发送301重定向

    SOAP使用http POST,由客户机决定是否应该遵循重定向,我假设它并不期望这样

    SOAP的其他实现,例如Java中的Apache Axis,其URL看起来像servlet,例如没有斜杠,在这种情况下,没有斜杠的URL是正确的,无论如何都不存在目录

    我认为Axis在重定向方面也失败了

    http://mydomain.com/bla
    
    <a href="more.html">Read more...</a>
    
    http://mydomain.com/bla/