Por que o Apache não gzip arquivos css ou js que possuem parâmetros?
8
Alguns arquivos CSS e JS não são compactados pelo apache com o mod_deflate ativado. Esses arquivos são parecidos com "" [domain.name] /aggregator.css? ... "ou" [domain.name] /misc/jquery.js? ... "no YSlow. Os outros CSS e JS sem o "?" fica comprimido. Por favor, explique-me como faço para o apache comprimir esses arquivos também.
[root@dev ~]# cat /etc/httpd/conf.d/test.conf
<FilesMatch "\.txt$">
SetOutputFilter DEFLATE
Header set X-Ping "Pong"
</FilesMatch>
[root@dev ~]# GET -SedH 'Accept-Encoding: gzip, deflate' 'http://localhost/test.txt'
GET http://localhost/test.txt --> 200 OK
Content-Encoding: gzip
Content-Length: 2449
X-Ping: Pong
[root@dev ~]# GET -SedH 'Accept-Encoding: gzip, deflate' 'http://localhost/test.txt?foo'
GET http://localhost/test.txt?foo --> 200 OK
Content-Encoding: gzip
Content-Length: 2449
X-Ping: Pong
(cabeçalhos não relacionados removidos)
Como mencionado acima, FilesMatchcorresponde aos caminhos do sistema de arquivos , não aos URIs. Os recursos que não estão sendo arquivos compactados no sistema de arquivos ou são gerados dinamicamente, ou com proxy ou redirecionados ou algo mais que interrompe o mapeamento direto de URI para sistema de arquivos? Você pode tentar usar o LocationMatch , o que provavelmente é uma aposta melhor de qualquer maneira, se alguma parte do seu aplicativo não for arquivos estáticos.
Obrigado Mark pela resposta. Sua solução parece estar funcionando.
É necessário ativar algo para que o LocationMatch funcione? Eu tentei usar esta solução e que provoca um erro interno, mas FileMatch funciona ...
Paul Sheldrake
Não, ambos fazem parte do núcleo do servidor. Abra outra pergunta com seu snippet de configuração e a mensagem de erro e daremos uma olhada.
markdrayton
11
+1 para o cabeçalho definido X-Ping "Pong"
Eddie B
este cache responde ou irá compactar em cada solicitação subsequente o mesmo arquivo js / css?
Amit Patel
0
O $ no final de sua expressão regular corresponderá ao final do URL; portanto, se houver algo após a extensão do arquivo, ele não corresponderá. Você pode omitir o $, mas ele corresponderia se houvesse um ".css" etc. em qualquer lugar do URL. Algo como o exemplo abaixo pode ser mais seguro. Isso deve corresponder a ".css" no final da URL ou ".css" seguido por?, Alguns parâmetros e, em seguida, ao final da URL.
Eu não acho isso correto. FilesMatch corresponde a um nome de arquivo do sistema de arquivos, não a um URI. LocationMatch corresponde a URIs (mas mesmo que apenas olhe para o URI, não para a string de consulta).
O $ no final de sua expressão regular corresponderá ao final do URL; portanto, se houver algo após a extensão do arquivo, ele não corresponderá. Você pode omitir o $, mas ele corresponderia se houvesse um ".css" etc. em qualquer lugar do URL. Algo como o exemplo abaixo pode ser mais seguro. Isso deve corresponder a ".css" no final da URL ou ".css" seguido por?, Alguns parâmetros e, em seguida, ao final da URL.
fonte