我正在使用弹簧数据休息。我可以使用httpie从命令行访问资源:
http :8080/myapp/books
,但是如果我尝试访问root uri
http :8080/myapp
我获得了302重定向:
HTTP/1.1 302
Date: Wed, 21 Dec 2016 13:30:57 GMT
Location: http://localhost:8080/myapp/
Transfer-Encoding: chunked
在Firefox中测试此URL将我重定向到http://localhost:8080/myapp/
并正确显示资源列表。如果我添加httpie的尾随斜线:
http :8080/myapp/
我获得资源列表。为什么我必须添加尾斜线才能避免重定向?有人可以向我解释这种行为背后的逻辑吗?
P.S。:我正在使用Spring Boot运行该应用程序,从STS。
我认为答案是 如果添加尾声/
,它将被理解为资源组,但是没有该尾声/
,我们不能说,URL myapp
的最后一部分可能是资源ID,因此它需要先检查使用ID myapp
的资源如果不存在,则将其作为资源束/组,并通过附加/
重定向。/
表示结果将是一个组,但是如果没有斜线,它将认为是具有ID的资源。前任。users/user
使用ID user
获取用户。 users/
获取一组用户。因此,如果没有找到任何资源,它将首先检查ID,然后附加/
并重定向。
有关更多信息,请参阅链接https://softwareengineering.stackexchange.com/questions/186959/trailing-slash-ing-in-restful-api-api