comparison src/http/ngx_http_core_module.c @ 5733:e491b26fa5a1

Entity tags: downgrade strong etags to weak ones as needed. See http://mailman.nginx.org/pipermail/nginx-devel/2013-November/004523.html.
author Maxim Dounin <mdounin@mdounin.ru>
date Thu, 26 Jun 2014 02:21:01 +0400
parents 790ba7484bb6
children c5ec6944de98
comparison
equal deleted inserted replaced
5732:d0ce06cb9be1 5733:e491b26fa5a1
1846 - etag->value.data; 1846 - etag->value.data;
1847 1847
1848 r->headers_out.etag = etag; 1848 r->headers_out.etag = etag;
1849 1849
1850 return NGX_OK; 1850 return NGX_OK;
1851 }
1852
1853
1854 void
1855 ngx_http_weak_etag(ngx_http_request_t *r)
1856 {
1857 size_t len;
1858 u_char *p;
1859 ngx_table_elt_t *etag;
1860
1861 etag = r->headers_out.etag;
1862
1863 if (etag == NULL) {
1864 return;
1865 }
1866
1867 if (etag->value.len > 2
1868 && etag->value.data[0] == 'W'
1869 && etag->value.data[1] == '/')
1870 {
1871 return;
1872 }
1873
1874 if (etag->value.len < 1 || etag->value.data[0] != '"') {
1875 r->headers_out.etag->hash = 0;
1876 r->headers_out.etag = NULL;
1877 return;
1878 }
1879
1880 p = ngx_pnalloc(r->pool, etag->value.len + 2);
1881 if (p == NULL) {
1882 r->headers_out.etag->hash = 0;
1883 r->headers_out.etag = NULL;
1884 return;
1885 }
1886
1887 len = ngx_sprintf(p, "W/%V", &etag->value) - p;
1888
1889 etag->value.data = p;
1890 etag->value.len = len;
1851 } 1891 }
1852 1892
1853 1893
1854 ngx_int_t 1894 ngx_int_t
1855 ngx_http_send_response(ngx_http_request_t *r, ngx_uint_t status, 1895 ngx_http_send_response(ngx_http_request_t *r, ngx_uint_t status,