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?

War es hilfreich?

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}
};
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top