在Nginx中用来生成etags的algorithm是什么? 他们现在看起来像“554b73dc-6f0d”。
它们是仅从时间戳生成的吗?
从源代码: http : //lxr.nginx.org/ident?_i=ngx_http_set_etag
1803 ngx_int_t 1804 ngx_http_set_etag(ngx_http_request_t *r) 1805 { 1806 ngx_table_elt_t *etag; 1807 ngx_http_core_loc_conf_t *clcf; 1808 1809 clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module); 1810 1811 if (!clcf->etag) { 1812 return NGX_OK; 1813 } 1814 1815 etag = ngx_list_push(&r->headers_out.headers); 1816 if (etag == NULL) { 1817 return NGX_ERROR; 1818 } 1819 1820 etag->hash = 1; 1821 ngx_str_set(&etag->key, "ETag"); 1822 1823 etag->value.data = ngx_pnalloc(r->pool, NGX_OFF_T_LEN + NGX_TIME_T_LEN + 3); 1824 if (etag->value.data == NULL) { 1825 etag->hash = 0; 1826 return NGX_ERROR; 1827 } 1828 1829 etag->value.len = ngx_sprintf(etag->value.data, "\"%xT-%xO\"", 1830 r->headers_out.last_modified_time, 1831 r->headers_out.content_length_n) 1832 - etag->value.data; 1833 1834 r->headers_out.etag = etag; 1835 1836 return NGX_OK; 1837 }
你可以在第1830和1831行看到input是最后修改的时间和内容的长度。
干杯,卡梅隆