Charset filter: fixed charset setting on encoded replies.

If response is gzipped we can't recode response, but in case it's not
needed we still can add charset to Content-Type.

The r->ignore_content_encoding is dropped accordingly, charset with gzip_static
now properly works without any special flags.
This commit is contained in:
Maxim Dounin 2014-05-19 22:45:34 +04:00
parent ffba0eeefb
commit 4884cd611e
3 changed files with 19 additions and 18 deletions

View File

@ -272,12 +272,27 @@ ngx_http_charset_header_filter(ngx_http_request_t *r)
return ngx_http_next_header_filter(r);
}
if (source_charset == charset) {
r->headers_out.content_type.len = r->headers_out.content_type_len;
ngx_http_set_charset(r, &dst);
return ngx_http_next_header_filter(r);
}
/* source_charset != charset */
if (r->headers_out.content_encoding
&& r->headers_out.content_encoding->value.len)
{
return ngx_http_next_header_filter(r);
}
mcf = ngx_http_get_module_main_conf(r, ngx_http_charset_filter_module);
charsets = mcf->charsets.elts;
if (source_charset != charset
&& (charsets[source_charset].tables == NULL
|| charsets[source_charset].tables[charset] == NULL))
if (charsets[source_charset].tables == NULL
|| charsets[source_charset].tables[charset] == NULL)
{
goto no_charset_map;
}
@ -286,11 +301,7 @@ ngx_http_charset_header_filter(ngx_http_request_t *r)
ngx_http_set_charset(r, &dst);
if (source_charset != charset) {
return ngx_http_charset_ctx(r, charsets, charset, source_charset);
}
return ngx_http_next_header_filter(r);
return ngx_http_charset_ctx(r, charsets, charset, source_charset);
no_charset_map:
@ -311,13 +322,6 @@ ngx_http_destination_charset(ngx_http_request_t *r, ngx_str_t *name)
ngx_http_charset_loc_conf_t *mlcf;
ngx_http_charset_main_conf_t *mcf;
if (!r->ignore_content_encoding
&& r->headers_out.content_encoding
&& r->headers_out.content_encoding->value.len)
{
return NGX_DECLINED;
}
if (r->headers_out.content_type.len == 0) {
return NGX_DECLINED;
}

View File

@ -246,8 +246,6 @@ ngx_http_gzip_static_handler(ngx_http_request_t *r)
ngx_str_set(&h->value, "gzip");
r->headers_out.content_encoding = h;
r->ignore_content_encoding = 1;
/* we need to allocate all before the header would be sent */
b = ngx_pcalloc(r->pool, sizeof(ngx_buf_t));

View File

@ -511,7 +511,6 @@ struct ngx_http_request_s {
unsigned discard_body:1;
unsigned internal:1;
unsigned error_page:1;
unsigned ignore_content_encoding:1;
unsigned filter_finalize:1;
unsigned post_action:1;
unsigned request_complete:1;