我正在尝试使用org.restlet.routing.Redirector
创建一个透明的反向代理。
为了简单起见,我只想重定向所有指向的HTTP请求
http://localhost:80
发送到另一个无关的HTTP服务器:
http://localhost:8080
我已经使用Redirector(MODE_SERVER_OUTBOUND模式)编写了一个简单的反向代理,它实际上可以正常工作,因为它可以正确地调度请求,还可以处理重定向。
但现在让我们假设http://localhost:8080
上的资源使用Digest身份验证机制进行保护。
现在的问题是,重定向器处理请求和响应时,请求和响应中的头被删除(从文档WRT MODE_SERVER_OUTBOUND
):
请注意,在这种模式下,存储在请求的属性在调度之前被删除。此外,当HTTP响应返回,标头也被删除。
这使得摘要式认证机制不可用。
我想反向代理应该返回响应,就好像它本身就是原点一样。
是否有任何方法可以保持标头的完整性,以便最终服务器(http://localhost:8080
)和客户端可以在没有代理的情况下进行通信?
感谢Arjohn(请参阅Restlet邮件列表中的相关讨论),找到了解决方案:
我们已经从restlet 2.1.4更新到了2.2.0,令我们惊讶的是已修复重定向程序问题。事实上,Redirector工作得很好开箱即用,包括摘要身份验证。无子类化必需。所以这可能是2.1.4中的一个错误,已经修复2.2开发中的某个地方。