我正在使用Spring Data Rest。我可以使用httpie从命令行访问资源:
http :8080/myapp/books
但如果我尝试访问根URI
http :8080/myapp
我获得了302 redirection:
HTTP/1.1 302
Date: Wed, 21 Dec 2016 13:30:57 GMT
Location: http://localhost:8080/myapp/
Transfer-Encoding: chunked
在Firefox中测试此网址会将我重定向到http://localhost:8080/myapp/
并正确显示资源列表。如果我用httpie:
http :8080/myapp/
我获取了资源列表。为什么我必须添加尾部斜杠以避免重定向?有人能解释一下这种行为背后的逻辑吗?
P.S。:我正在Spring Boot使用STS运行应用程序。
答案 0 :(得分:0)
我认为答案是
如果您添加一个尾随/
,它将被理解为一个资源组但没有这个尾随/
我们不能这么说,网址myapp
的最后一部分可能是资源ID,因此,如果资源不存在,则首先需要检查标识为myapp
的资源,然后将其作为资源包/组进行重新定向,并通过附加/
进行重定向。 /
表示结果将是一个组,但如果没有斜杠,它将被视为具有id的资源。
防爆。 users/user
提取ID为user
的用户。
users/
获取用户集。因此,如果它没有找到任何资源,它将首先检查id,然后附加/
并重定向。
有关详细信息,请参阅链接https://softwareengineering.stackexchange.com/questions/186959/trailing-slash-in-restful-api