Ho un file in bundle javascript che è abbastanza grande, ~ 1 MB. Sto cercando di attivare la compressione di risposta con le seguenti proprietà di applicazione nel mio file yml:La compressione della risposta di avvio di primavera non funziona
server.compression.enabled: true
server.compression.mime-types: application/json,application/xml,text/html,text/xml,text/plain,application/javascript,text/css
Ma non funziona. Non sta avvenendo alcuna compressione
intestazioni di richiesta:
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36
Accept: */*
Accept-Encoding: gzip, deflate, sdch, br
intestazioni di risposta
Cache-Control:no-cache, no-store, max-age=0, must-revalidate
Connection:keep-alive
Content-Length:842821
Content-Type:application/javascript;charset=UTF-8
Non c'è nessuna intestazione codifica del contenuto nella risposta.
sto usando la primavera di avvio versione 1.3.5.RELEASE
Che cosa mi manca?
=== MODIFICA 4 === Avevo intenzione di creare un'app stand alone per indagare ulteriormente perché le proprietà di compressione del contenuto non funzionavano. Ma all'improvviso tutto ha iniziato a funzionare e non ho cambiato nulla per quanto riguarda la configurazione, non il cambio di file POM, non il cambio di file application.yml. Quindi non so che cosa è cambiato che ha reso lavorare ...
=== === EDIT 3 suggerimenti Segui @ di chimmi ulteriormente. Ho inserito punti di interruzione nei luoghi suggeriti. Sembra che le richieste di risorse statiche (file js) non siano mai state interrotte in quei punti di interruzione. Fanno solo le richieste API di riposo. E per quelle richieste, la lunghezza del contenuto era zero per qualche motivo che causa la compressione del contenuto da saltare.
=== === EDIT 2 ho messo un punto di interruzione alla linea 180 di osbawServerProperties grazie a @ di chimmi suggerimento e si vede che tutte le proprietà sono impostate ma in qualche modo la Server non rispetta l'impostazione ... :(
=== === EDIT 1
non è sicuro se è importante, ma sto incollando la mia applicazione codice principale e la configurazione qui:
Application.java:
@SpringBootApplication
public class TuangouApplication extends SpringBootServletInitializer {
public static void main(String[] args) throws Exception {
SpringApplication.run(TuangouApplication.class, args);
}
// this is for WAR file deployment
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(TuangouApplication.class);
}
@Bean
public javax.validation.Validator localValidatorFactoryBean() {
return new LocalValidatorFactoryBean();
}
}
Configurazione:
@Configuration
public class TuangouConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
// @formatter:off
http.antMatcher("/**").authorizeRequests().antMatchers("/", "/login**").permitAll()
.and().antMatcher("/**").authorizeRequests().antMatchers("/api/**").permitAll()
.and().exceptionHandling().authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/"))
.and().formLogin().loginPage("/login").failureUrl("/login?error").permitAll()
.and().logout().logoutSuccessUrl("/").permitAll()
.and().csrf().csrfTokenRepository(csrfTokenRepository())
.and().addFilterAfter(csrfHeaderFilter(), CsrfFilter.class)
.headers().defaultsDisabled().cacheControl();
// @formatter:on
}
@Order(Ordered.HIGHEST_PRECEDENCE)
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled=true)
protected static class AuthenticationSecurity extends GlobalAuthenticationConfigurerAdapter {
@Override
public void init(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService()).passwordEncoder(new BCryptPasswordEncoder());
}
@Bean
public UserDetailsService userDetailsService() {
return new DatabaseUserServiceDetails();
}
}
private Filter csrfHeaderFilter() {
return new OncePerRequestFilter() {
@Override
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
CsrfToken csrf = (CsrfToken) request
.getAttribute(CsrfToken.class.getName());
if (csrf != null) {
Cookie cookie = WebUtils.getCookie(request, "XSRF-TOKEN");
String token = csrf.getToken();
if (cookie == null
|| token != null && !token.equals(cookie.getValue())) {
cookie = new Cookie("XSRF-TOKEN", token);
cookie.setPath("/");
response.addCookie(cookie);
}
}
filterChain.doFilter(request, response);
}
};
}
private CsrfTokenRepository csrfTokenRepository() {
HttpSessionCsrfTokenRepository repository = new HttpSessionCsrfTokenRepository();
repository.setHeaderName("X-XSRF-TOKEN");
return repository;
}
}
config server Resource:
@Configuration
@EnableResourceServer
public class ResourceServerConfiguration extends ResourceServerConfigurerAdapter{
@Autowired
private TokenStore tokenStore;
@Override
public void configure(ResourceServerSecurityConfigurer resources)
throws Exception {
resources.tokenStore(tokenStore);
}
@Override
public void configure(HttpSecurity http) throws Exception {
// @formatter:off
http.antMatcher("/**").authorizeRequests().antMatchers("/api/**").permitAll();
// @formatter:on
}
}
Sono state prese questo SO -http: //stackoverflow.com/questions/21410317/using-gzip -compression-with-spring-boot-mvc-javaconfig-with-restful – aksappy
@aksappy sì, l'ho fatto. Ho basato la mia soluzione sulla risposta n. 2 da quel collegamento. –
Le intestazioni delle richieste hanno 'keep-alive', che indicano HTTP 1.0, ma la soluzione di riferimento usa' AbstractHttp11Protocol'. Forse hai bisogno di inviare richieste HTTP 1.1? – heenenee