Wie mod_deflate bevorzugte Komprimierungsmethode abzulassen einzustellen
-
02-10-2019 - |
Frage
mod_deflate sendet immer gzip
Daten, wenn der Request-Header Accept-Encoding
gip, deflate
ist.
Wie kann ich mod_deflate sagen bevorzugen deflate
(NICHT zlib
) statt gzip
zu schicken?
Wenn dies nicht möglich ist ... warum sollten die Entwickler startet nennen das Modul mod_deflate wenn es nicht kann deflate. Auch, was ist der beste Weg, wenn überhaupt, für mich einen Fehlerbericht zu unterbreiten hat dies in Zukunft Versionen behoben?
Lösung
Nach einem Blick auf die Quellcode für mod_deflate ich bin zu dem Schluss gekommen, dass es unmöglich ist, etwas zu schicken, um andere als gzip.
Nun, ich bin kein c
Programmierer und ich glaube nicht, ich in der Lage sein werde mir alle Patches zu begehen ... aber von der Quelle kann ich sehen, dass es gibt ein paar Dinge, die Notwendigkeit festgelegt werden ( Warnung habe ich nie c geschrieben ... so das alles wahrscheinlich schrecklich falsch ist)
/* add this method */
static const char *deflate_set_preferred_method(cmd_parms *cmd, void *dummy,
const char *arg1)
{
deflate_filter_config *c = ap_get_module_config(cmd->server->module_config,
&deflate_module);
if (arg2 != NULL && (!strcasecmp(arg1, "deflate") || !strcasecmp(arg1, "gzip") || !strcasecmp(arg1, "zlib") ) ) {
c->preferred_method = apr_pstrdup(cmd->pool, arg1);
}
else {
return apr_psprintf(cmd->pool, "Unknown preferred method type %s", arg1);
}
return NULL;
}
/* update some code to define "preferred_method" */
/*
Update all code that references the string "gzip" to take
into account "deflate", and "zlib" as well.
This is the part I really have no clue how to do.
lines: 539, 604, 607, 616, and 624 should be updates
line 624 could read something like this: */
if( !strcasecmp(preferred_method,"gzip") ){
/* add immortal gzip header */
e = apr_bucket_immortal_create(gzip_header, sizeof gzip_header,
f->c->bucket_alloc);
APR_BRIGADE_INSERT_TAIL(ctx->bb, e);
}
else if( !strcasecmp(preferred_method, "zlib") ){
/* do something to add the zlib headers here */
}
/* update this method */
static const command_rec deflate_filter_cmds[] = {
AP_INIT_TAKE12("DeflateFilterNote", deflate_set_note, NULL, RSRC_CONF,
"Set a note to report on compression ratio"),
AP_INIT_TAKE1("DeflateWindowSize", deflate_set_window_size, NULL,
RSRC_CONF, "Set the Deflate window size (1-15)"),
AP_INIT_TAKE1("DeflateBufferSize", deflate_set_buffer_size, NULL, RSRC_CONF,
"Set the Deflate Buffer Size"),
AP_INIT_TAKE1("DeflateMemLevel", deflate_set_memlevel, NULL, RSRC_CONF,
"Set the Deflate Memory Level (1-9)"),
AP_INIT_TAKE1("DeflateCompressionLevel", deflate_set_compressionlevel, NULL, RSRC_CONF,
"Set the Deflate Compression Level (1-9)"),
AP_INIT_TAKE1("DeflatePreferredMethod", deflate_set_preferred_method, NULL, RSRC_CONF,
"Set the Preferred Compression Method: deflate, gzip, or zlib (not-recommended)"),
{NULL}
};