كيفية تعيين طريقة الضغط المفضلة mod_deflate
-
02-10-2019 - |
سؤال
mod_deflate يرسل دائما gzip
البيانات عندما يكون رأس الطلب Accept-Encoding
هو gip, deflate
.
كيف يمكنني إخبار mod_deflate بأنه يفضل إرساله deflate
(ليس zlib
) بدلاً من gzip
?
إذا لم يكن ذلك ممكنًا ... فلماذا تسمي Develpers الوحدة النمطية mod_deflate عندما لا يمكن أن تفرط. أيضًا ، ما هي أفضل طريقة ، إن وجدت ، بالنسبة لي لتقديم تقرير الأخطاء لإصلاح هذا في الإصدارات المستقبلية؟
المحلول
بعد النظر في رمز المصدر لـ mod_deflate لقد توصلت إلى استنتاج مفاده أنه من المستحيل إرسال أي شيء آخر غير GZIP.
الآن ، أنا لست c
البرامج وأنا لا أعتقد أنني سأكون قادرًا على ارتكاب أي بقع بنفسي ... لكن من المصدر ، يمكنني أن أرى أن هناك بعض الأشياء التي تحتاج إلى إصلاح (تحذير ، لم أكتب أبدًا أي C .. . لذلك كل هذا خطأ على الأرجح)
/* 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}
};
لا تنتمي إلى StackOverflow