এনগিনেক্স ইটাগ জেনারেশনের পিছনে অ্যালগরিদম


17

এনগিনেক্সে ইটাগগুলি তৈরি করতে ব্যবহৃত অ্যালগরিদম কী? তারা এখন "554b73dc-6f0d" এর মতো দেখতে লাগে।

এগুলি কি কেবল টাইমস্ট্যাম্প থেকে উত্পন্ন?


1
আমি বিশ্বাস করি না যে এগুলিতে একটি ইনোড রয়েছে (ডিফল্টরূপে অ্যাপাচি-এর বিপরীতে) ... যদিও অনেক আগেই আমি কোথায় পেলাম তা খুঁজে পেতে আমার বেশ কষ্ট হচ্ছে (ক্যাশে ক্লাস্টারের চেয়ে ভাল)। আপনি কি কোনও কার্যকর ঘড়ি (যেমন এম্বেড করা) ছাড়াই কোনও পরিবেশে কাজ করছেন?
ক্যামেরন কের

1
বিকাশকারীদের মধ্যে কিছু সম্পর্কিত তথ্য রয়েছে। yahoo.com/performance/rules.html#etags (তবে এনগিনেক্স সম্পর্কিত নয়)
ক্যামেরন কের

উত্তর:


32

উত্স কোড থেকে: 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 লাইনে দেখতে পারেন যে ইনপুটটি সর্বশেষ পরিবর্তিত সময় এবং সামগ্রীর দৈর্ঘ্য।


অ্যাপাচি ইটাগগুলির সাথে তুলনা করুন , যা পরিবর্তনের সময় এবং আকার থেকেও গণনা করা হয়, তবে ফাইলের ইনোডের উপর নির্ভর করতে এটিও কনফিগার করা যেতে পারে।
রায়েডওয়াল্ড

1

পিএইচপিতে কে এর প্রয়োজন হবে।

$pathToFile = '/path/to/file.png';

$lastModified = filemtime($pathToFile);
$length = filesize($pathToFile);

header('ETag: "' . sprintf('%x-%x', $lastModified, $length) . '"');

3
এটি কীভাবে গৃহীত উত্তরের চেয়ে ভাল?
রালফ্রেডল

1
@ রালফফ্রিড এই উত্তরটি পিএইচপি প্রোগ্রামারদের জন্য আরও ভাল হবে, কারণ ভবিষ্যতে আমার মতো পিএইচপি প্রোগ্রামার 3 টি কীওয়ার্ড "এনগিনেক্স", "এট্যাগ", "আলগ" সন্ধান করবে এবং সে আমার উত্তরটি খুঁজে পাবে। এটি সম্ভবত প্রশ্নের সদৃশতা সৃষ্টি রোধ করবে।
ম্যাক্সপায়্ন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.