2010-09-09 28 views
0

mod_deflate envoie toujours gzip données lorsque l'en-tête de la demande Accept-Encoding est gip, deflate.Comment faire pour définir mod_deflate méthode de compression préférée à dégonfler

Comment puis-je dire à mod_deflate de préférer envoyer deflate (PAS zlib) au lieu de gzip?

Si cela n'est pas possible ... pourquoi les développeurs nommeront-ils le module mod_deflate quand il ne peut pas se dégonfler? Aussi, quel est le meilleur moyen, le cas échéant, pour moi de soumettre un rapport de bogue pour que cela soit corrigé dans les prochaines versions?

Répondre

0

Après avoir regardé le source code for mod_deflate je suis arrivé à la conclusion qu'il est impossible d'envoyer autre chose que gzip.

Maintenant, je ne suis pas un programmeur c et je ne pense pas que je serai en mesure de commettre des correctifs moi-même ... mais de la source, je peux voir qu'il y a quelques choses qui doivent être corrigées (Attention, je n'ai jamais écrit de c ... donc tout cela est probablement terriblement faux)

/* 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} 
};