Spring cloud Zuul返回HTTP状态200而不是302
我有一个名为Backend(端口:9090)的服务,位于Zuul(端口:8080)后面 浏览器在Zuul上调用GET方法,该方法执行重定向 示例调用: 结果:Spring cloud Zuul返回HTTP状态200而不是302,spring-cloud,netflix-zuul,Spring Cloud,Netflix Zuul,我有一个名为Backend(端口:9090)的服务,位于Zuul(端口:8080)后面 浏览器在Zuul上调用GET方法,该方法执行重定向 示例调用: 结果: 浏览器接收Http状态=200 浏览器URL: 浏览器显示:“你好,世界” 预期结果: 浏览器应接收Http status=302并更改URL,从而导致: 浏览器URL: 浏览器显示:“你好,世界” Zuul似乎返回了200,隐藏了重定向,因为它是一个代理服务器 当URL在服务器端的GET方法中定义时,如何在浏览器中实现302重定
- 浏览器接收Http状态=200
- 浏览器URL:
- 浏览器显示:“你好,世界”
- 浏览器应接收Http status=302并更改URL,从而导致:
- 浏览器URL:
- 浏览器显示:“你好,世界”
@SpringBootApplication
public class BackendApplication {
@RestController
@RequestMapping
public class Backend {
@GetMapping(value = "/hello")
public String sayHello() {
return "Hello world";
}
@GetMapping(value = "/testredirect")
public RedirectView sayRandom() {
return new RedirectView("/hello");
}
public static void main(String[] args) {
SpringApplication.run(BackendApplication.class, args);
}
}
}
以下是Zuul的配置:
server:
port: 8080
zuul:
routes:
core:
sensitive-headers:
path: /core/**
url: http://localhost:9090/
注意:spring cloud->Edgware.RELEASE在spring boot RELEASE Edgware.RELEASE中功能已更改 在Edgeware.RELEASE中:返回200和页面内容
在Dalston.SR4中:返回302,浏览器重定向。您可以在Spring上下文中定义bean
@Bean
public ApacheHttpClientFactory apacheHttpClientFactory() {
return new ApacheHttpClientFactory() {
@Override
public HttpClientBuilder createBuilder() {
return HttpClientBuilder.create()
.disableContentCompression()
.disableCookieManagement()
.useSystemProperties()
.disableRedirectHandling();
}
}
}
zuul只是代理结果,不会改变状态。你确定没有发生错误或其他事情吗?我没有看到异常。我得到了正确的内容,但浏览器中的URL不正确。浏览器没有看到302,而是得到200。我不明白,你得到了正确的内容?你能提供一个重现问题的示例项目吗?你的服务并没有像你期望的那样工作。我们有一个确切的场景,如果服务返回302,那么它就会像您期望的那样通过zuul传回。我尝试改进解释并添加一些非常简单的示例代码。