2017-12-14 28 views
2

Zuul (포트 : 8080) 뒤에있는 백엔드 (포트 : 9090)라는 서비스가 있습니다.Zuul은 302 대신 HTTP 상태 200을 반환합니다.

브라우저가 Zuul에서 GET 메서드를 호출하면 리디렉션됩니다.

는 는

샘플 호출이 : http://localhost:8080/testredirect

는 결과 :

예상 검색 결과 :

  • 브라우저의 결과로, HTTP 상태 = (302) 및 변경 URL을 받아야한다 :
  • 브라우저 URL : http://localhost:8080/hello
  • 브라우저를 보여줍니다 : 그것은 Zuul 200을 반환하는 것 같다 "안녕하세요 세계"

, 숨어 리디렉션은 프록시 서버 이후입니다.

URL이 서버 측의 GET 메서드에 정의되어있을 때 어떻게 브라우저에서 302 리디렉션을 수행 할 수 있습니까?

server: 
    port: 8080 
zuul: 
    routes: 
    core: 
     sensitive-headers: 
     path: /core/** 
     url: http://localhost:9090/ 

참고 : ->이 Edgware.RELEASE

+0

zuul은 결과를 프록시 처리하기 만하면 상태가 변경되지 않습니다. 오류가 발생하지 않았습니까? – spencergibb

+0

예외가 표시되지 않았습니다. 올바른 컨텐츠를 얻었지만 브라우저의 URL이 올바르지 않습니다. 브라우저에 302가 표시되지 않고 200으로 표시됩니다. –

+0

올바른 컨텐츠를 얻고 있다는 것을 이해하지 못합니까? 문제를 재현하는 샘플 프로젝트를 제공 할 수 있습니까? – spencergibb

답변

0

하는 기능이 변경되었습니다 스프링 클라우드 여기

@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의 구성입니다 : 여기

는 백엔드 서비스 봄 부팅 릴리스 Edgeware.RELEASE.

Edgeware.RELEASE 있음 : 200 및 페이지 내용을 반환합니다.

Dalston.SR4 :에서 302를 반환하고 브라우저가 리디렉션됩니다.

0

Spring 컨텍스트에서 bean을 정의 할 수 있습니다.

@Bean 
public ApacheHttpClientFactory apacheHttpClientFactory() { 
    return new ApacheHttpClientFactory() { 
     @Override 
     public HttpClientBuilder createBuilder() { 
      return HttpClientBuilder.create() 
        .disableContentCompression() 
        .disableCookieManagement() 
        .useSystemProperties() 
        .disableRedirectHandling(); 
     } 
    } 
}