mirror of
https://github.com/nginx/nginx.git
synced 2024-12-19 05:33:52 -06:00
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:
parent
ffba0eeefb
commit
4884cd611e
@ -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;
|
||||
}
|
||||
|
@ -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));
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user