为什么网络服务中的末尾斜杠如此重要?

8 投票
5 回答
3227 浏览
提问于 2025-04-15 13:12

我在用PHP和Python测试一个网络服务。这个网络服务的地址是,比如说,http://my.domain.com/my/webservice。当我用PHP测试这个地址的时候,一切都很正常。但是,当我用Python和SOAPpy去访问同样的地址时,却出现了错误。

下面是我用来和这个网络服务沟通的Python代码:

from SOAPpy import WSDL
server = SOAPProxy('http://my.domain.com/my/webservice', namespace)
server.myFunction()

我从服务器收到的回应是:

HTTPError: <HTTPError 301 Moved Permanently>

我发现,如果在网络服务的地址后面加一个斜杠,它就能正常工作了!

from SOAPpy import WSDL
server = SOAPProxy('http://my.domain.com/my/webservice/', namespace)
server.myFunction()

那么,为什么没有这个斜杠会导致错误呢?

5 个回答

3

因为实际的服务器网址是:http://my.domain.com/my/webservice/

这个PHP库默认是会自动跟随网址的重定向的。

3

这个错误是301重定向,意思是你的请求被网站服务器转到一个后面有斜杠的URL上。

看起来PHP会自动跟随这个重定向,所以不会报错,而Python则不会。你需要做以下几步:

  1. 先尝试连接最初的URL
  2. 捕捉任何301重定向,可能还有302重定向
  3. 如果有重定向,就尝试连接那个新的URL。

新的URL应该可以在响应的头信息中找到。

希望这对你有帮助。

20

这两个网址是不一样的。http://my.domain.com/my/webservice 这个网址表示在 my 文件夹里有一个叫 webservice 的文件。而 http://my.domain.com/my/webservice/ 这个网址则表示在 my/webservice 文件夹里有一个默认的文档。

很多网络服务器会自动把这种网址纠正过来,但这并不是它们必须要做的事情。

撰写回答