2014-09-03 60 views
0

我有一个码头基于Java的应用程序,做了相对服务器端重定向:相关服务器端重定向是否尊重协议?

例如重定向到相对URL:

了/page2.html

这是一个从供应超过https重定向页面,但重定向最终被服务的http响应

https://someDomain.com/page1.html

重定向到

http://someDomain.com/page2.html

我应该能够使用相对网址吗?我们有一个代理服务器正在做一些重写 - 这是负责任的,还是这只是在服务器端重定向不支持?

回答

1

是的,HTTP允许重定向到一个相对URL,并且它应该使用与执行重定向的URL相同的协议,每个RFC 3986 Section 5。如果Jetty或代理服务器正在做一些不符合既定标准的事情。

+0

原来是Jetty将相对网址重写为绝对网址 - 并且由于它不知道它是否安全地提供服务(负载平衡器是安全加载的,而不是节点),因此url被重写为绝对URL - >用http://方案。更多信息[这里](http://osdir.com/ml/java.jetty.general/2002-06/msg00188.html)和[在src中,它变成绝对的uri](https:/ /github.com/eclipse/jetty.project/blob/1a0eb64a1fabccd6d4b2990e1a6864db6ac2019b/jetty-server/src/main/java/org/eclipse/jetty/server/handler/MovedContextHandler.java#L113) – 2014-09-08 16:58:56

+0

请注意,[单元测试](https ://github.com/eclipse/jetty.project/blob/063ad177b510b238aa51396030870e7d9aef0b8e/tests/test-integration/src/test/java/org/eclipse/jetty/test/rfcs/RFC2616BaseTest.java#L1087),这意味着测试一个当请求是一个相对重定向时绝对URI(我认为;-) – 2014-09-08 17:02:24

+0

和来自RFC - [这里是一个超级好的PSUEDOCODE](http://tools.ietf.org/html/rfc3986#section-5.2.2)建议的算法来管理解析相对URI指向什么,并且它看起来像Jetty正在做的那样 - 解析为绝对URI。 [这里是RFC中的一个超级好的例子](http://tools.ietf.org/html/rfc3986#section-5.4)显示了样本相关的url以及它们应该如何解决。 – 2014-09-08 17:39:05