mirror of
https://github.com/nginx/nginx.git
synced 2025-01-03 12:47:21 -06:00
*) charset_types
*) change of default charset types *) addition_types
This commit is contained in:
parent
390abe0772
commit
d1b615815a
@ -10,13 +10,16 @@
|
||||
|
||||
|
||||
typedef struct {
|
||||
ngx_str_t before_body;
|
||||
ngx_str_t after_body;
|
||||
ngx_str_t before_body;
|
||||
ngx_str_t after_body;
|
||||
|
||||
ngx_hash_t types;
|
||||
ngx_array_t *types_keys;
|
||||
} ngx_http_addition_conf_t;
|
||||
|
||||
|
||||
typedef struct {
|
||||
ngx_uint_t before_body_sent;
|
||||
ngx_uint_t before_body_sent;
|
||||
} ngx_http_addition_ctx_t;
|
||||
|
||||
|
||||
@ -42,6 +45,13 @@ static ngx_command_t ngx_http_addition_commands[] = {
|
||||
offsetof(ngx_http_addition_conf_t, after_body),
|
||||
NULL },
|
||||
|
||||
{ ngx_string("addtion_types"),
|
||||
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_1MORE,
|
||||
ngx_http_types_slot,
|
||||
NGX_HTTP_LOC_CONF_OFFSET,
|
||||
offsetof(ngx_http_addition_conf_t, types_keys),
|
||||
&ngx_http_html_default_types[0] },
|
||||
|
||||
ngx_null_command
|
||||
};
|
||||
|
||||
@ -87,10 +97,7 @@ ngx_http_addition_header_filter(ngx_http_request_t *r)
|
||||
ngx_http_addition_ctx_t *ctx;
|
||||
ngx_http_addition_conf_t *conf;
|
||||
|
||||
if (r->headers_out.status != NGX_HTTP_OK
|
||||
|| r != r->main
|
||||
|| r->headers_out.content_type.data == NULL)
|
||||
{
|
||||
if (r->headers_out.status != NGX_HTTP_OK || r != r->main) {
|
||||
return ngx_http_next_header_filter(r);
|
||||
}
|
||||
|
||||
@ -100,10 +107,7 @@ ngx_http_addition_header_filter(ngx_http_request_t *r)
|
||||
return ngx_http_next_header_filter(r);
|
||||
}
|
||||
|
||||
if (ngx_strncasecmp(r->headers_out.content_type.data,
|
||||
(u_char *) "text/html", sizeof("text/html") - 1)
|
||||
!= 0)
|
||||
{
|
||||
if (ngx_http_test_content_type(r, &conf->types) == NULL) {
|
||||
return ngx_http_next_header_filter(r);
|
||||
}
|
||||
|
||||
@ -214,10 +218,10 @@ ngx_http_addition_create_conf(ngx_conf_t *cf)
|
||||
/*
|
||||
* set by ngx_pcalloc():
|
||||
*
|
||||
* conf->before_body.len = 0;
|
||||
* conf->before_body.date = NULL;
|
||||
* conf->after_body.len = 0;
|
||||
* conf->after_body.date = NULL;
|
||||
* conf->before_body = { 0, NULL };
|
||||
* conf->after_body = { 0, NULL };
|
||||
* conf->types = { NULL };
|
||||
* conf->types_keys = NULL;
|
||||
*/
|
||||
|
||||
return conf;
|
||||
@ -233,5 +237,13 @@ ngx_http_addition_merge_conf(ngx_conf_t *cf, void *parent, void *child)
|
||||
ngx_conf_merge_str_value(conf->before_body, prev->before_body, "");
|
||||
ngx_conf_merge_str_value(conf->after_body, prev->after_body, "");
|
||||
|
||||
if (ngx_http_merge_types(cf, conf->types_keys, &conf->types,
|
||||
prev->types_keys, &prev->types,
|
||||
ngx_http_html_default_types)
|
||||
!= NGX_OK)
|
||||
{
|
||||
return NGX_CONF_ERROR;
|
||||
}
|
||||
|
||||
return NGX_CONF_OK;
|
||||
}
|
||||
|
@ -52,6 +52,9 @@ typedef struct {
|
||||
ngx_int_t charset;
|
||||
ngx_int_t source_charset;
|
||||
ngx_flag_t override_charset;
|
||||
|
||||
ngx_hash_t types;
|
||||
ngx_array_t *types_keys;
|
||||
} ngx_http_charset_loc_conf_t;
|
||||
|
||||
|
||||
@ -110,6 +113,18 @@ static char *ngx_http_charset_merge_loc_conf(ngx_conf_t *cf,
|
||||
static ngx_int_t ngx_http_charset_postconfiguration(ngx_conf_t *cf);
|
||||
|
||||
|
||||
ngx_str_t ngx_http_charset_default_types[] = {
|
||||
ngx_string("text/html"),
|
||||
ngx_string("text/css"),
|
||||
ngx_string("text/xml"),
|
||||
ngx_string("text/plain"),
|
||||
ngx_string("text/vnd.wap.wml"),
|
||||
ngx_string("application/x-javascript"),
|
||||
ngx_string("application/rss+xml"),
|
||||
ngx_null_string
|
||||
};
|
||||
|
||||
|
||||
static ngx_command_t ngx_http_charset_filter_commands[] = {
|
||||
|
||||
{ ngx_string("charset"),
|
||||
@ -136,6 +151,13 @@ static ngx_command_t ngx_http_charset_filter_commands[] = {
|
||||
offsetof(ngx_http_charset_loc_conf_t, override_charset),
|
||||
NULL },
|
||||
|
||||
{ ngx_string("charset_types"),
|
||||
NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_1MORE,
|
||||
ngx_http_types_slot,
|
||||
NGX_HTTP_LOC_CONF_OFFSET,
|
||||
offsetof(ngx_http_charset_loc_conf_t, types_keys),
|
||||
&ngx_http_charset_default_types[0] },
|
||||
|
||||
{ ngx_string("charset_map"),
|
||||
NGX_HTTP_MAIN_CONF|NGX_CONF_BLOCK|NGX_CONF_TAKE2,
|
||||
ngx_http_charset_map_block,
|
||||
@ -185,7 +207,6 @@ static ngx_http_output_body_filter_pt ngx_http_next_body_filter;
|
||||
static ngx_int_t
|
||||
ngx_http_charset_header_filter(ngx_http_request_t *r)
|
||||
{
|
||||
u_char *ct;
|
||||
ngx_int_t charset, source_charset;
|
||||
ngx_str_t *mc, *from, *to, s;
|
||||
ngx_uint_t n;
|
||||
@ -243,13 +264,7 @@ ngx_http_charset_header_filter(ngx_http_request_t *r)
|
||||
}
|
||||
|
||||
} else {
|
||||
ct = r->headers_out.content_type.data;
|
||||
|
||||
if (ngx_strncasecmp(ct, (u_char *) "text/", 5) != 0
|
||||
&& ngx_strncasecmp(ct,
|
||||
(u_char *) "application/x-javascript", 24)
|
||||
!= 0)
|
||||
{
|
||||
if (ngx_http_test_content_type(r, &mlcf->types) == NULL) {
|
||||
return ngx_http_next_header_filter(r);
|
||||
}
|
||||
}
|
||||
@ -1444,6 +1459,13 @@ ngx_http_charset_create_loc_conf(ngx_conf_t *cf)
|
||||
return NGX_CONF_ERROR;
|
||||
}
|
||||
|
||||
/*
|
||||
* set by ngx_pcalloc():
|
||||
*
|
||||
* lcf->types = { NULL };
|
||||
* lcf->types_keys = NULL;
|
||||
*/
|
||||
|
||||
lcf->charset = NGX_CONF_UNSET;
|
||||
lcf->source_charset = NGX_CONF_UNSET;
|
||||
lcf->override_charset = NGX_CONF_UNSET;
|
||||
@ -1501,6 +1523,14 @@ ngx_http_charset_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
|
||||
recode->src = conf->source_charset;
|
||||
recode->dst = conf->charset;
|
||||
|
||||
if (ngx_http_merge_types(cf, conf->types_keys, &conf->types,
|
||||
prev->types_keys, &prev->types,
|
||||
ngx_http_charset_default_types)
|
||||
!= NGX_OK)
|
||||
{
|
||||
return NGX_CONF_ERROR;
|
||||
}
|
||||
|
||||
return NGX_CONF_OK;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user