Php 为什么web服务中的尾部斜杠如此重要?
我正在用PHP和Python测试一个web服务。比如说,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> 为什么缺少尾随斜杠会导致错误?因为实际
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不会。您需要执行以下操作:
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/