আমি কীভাবে এনজিএনএজে সর্বশেষ-সংশোধিত শিরোনামটি পরিবর্তন করব?


8

আমার সার্ভারটি নিম্নলিখিত শিরোনামগুলি প্রদান করে:

Cache-Control:no-cache
Connection:keep-alive
Date:Thu, 07 Jul 2011 10:41:57 GMT
Expires:Thu, 01 Jan 1970 00:00:01 GMT
Last-Modified:Thu, 07 Jul 2011 08:06:32 GMT
Server:nginx/0.8.46`

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

উত্তর:


10

"আমি যে সামগ্রীটি পরিবেশন করছি তা ক্যাশে না করা চাই": আপনি নির্দেশের মাধ্যমে If-Modified-Sinceঅনুরোধ শিরোনাম চেকিং বন্ধ করতে পারেন if_modified_since off;if_modified_since ডক

এবং Last-Modifiedশিরোলেখ সম্পর্কে : আপনি এটি দিয়ে বন্ধ করতে পারেনadd_header Last-Modified "";


1
আপনি অ্যাড_হেডার দিয়ে শিরোনাম বন্ধ করতে পারবেন না , আপনি কেবল সেগুলি যুক্ত করতে পারেন। এন্ট্রি থেকে: নোট করুন যে এটি আউটপুট শিরোনাম তালিকায় একটি নতুন শিরোনাম এন্ট্রি যুক্ত করে। সুতরাং আপনি সার্ভারের মতো বিদ্যমান শিরোনামগুলি পুনরায় লেখার জন্য এই নির্দেশিকাটি ব্যবহার করতে পারবেন না। এটির জন্য শিরোলেখ_মডিউলটি ব্যবহার করুন ।
কলবিজ্যাক

আমি এটি আমার nginx.conf curl -Dযোগ add_header Last-MOdified "";করার পরে এবং পরে যাচাই করেছি , Last-Modifiedশিরোনাম আর ডাম্প ফাইলে নেই।
ক্যাজুয়াল কোডার

1
বাহ, উত্সটির দিকে তাকিয়ে, ক্যাশে-নিয়ন্ত্রণ এবং শেষ-সংশোধিত বিশেষ কেসযুক্ত এবং অতিরিক্ত এন্ট্রি যুক্ত হওয়ার পরিবর্তে সেট করা হবে। দেখে মনে হচ্ছে উইকি আপডেট করা দরকার।
কলবিজ্যাক

1
আমি আবার ভুল করেছিলাম, ক্যাশে-নিয়ন্ত্রণ বিশেষ কেসযুক্ত, তবে এটি ওভাররাইট করে না, এটি কেবল একটি বিশেষ উপায়ে যুক্ত করতে হবে। কেবল সর্বশেষ-পরিবর্তিত একটি নতুন যুক্ত করার পরিবর্তে শিরোনাম সেট করে।
কলবিজ্যাক

জেনে রাখা ভাল, আপনি কি আমাকে একটি ফাইলের দিকে নির্দেশ করতে পারেন? এটা কি আছে src/http/ngx_http_header_filter_module.c?
ক্যাজুয়াল কোডার

6

আপনি এটিকে দেখতে কোনও ফাইলের মতো সর্বদা সংশোধন করতে চাইবেন:

add_header Last-Modified $date_gmt;
if_modified_since off;
etag off;

শেষ লাইন হিসাবে, যদি আপনি সত্যিই সত্যিকারের শেষ-সংশোধিত তারিখটি আড়াল করতে চান তবে আপনাকে অবশ্যই শিরোনামটি আড়াল করতে হবে ETagকারণ এটি টাইমস্ট্যাম্পগুলি ফাঁস করে


0

আমি সত্যিই পুরো দিনটি ব্যয় করেছি এবং Nginx যথাযথভাবে খেলতে পারার কাছাকাছি এসেছি না বিশেষ করে Nginx যেভাবে ভুলভাবে সর্বশেষ-পরিবর্তিত: তারিখ শিরোনামকে শেষ-সংশোধিত শিরোলেখের জন্য আরএফসি-র অন্তর্ভুক্ত নয় with

আমি এই সমাধানটি খুঁজে পেয়েছি যা আপনি যদি পিএইচপি ব্যবহার করেন তবে ঠিকঠাক কাজ করে এবং আপনার প্রয়োজন মতো টুইট করা যেতে পারে। আশা করি এটা সাহায্য করবে. আপনার বাকী কোডের আগে আপনার। Php পৃষ্ঠাগুলির একেবারে শীর্ষে এটি অন্তর্ভুক্ত করুন।

<?php
//get the last-modified-date of this very file
$lastModified=filemtime(__FILE__);
//get a unique hash of this file (etag)
$etagFile = md5_file(__FILE__);
//get the HTTP_IF_MODIFIED_SINCE header if set
$ifModifiedSince=(isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? $_SERVER['HTTP_IF_MODIFIED_SINCE'] : false);
//get the HTTP_IF_NONE_MATCH header if set (etag: unique file hash)
$etagHeader=(isset($_SERVER['HTTP_IF_NONE_MATCH']) ? trim($_SERVER['HTTP_IF_NONE_MATCH']) : false);

//set last-modified header
header("Last-Modified: ".gmdate("D, d M Y H:i:s", $lastModified)." GMT");
//set etag-header
//header("Etag: $etagFile");
header("ETag: \"$etagFile\"");
//make sure caching is turned on
header('Cache-Control: private, must-revalidate, proxy-revalidate, max-age=3600');

//check if page has changed. If not, send 304 and exit
if (@strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE'])==$lastModified || $etagHeader == $etagFile)
{
       header("HTTP/1.1 304 Not Modified");
       header("Vary: Accept-Encoding");
       exit;
}
?>

তারপরে redbot.org এবং www.hscriptts.com এ আপনার সাইটটি পরীক্ষা করুন

হালনাগাদ:

  1. 304 পরিবর্তিত প্রতিক্রিয়া সহ পরিবর্তিত শিরোনাম প্রেরণ করা হয়েছে (প্রয়োজনীয়)
  2. পরিবর্তিত ক্যাশে: কন্ট্রোল শিরোনাম সর্বাধিক বয়স আপনার নিজের প্রয়োজন অনুসারে টুইট করা যেতে পারে।
  3. যেখানে dueণ আছে তা দেওয়ার জন্য, আমি সমাধানটি এখানে পেয়েছি এবং এটি সামান্য টুইট করেছি - https://css-tricks.com/snippets/php/inte Fightnt-php-cache-control/
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.