http - যবহ - মজিলা ফায়ারফক্স সমস্যা




কিভাবে ওয়েব ব্রাউজার ক্যাশে, সব ব্রাউজার জুড়ে? (18)

ভূমিকা

সমস্ত উল্লিখিত ক্লায়েন্ট (এবং প্রক্সি) জুড়ে কাজ করে এমন সঠিক শিরোনামগুলির ন্যূনতম সেট:

Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
Expires: 0

Cache-Control ক্লায়েন্ট এবং প্রক্সিগুলির জন্য HTTP 1.1 স্পেক্টের প্রতি (এবং Expires পরে কিছু ক্লায়েন্টের দ্বারা প্রয়োজনীয়)। Pragma ক্লায়েন্টদের জন্য HTTP 1.0 Pragma প্রতি PragmaExpires ক্লায়েন্ট এবং প্রক্সির জন্য HTTP 1.0 এবং 1.1 স্পেক্টের প্রতি। HTTP 1.1 এ, Cache-Control Expires হওয়ার পরে অগ্রাধিকার দেয়, তাই এটি HTTP 1.0 প্রক্সির জন্য শুধুমাত্র পরে।

যদি আপনি no-store সাথে HTTPS এর পৃষ্ঠাগুলি সরবরাহ করার সময় IE6 এবং তার ভাঙা ক্যাশিং সম্পর্কে যত্ন না করেন তবে আপনি Cache-Control: no-cache বাদ দিতে পারেন Cache-Control: no-cache

Cache-Control: no-store, must-revalidate
Pragma: no-cache
Expires: 0

যদি আপনি IE6 বা HTTP 1.0 ক্লায়েন্টগুলির (HTTP 1.1 1997 চালু করা হয়) সম্পর্কে উদ্বিগ্ন না হন তবে আপনি Pragma বাদ দিতে পারেন।

Cache-Control: no-store, must-revalidate
Expires: 0

আপনি যদি HTTP 1.0 প্রক্সিগুলির বিষয়েও উদ্বিগ্ন না হন তবে আপনি Expires করতে পারেন।

Cache-Control: no-store, must-revalidate

অন্যদিকে, যদি সার্ভারটি একটি স্বয়ংক্রিয় Date শিরোনাম স্বতঃপূর্ণ করে তবে আপনি তাত্ত্বিকভাবে Cache-Control বাদ দিতে পারেন এবং শুধুমাত্র Expires

Date: Wed, 24 Aug 2016 18:32:02 GMT
Expires: 0

তবে এটি ব্যর্থ হতে পারে যেমন যদি Enduser অপারেটিং সিস্টেমের তারিখটিকে ম্যানিপুলেট করে এবং ক্লায়েন্ট সফ্টওয়্যার এটির উপর নির্ভর করে।

Cache-Control প্যারামিটার যেমন max-age অপ্রাসঙ্গিক তবে উপরে দেওয়া Cache-Control পরামিতি নির্দিষ্ট করা হয়। এখানে বেশিরভাগ অন্যান্য উত্তরগুলিতে Last-Modified শিরোনামটি কেবলমাত্র আকর্ষণীয় যদি আপনি অনুরোধটি ক্যাশ করতে চান তবে এটি আপনাকে অবশ্যই নির্দিষ্ট করতে হবে না।

এটা কিভাবে সেট করবেন?

পিএইচপি ব্যবহার করে:

header("Cache-Control: no-cache, no-store, must-revalidate"); // HTTP 1.1.
header("Pragma: no-cache"); // HTTP 1.0.
header("Expires: 0"); // Proxies.

জাভা Servlet, বা Node.js ব্যবহার করে:

response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
response.setHeader("Expires", "0"); // Proxies.

ASP.NET-MVC ব্যবহার করে

Response.Cache.SetCacheability(HttpCacheability.NoCache);  // HTTP 1.1.
Response.Cache.AppendCacheExtension("no-store, must-revalidate");
Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.0.
Response.AppendHeader("Expires", "0"); // Proxies.

ASP.NET ওয়েব API ব্যবহার করে:

// `response` is an instance of System.Net.Http.HttpResponseMessage
response.Headers.CacheControl = new CacheControlHeaderValue
{
    NoCache = true,
    NoStore = true,
    MustRevalidate = true
};
response.Headers.Pragma.ParseAdd("no-cache");
// We can't use `response.Content.Headers.Expires` directly
// since it allows only `DateTimeOffset?` values.
response.Content?.Headers.TryAddWithoutValidation("Expires", 0.ToString()); 

ASP.NET ব্যবহার করে:

Response.AppendHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.0.
Response.AppendHeader("Expires", "0"); // Proxies.

এএসপি ব্যবহার করে:

Response.addHeader "Cache-Control", "no-cache, no-store, must-revalidate" ' HTTP 1.1.
Response.addHeader "Pragma", "no-cache" ' HTTP 1.0.
Response.addHeader "Expires", "0" ' Proxies.

Rails, বা পাইথন / ফ্লাস্ক উপর রুবি ব্যবহার করে:

response.headers["Cache-Control"] = "no-cache, no-store, must-revalidate" # HTTP 1.1.
response.headers["Pragma"] = "no-cache" # HTTP 1.0.
response.headers["Expires"] = "0" # Proxies.

পাইথন / Django ব্যবহার করে:

response["Cache-Control"] = "no-cache, no-store, must-revalidate" # HTTP 1.1.
response["Pragma"] = "no-cache" # HTTP 1.0.
response["Expires"] = "0" # Proxies.

পাইথন / পিরামিড ব্যবহার করে:

request.response.headerlist.extend(
    (
        ('Cache-Control', 'no-cache, no-store, must-revalidate'),
        ('Pragma', 'no-cache'),
        ('Expires', '0')
    )
)

যান ব্যবহার করে:

responseWriter.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate") // HTTP 1.1.
responseWriter.Header().Set("Pragma", "no-cache") // HTTP 1.0.
responseWriter.Header().Set("Expires", "0") // Proxies.

Apache .htaccess ফাইল ব্যবহার করে:

<IfModule mod_headers.c>
    Header set Cache-Control "no-cache, no-store, must-revalidate"
    Header set Pragma "no-cache"
    Header set Expires 0
</IfModule>

HTML4 ব্যবহার করে:

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />

এইচটিএমএল মেটা ট্যাগ এইচ HTTP প্রতিক্রিয়া শিরোনাম বনাম

জেনে রাখা গুরুত্বপূর্ণ যে যখন একটি HTTP সংযোগের উপর একটি HTML পৃষ্ঠা সরবরাহ করা হয় এবং HTTP প্রতিক্রিয়া শিরোনাম এবং এইচটিএমএল <meta http-equiv> ট্যাগ উভয়তে একটি শিরোনাম উপস্থিত থাকে, তখন HTTP প্রতিক্রিয়া শীর্ষচরণের মধ্যে নির্দিষ্ট একটি অগ্রাধিকার পাবে এইচটিএমএল মেটা ট্যাগ উপর। HTML মেটা ট্যাগ শুধুমাত্র তখনই ব্যবহার করা হবে যখন পৃষ্ঠাটি স্থানীয় ডিস্ক ফাইল সিস্টেম থেকে একটি file:// URL এর মাধ্যমে দেখা হয়। W3 এইচটিএমএল স্পেক অধ্যায় 5.2.2 দেখুন । যখন আপনি প্রোগ্রাম্যাটিকভাবে তাদের উল্লেখ করবেন না তখন এটার সাথে যত্ন নিন, কারণ ওয়েব সার্ভারটি কিছু ডিফল্ট মান অন্তর্ভুক্ত করতে পারে।

সাধারণত, আপনি এইচটিএমএল মেটা ট্যাগগুলিকে সংশোধনকারীদের দ্বারা বিভ্রান্তি এড়ানোর জন্য নির্দিষ্টভাবে উল্লেখ করবেন না এবং হার্ড HTTP প্রতিক্রিয়া শিরোনামের উপর নির্ভর করবেন। তাছাড়া, বিশেষ করে যারা <meta http-equiv> ট্যাগগুলি HTML5 এ অবৈধHTML5 স্পেসিফিকেশন তালিকাভুক্ত http-equiv মান শুধুমাত্র অনুমোদিত।

প্রকৃত HTTP প্রতিক্রিয়া শিরোনাম যাচাই করা হচ্ছে

এক এবং অন্যটি যাচাই করতে, আপনি ওয়েব ব্রাউজারের বিকাশকারী টুলস এর HTTP ট্রাফিক মনিটর এ তাদের ডিবাগ করতে পারেন। আপনি ক্রোম / ফায়ারফক্স 23 + / IE9 + এ F12 চাপতে এবং তারপরে "নেটওয়ার্ক" বা "নেট" ট্যাব প্যানেলটি খুলতে পারেন এবং তারপরে HTTP অনুরোধ এবং প্রতিক্রিয়া সম্পর্কে সমস্ত তথ্য উন্মোচন করতে আগ্রহের HTTP অনুরোধটি ক্লিক করতে পারেন। নীচের স্ক্রিনশট ক্রোম থেকে:

আমি খুব ফাইল ডাউনলোডের উপর যারা হেডার সেট করতে চান

সর্বোপরি, এই প্রশ্ন এবং উত্তরটি "ওয়েব পৃষ্ঠাগুলি" (HTML পৃষ্ঠাগুলি), "ফাইল ডাউনলোডস" নয় (পিডিএফ, জিপ, এক্সেল, ইত্যাদি) -এ লক্ষ্য করা হয়। আপনি ভালভাবে তাদের ক্যাশে রেখেছেন এবং কোনও ফাইল সংস্করণ সনাক্তকারীকে URI পাথ বা কোয়েরিস্ট্রীনে কোথাও পরিবর্তিত ফাইলে পুনরায় লোড লোড করার জন্য ব্যবহার করতে চান। যাইহোক ফাইল ডাউনলোডে যে নো-ক্যাশ হেডারগুলি প্রয়োগ করা হচ্ছে, তারপরে HTTP এর পরিবর্তে HTTPS এর উপর একটি ফাইল ডাউনলোড করার সময় IE7 / 8 বাগ থেকে সতর্ক থাকুন। বিস্তারিত জানার জন্য, IE foo.jsf ডাউনলোড করা যাবে না। IE এই ইন্টারনেট সাইট খুলতে সক্ষম ছিল না। অনুরোধকৃত সাইটটি অনুপলব্ধ বা পাওয়া যাবে না ।

আমাদের তদন্তগুলি আমাদের দেখিয়েছে যে সকল ব্রাউজারগুলি একইভাবে http ক্যাশের নির্দেশাবলীর সম্মতি দেয় না।

নিরাপত্তার কারণে আমরা আমাদের অ্যাপ্লিকেশনের নির্দিষ্ট পৃষ্ঠাগুলিকে ওয়েব ব্রাউজার দ্বারা কখনও কখনও ক্যাশে করাতে চাই না। এই অন্তত নিম্নলিখিত ব্রাউজার জন্য কাজ করতে হবে:

  • ইন্টারনেট এক্সপ্লোরার 6+
  • ফায়ারফক্স 1.5+
  • সাফারি 3+
  • অপেরা 9+
  • ক্রৌমিয়াম

আমাদের প্রয়োজন একটি নিরাপত্তা পরীক্ষা থেকে এসেছিলেন। আমাদের ওয়েবসাইট থেকে লগ আউট করার পরে আপনি ফিরে বোতাম টিপুন এবং ক্যাশে পৃষ্ঠা দেখতে পারেন।


(হেই, সবাই: অনুগ্রহ করে নিখরচায় কপি ও পেস্ট করুন যা আপনি খুঁজে পেতে পারেন)

সর্বোপরি, ব্যাক বাটন ইতিহাস একটি ক্যাশে নয় :

তাজা মডেল (অনুচ্ছেদ 4.2) অগত্যা ইতিহাস প্রক্রিয়াগুলিতে প্রয়োগ করা হয় না। অর্থাৎ, ইতিহাসের মেয়াদ শেষ হয়ে গেলেও পূর্ববর্তী উপস্থাপনাটি প্রদর্শন করতে পারে।

পুরানো HTTP স্পিক ভাষায় শব্দটি আরও শক্তিশালী ছিল, স্পষ্টত ব্রাউজারকে ব্যাক বাটন ইতিহাসের জন্য ক্যাশে নির্দেশগুলি উপেক্ষা করতে বলে।

ফিরে সময় ফিরে যেতে অনুমিত হয় (ব্যবহারকারী লগ ইন যখন সময়)। এটি পূর্বে খোলা URL এ অগ্রসর হয় না।

যাইহোক, অনুশীলনে, ক্যাশে খুব নির্দিষ্ট পরিস্থিতিতে ব্যাক বোতামটি প্রভাবিত করতে পারে:

  • পৃষ্ঠাটি অবশ্যই HTTPS এর উপর বিতরণ করা উচিত , অন্যথায় এই ক্যাশ-বিস্টিং নির্ভরযোগ্য হবে না। প্লাস, যদি আপনি HTTPS ব্যবহার করেন না তবে আপনার পৃষ্ঠাটি অন্যান্য উপায়ে চুরির লগইন করার জন্য ঝুঁকিপূর্ণ।
  • আপনাকে অবশ্যই Cache-Control: no-store, must-revalidate পাঠাতে হবে Cache-Control: no-store, must-revalidate (কিছু ব্রাউজার no-store এবং কিছু must-revalidate করতে must-revalidate )

আপনি এর কোন প্রয়োজন নেই:

  • <meta> ক্যাশে হেডারগুলির সাথে - এটি কাজ করে না। সম্পূর্ণরূপে নিরর্থক।
  • post-check / pre-check - এটি শুধুমাত্র IE-only নির্দেশ যা কেবলমাত্র অ্যাক্সেসযোগ্য উপাদানের ক্ষেত্রে প্রযোজ্য।
  • একই শিরোনাম দুইবার বা ডজন অংশ পাঠানো। কিছু পিএইচপি স্নিপেট আসলেই পূর্বের শিরোনামগুলি প্রতিস্থাপন করে, যার ফলে শুধুমাত্র শেষটি পাঠানো হয়।

যদি আপনি চান, আপনি যোগ করতে পারেন:

  • no-cache বা max-age=0 , যা সংস্থান (URL) "স্টেল" তৈরি করবে এবং ব্রাউজারের সার্ভারের সাথে যাচাই করার প্রয়োজন হবে যদি কোনও নতুন সংস্করণ থাকে ( no-store ইতিমধ্যে এইটিকে আরও শক্তিশালী করে)।
  • HTTP / 1.0 ক্লায়েন্টগুলির জন্য অতীতের তারিখের Expires হয়ে গেছে (যদিও প্রকৃত HTTP / 1.0-একমাত্র ক্লায়েন্ট এই দিনগুলি সম্পূর্ণভাবে অস্তিত্বহীন)।

বোনাস: নতুন HTTP ক্যাশিং RFC


ASP.NET কোরের জন্য, একটি সহজ মিডলওয়ার ক্লাস তৈরি করুন:

public class NoCacheMiddleware
{
    private readonly RequestDelegate m_next;

    public NoCacheMiddleware( RequestDelegate next )
    {
        m_next = next;
    }

    public async Task Invoke( HttpContext httpContext )
    {
        httpContext.Response.OnStarting( ( state ) =>
        {
            // ref: http://.com/questions/49547/making-sure-a-web-page-is-not-cached-across-all-browsers
            httpContext.Response.Headers.Append( "Cache-Control", "no-cache, no-store, must-revalidate" );
            httpContext.Response.Headers.Append( "Pragma", "no-cache" );
            httpContext.Response.Headers.Append( "Expires", "0" );
            return Task.FromResult( 0 );
        }, null );

        await m_next.Invoke( httpContext );
    }
}

তারপর Startup.cs দিয়ে এটি নিবন্ধন করুন

app.UseMiddleware<NoCacheMiddleware>();

আপনি এই কোথাও পরে যোগ করুন নিশ্চিত করুন

app.UseStaticFiles();

Disclaimer: আমি দৃঢ়ভাবে @ BalusC এর উত্তর পড়া সুপারিশ। নিম্নলিখিত ক্যাচিং টিউটোরিয়ালটি পড়ার পরে: http://www.mnot.net/cache_docs/ (আমি আপনাকে এটি খুব পড়তে সুপারিশ করছি), আমি বিশ্বাস করি এটি সঠিক হতে পারে। যাইহোক, ঐতিহাসিক কারণে (এবং কারণ আমি এটি নিজে পরীক্ষা করেছি), আমি নীচের আমার আসল উত্তর অন্তর্ভুক্ত করব:

আমি PHP এর জন্য 'গ্রহণযোগ্য' উত্তরটি চেষ্টা করেছি, যা আমার জন্য কাজ করে নি। তারপর আমি একটু গবেষণা করেছি, একটি সামান্য রূপ খুঁজে পেয়েছি, এটি পরীক্ষা করেছি, এবং এটি কাজ করেছে। এটা এখানে:

header('Cache-Control: no-store, private, no-cache, must-revalidate');     // HTTP/1.1
header('Cache-Control: pre-check=0, post-check=0, max-age=0, max-stale = 0', false);  // HTTP/1.1
header('Pragma: public');
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');                  // Date in the past  
header('Expires: 0', false); 
header('Last-Modified: '.gmdate('D, d M Y H:i:s') . ' GMT');
header ('Pragma: no-cache');

যে কাজ করা উচিত। সমস্যাটি ছিল যে হেডারের একই অংশটি দুইবার স্থাপন করার সময়, যদি শিরোনাম ফাংশনে দ্বিতীয় আর্গুমেন্ট হিসাবে false পাঠানো না হয়, তবে হেডার ফাংশনটি পূর্ববর্তী header() কলটিকে কেবল ওভাররাইট করবে। সুতরাং, যখন Cache-Control সেট করা হয়, উদাহরণস্বরূপ, যদি কেউ এক header() ফাংশন কলে সমস্ত আর্গুমেন্টগুলি রাখতে না চায় তবে সে অবশ্যই এমন কিছু করতে হবে:

header('Cache-Control: this');
header('Cache-Control: and, this', false);

here আরও সম্পূর্ণ ডকুমেন্টেশন দেখুন।


PorneL বলেছেন, আপনি যা চান তা ক্যাশে নিষ্ক্রিয় করা নয়, তবে ইতিহাস বাফারটি নিষ্ক্রিয় করতে। বিভিন্ন ব্রাউজার ইতিহাস বাফার নিষ্ক্রিয় তাদের নিজস্ব সূক্ষ্ম উপায় আছে।

ক্রোমে (v28.0.1500.95 মি) আমরা কেবল Cache-Control: no-store দ্বারা এটি করতে পারি Cache-Control: no-store

ফায়ারফক্সে (v23.0.1) এর মধ্যে কোনটি কাজ করবে:

  1. Cache-Control: no-store

  2. Cache-Control: no-cache (শুধুমাত্র https)

  3. Pragma: no-cache (শুধুমাত্র https)

  4. Vary: * (শুধুমাত্র https)

অপেরাতে (v12.15) আমরা কেবল Cache-Control: must-revalidate দ্বারা এটি করতে পারি Cache-Control: must-revalidate (শুধুমাত্র https)।

সাফারি (v5.1.7, 7534.57.2) এগুলির মধ্যে কোনটি কাজ করবে:

  1. Cache-Control: no-store
    <body onunload=""> এইচটিএমএল

  2. Cache-Control: no-store (শুধুমাত্র https)

IE8 (v8.06001.18702IC) এগুলির মধ্যে কোনটি কাজ করবে:

  1. Cache-Control: must-revalidate, max-age=0

  2. Cache-Control: no-cache

  3. Cache-Control: no-store

  4. Cache-Control: must-revalidate
    Expires: 0

  5. Cache-Control: must-revalidate
    Expires: Sat, 12 Oct 1991 05:00:00 GMT

  6. Pragma: no-cache (শুধুমাত্র https)

  7. Vary: * (শুধুমাত্র https)

উপরে সম্মিলন আমাদের এই সমাধানটি দেয় যা ক্রোম 28, ফায়ারফক্স 23, IE8, সাফারি 5.1.7 এবং অপেরা 1২.15 এর জন্য কাজ করে: Cache-Control: no-store, must-revalidate (শুধুমাত্র https)

উল্লেখ্য, https প্রয়োজন হয় কারণ অপেরা সাধারণ পৃষ্ঠাগুলির জন্য ইতিহাস বাফারটি নিষ্ক্রিয় করবে না। আপনি যদি সত্যিই https পেতে না পারেন এবং আপনি অপেরাকে উপেক্ষা করতে প্রস্তুত হন তবে আপনি যা করতে পারেন তা হল:

Cache-Control: no-store
<body onunload="">

নীচে আমার পরীক্ষা কাঁচা লগ দেখায়:

HTTP- র:

  1. Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: 0
    Pragma: no-cache
    Vary: *
    <body onunload="">
    ব্যর্থ: অপেরা 12.15
    সাফল্য: ক্রোম 28, ফায়ারফক্স 23, IE8, সাফারি 5.1.7

  2. Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    Pragma: no-cache
    Vary: *
    <body onunload="">
    ব্যর্থ: অপেরা 12.15
    সাফল্য: ক্রোম 28, ফায়ারফক্স 23, IE8, সাফারি 5.1.7

  3. Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: 0
    Pragma: no-cache
    Vary: *
    ব্যর্থতা: সাফারি 5.1.7, অপেরা 12.15
    সাফল্য: ক্রোম 28, ফায়ারফক্স 23, IE8

  4. Cache-Control: private, no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    Pragma: no-cache
    Vary: *
    ব্যর্থতা: সাফারি 5.1.7, অপেরা 12.15
    সাফল্য: ক্রোম 28, ফায়ারফক্স 23, IE8

  5. Cache-Control: private, no-cache, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: 0
    Pragma: no-cache
    Vary: *
    <body onunload="">
    ব্যর্থ: ক্রোম ২8, ফায়ারফক্স ২3, সাফারি 5.1.7, অপেরা 1২.15
    সাফল্য: IE8

  6. Cache-Control: private, no-cache, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    Pragma: no-cache
    Vary: *
    <body onunload="">
    ব্যর্থ: ক্রোম ২8, ফায়ারফক্স ২3, সাফারি 5.1.7, অপেরা 1২.15
    সাফল্য: IE8

  7. Cache-Control: private, no-cache, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: 0
    Pragma: no-cache
    Vary: *
    <body onunload="">
    ব্যর্থ: ক্রোম ২8, ফায়ারফক্স ২3, সাফারি 5.1.7, অপেরা 1২.15
    সাফল্য: IE8

  8. Cache-Control: private, no-cache, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    Pragma: no-cache
    Vary: *
    <body onunload="">
    ব্যর্থ: ক্রোম ২8, ফায়ারফক্স ২3, সাফারি 5.1.7, অপেরা 1২.15
    সাফল্য: IE8

  9. Cache-Control: no-store
    ব্যর্থতা: সাফারি 5.1.7, অপেরা 12.15
    সাফল্য: ক্রোম 28, ফায়ারফক্স 23, IE8

  10. Cache-Control: no-store
    <body onunload="">
    ব্যর্থ: অপেরা 12.15
    সাফল্য: ক্রোম 28, ফায়ারফক্স 23, IE8, সাফারি 5.1.7

  11. Cache-Control: no-cache
    ব্যর্থ: ক্রোম ২8, ফায়ারফক্স ২3, সাফারি 5.1.7, অপেরা 1২.15
    সাফল্য: IE8

  12. Vary: *
    ব্যর্থ: ক্রোম 28, ফায়ারফক্স 23, IE8, সাফারি 5.1.7, অপেরা 12.15
    সাফল্য: কেউ না

  13. Pragma: no-cache
    ব্যর্থ: ক্রোম 28, ফায়ারফক্স 23, IE8, সাফারি 5.1.7, অপেরা 12.15
    সাফল্য: কেউ না

  14. Cache-Control: private, no-cache, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    Pragma: no-cache
    Vary: *
    <body onunload="">
    ব্যর্থ: ক্রোম ২8, ফায়ারফক্স ২3, সাফারি 5.1.7, অপেরা 1২.15
    সাফল্য: IE8

  15. Cache-Control: private, no-cache, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: 0
    Pragma: no-cache
    Vary: *
    <body onunload="">
    ব্যর্থ: ক্রোম ২8, ফায়ারফক্স ২3, সাফারি 5.1.7, অপেরা 1২.15
    সাফল্য: IE8

  16. Cache-Control: must-revalidate, max-age=0
    ব্যর্থ: ক্রোম ২8, ফায়ারফক্স ২3, সাফারি 5.1.7, অপেরা 1২.15
    সাফল্য: IE8

  17. Cache-Control: must-revalidate
    Expires: 0
    ব্যর্থ: ক্রোম ২8, ফায়ারফক্স ২3, সাফারি 5.1.7, অপেরা 1২.15
    সাফল্য: IE8

  18. Cache-Control: must-revalidate
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    ব্যর্থ: ক্রোম ২8, ফায়ারফক্স ২3, সাফারি 5.1.7, অপেরা 1২.15
    সাফল্য: IE8

  19. Cache-Control: private, must-revalidate, proxy-revalidate, s-maxage=0
    Pragma: no-cache
    Vary: *
    <body onunload="">
    ব্যর্থ: ক্রোম 28, ফায়ারফক্স 23, IE8, সাফারি 5.1.7, অপেরা 12.15
    সাফল্য: কেউ না

https:

  1. Cache-Control: private, max-age=0, proxy-revalidate, s-maxage=0
    Expires: 0
    <body onunload="">
    ব্যর্থ: ক্রোম 28, ফায়ারফক্স 23, IE8, সাফারি 5.1.7, অপেরা 12.15
    সাফল্য: কেউ না

  2. Cache-Control: private, max-age=0, proxy-revalidate, s-maxage=0
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    <body onunload="">
    ব্যর্থ: ক্রোম 28, ফায়ারফক্স 23, IE8, সাফারি 5.1.7, অপেরা 12.15
    সাফল্য: কেউ না

  3. Vary: *
    ব্যর্থ: ক্রোম 28, সাফারি 5.1.7, অপেরা 12.15
    সাফল্য: ফায়ারফক্স 23, IE8

  4. Pragma: no-cache
    ব্যর্থ: ক্রোম 28, সাফারি 5.1.7, অপেরা 12.15
    সাফল্য: ফায়ারফক্স 23, IE8

  5. Cache-Control: no-cache
    ব্যর্থ: ক্রোম 28, সাফারি 5.1.7, অপেরা 12.15
    সাফল্য: ফায়ারফক্স 23, IE8

  6. Cache-Control: private, no-cache, max-age=0, proxy-revalidate, s-maxage=0
    ব্যর্থ: ক্রোম 28, সাফারি 5.1.7, অপেরা 12.15
    সাফল্য: ফায়ারফক্স 23, IE8

  7. Cache-Control: private, no-cache, max-age=0, proxy-revalidate, s-maxage=0
    Expires: 0
    Pragma: no-cache
    Vary: *
    ব্যর্থ: ক্রোম 28, সাফারি 5.1.7, অপেরা 12.15
    সাফল্য: ফায়ারফক্স 23, IE8

  8. Cache-Control: private, no-cache, max-age=0, proxy-revalidate, s-maxage=0
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    Pragma: no-cache
    Vary: *
    ব্যর্থ: ক্রোম 28, সাফারি 5.1.7, অপেরা 12.15
    সাফল্য: ফায়ারফক্স 23, IE8

  9. Cache-Control: must-revalidate
    ব্যর্থ: ক্রোম 28, ফায়ারফক্স 23, IE8, সাফারি 5.1.7
    সাফল্য: অপেরা 12.15

  10. Cache-Control: private, must-revalidate, proxy-revalidate, s-maxage=0
    <body onunload="">
    ব্যর্থ: ক্রোম 28, ফায়ারফক্স 23, IE8, সাফারি 5.1.7
    সাফল্য: অপেরা 12.15

  11. Cache-Control: must-revalidate, max-age=0
    ব্যর্থ: ক্রোম 28, ফায়ারফক্স 23, সাফারি 5.1.7
    সাফল্য: IE8, অপেরা 12.15

  12. Cache-Control: private, no-cache, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    Pragma: no-cache
    Vary: *
    <body onunload="">
    ব্যর্থ: ক্রোম 28, সাফারি 5.1.7
    সাফল্য: ফায়ারফক্স 23, IE8, অপেরা 12.15

  13. Cache-Control: private, no-cache, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: 0
    Pragma: no-cache
    Vary: *
    <body onunload="">
    ব্যর্থ: ক্রোম 28, সাফারি 5.1.7
    সাফল্য: ফায়ারফক্স 23, IE8, অপেরা 12.15

  14. Cache-Control: no-store
    ব্যর্থ: অপেরা 12.15
    সাফল্য: ক্রোম 28, ফায়ারফক্স 23, IE8, সাফারি 5.1.7

  15. Cache-Control: private, no-cache, no-store, max-age=0, proxy-revalidate, s-maxage=0
    Expires: 0
    Pragma: no-cache
    Vary: *
    <body onunload="">
    ব্যর্থ: অপেরা 12.15
    সাফল্য: ক্রোম 28, ফায়ারফক্স 23, IE8, সাফারি 5.1.7

  16. Cache-Control: private, no-cache, no-store, max-age=0, proxy-revalidate, s-maxage=0
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    Pragma: no-cache
    Vary: *
    <body onunload="">
    ব্যর্থ: অপেরা 12.15
    সাফল্য: ক্রোম 28, ফায়ারফক্স 23, IE8, সাফারি 5.1.7

  17. Cache-Control: private, no-cache
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    Pragma: no-cache
    Vary: *
    ব্যর্থ: ক্রোম 28, সাফারি 5.1.7, অপেরা 12.15
    সাফল্য: ফায়ারফক্স 23, IE8

  18. Cache-Control: must-revalidate
    Expires: 0
    ব্যর্থ: ক্রোম 28, ফায়ারফক্স 23, সাফারি 5.1.7,
    সাফল্য: IE8, অপেরা 12.15

  19. Cache-Control: must-revalidate
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    ব্যর্থ: ক্রোম 28, ফায়ারফক্স 23, সাফারি 5.1.7,
    সাফল্য: IE8, অপেরা 12.15

  20. Cache-Control: private, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: 0
    <body onunload="">
    ব্যর্থ: ক্রোম 28, ফায়ারফক্স 23, সাফারি 5.1.7,
    সাফল্য: IE8, অপেরা 12.15

  21. Cache-Control: private, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    <body onunload="">
    ব্যর্থ: ক্রোম 28, ফায়ারফক্স 23, সাফারি 5.1.7,
    সাফল্য: IE8, অপেরা 12.15

  22. Cache-Control: private, must-revalidate
    Expires: Sat, 12 Oct 1991 05:00:00 GMT
    Pragma: no-cache
    Vary: *
    ব্যর্থ: ক্রোম 28, সাফারি 5.1.7
    সাফল্য: ফায়ারফক্স 23, IE8, অপেরা 12.15

  23. Cache-Control: no-store, must-revalidate
    ব্যর্থ: কেউ না
    সাফল্য: ক্রোম 28, ফায়ারফক্স 23, IE8, সাফারি 5.1.7, অপেরা 12.15


আমার ক্ষেত্রে আমি এই সঙ্গে ক্রোম সমস্যা সমাধান

<form id="form1" runat="server" autocomplete="off">

যেখানে ব্যবহারকারীরা নিরাপত্তার কারণে ব্যবহারকারীদের বোতামে ফিরে ক্লিক করলে প্রিভিয়াস ফর্মের ডেটা সাফ করতে হবে


আমি দেখেছি যে এই পৃষ্ঠার সব উত্তর এখনও সমস্যা ছিল। বিশেষ করে, আমি লক্ষ্য করেছি যে ব্যাকআপ বোতামটিতে আঘাত করলে এটিতে কেউই IE8 কে পৃষ্ঠাটির ক্যাশে সংস্করণ ব্যবহার করতে বাধা দিবে না।

অনেক গবেষণা ও পরীক্ষার পর, আমি দেখলাম যে আমার কাছে কেবল দুটি শিরোনাম দরকার ছিল:

ক্যাশ-কন্ট্রোল: কোন দোকান
ভ্যারি: *

ভ্যারি হেডারের ব্যাখ্যা করার জন্য, http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html#sec13.6

IE6-8, FF1.5-3.5, ক্রোম 2-3, সাফারি 4 এবং অপেরা 9-10, এই শিরোলেখগুলি পৃষ্ঠাটির লিঙ্কটিতে ক্লিক করার সময় পৃষ্ঠাটি সার্ভার থেকে অনুরোধ করা হতে পারে বা URL টি রাখে সরাসরি ঠিকানা বারে। জানুয়ারী 10 এর মধ্যে যে সমস্ত ব্রাউজারগুলি 99% ব্যবহার করে তা জুড়ে রয়েছে।

IE6, এবং অপেরা 9-10 এ, ব্যাক বোতামটি আঘাত করলেও ক্যাশে সংস্করণটি লোড হতে পারে। আমি পরীক্ষিত অন্যান্য ব্রাউজারে, তারা সার্ভার থেকে একটি নতুন সংস্করণ আনা হয়েছে। এ পর্যন্ত, আমি কোন শিরোনাম খুঁজে পাইনি যা ব্যাক ব্রাউটটি আঘাত করলে সেই ব্রাউজারগুলি পৃষ্ঠাগুলির ক্যাশে সংস্করণগুলি ফেরত দেবে না।

আপডেট: এই উত্তরটি লেখার পরে, আমি বুঝতে পেরেছি যে আমাদের ওয়েব সার্ভারটি একটি HTTP 1.0 সার্ভার হিসাবে নিজেকে সনাক্ত করছে। ব্রাউজারগুলির দ্বারা ক্যাশে করা না হওয়া পর্যন্ত HTTP 1.0 সার্ভারের প্রতিক্রিয়াগুলির জন্য আমি তালিকাবদ্ধ শিরোনামগুলি সঠিক। একটি HTTP 1.1 সার্ভারের জন্য, BalusC এর answer


এই নির্দেশাবলী কোন নিরাপত্তা ঝুঁকি কমানো না। তারা সত্যিই ইউএ এর জোরপূর্বক তথ্য রিফ্রেশ করতে বাধ্য করা, ইউএ রাখা তথ্য বজায় রাখা থেকে না। এই একই প্রশ্ন দেখুন । অন্তত, কোন গ্যারান্টি নেই যে কোনও রাউটার, প্রক্সি ইত্যাদি ক্যাশিং নির্দেশাবলী উপেক্ষা করবে না।

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


প্রগমা সেট করে আমি সব ব্রাউজারে সেরা এবং সবচেয়ে সামঞ্জস্যপূর্ণ ফলাফল পেয়েছি: নো ক্যাশে


প্রতিক্রিয়া মধ্যে pragma হেডার ব্যবহার একটি স্ত্রী গল্প। RFC2616 শুধুমাত্র একটি অনুরোধ শিরোনাম হিসাবে এটি সংজ্ঞায়িত করে

http://www.mnot.net/cache_docs/#PRAGMA


হেডার ফাংশনের জন্য পিএইচপি ডকুমেন্টেশনটি বরং একটি সম্পূর্ণ উদাহরণ (তৃতীয় পক্ষের দ্বারা অবদান):

    header('Pragma: public');
    header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");                  // Date in the past   
    header('Last-Modified: '.gmdate('D, d M Y H:i:s') . ' GMT');
    header('Cache-Control: no-store, no-cache, must-revalidate');     // HTTP/1.1
    header('Cache-Control: pre-check=0, post-check=0, max-age=0', false);    // HTTP/1.1
    header ("Pragma: no-cache");
    header("Expires: 0", false);

এইচটিএমএল 1.1 এর জন্য আরএফসি বলছে সঠিক পদ্ধতি হল HTTP হেডার যোগ করা:

ক্যাশ-কন্ট্রোল: কোন ক্যাশে

যদি তারা HTTP 1.1 সঠিকভাবে সঙ্গতিপূর্ণ না হয় তবে পুরোনো ব্রাউজারগুলি এটিকে উপেক্ষা করতে পারে। তাদের জন্য আপনি শিরোনাম চেষ্টা করতে পারেন:

প্রগমা: কোন ক্যাশে

এই HTTP 1.1 ব্রাউজারের জন্য কাজ অনুমিত হয়।


ক্যাশিংয়ের ক্ষেত্রে একটি কেস স্টাডিতে এই লিঙ্কটি দেখুন:

http://securityevaluators.com/knowledge/case_studies/caching/

নিবন্ধ অনুযায়ী, শুধুমাত্র Cache-Control: no-storeক্রোম, ফায়ারফক্স এবং IE কাজ করে। IE অন্যান্য নিয়ন্ত্রণ গ্রহণ, কিন্তু ক্রোম এবং ফায়ারফক্স না। এই লিঙ্কটি ক্যাশিং ইতিহাস এবং ধারণার প্রমাণীকরণের ইতিহাসের সাথে সম্পূর্ণ ভাল পাঠযোগ্য।


গ্রহণযোগ্য উত্তর আইআইএস 7 + এর জন্য কাজ করে না, যা আই 7 এ পাঠানো হয় না ক্যাশ হেডার সম্পর্কে বড় সংখ্যক প্রশ্ন দ্বারা যাচ্ছি:

  • কিছু ক্যাশ-নিয়ন্ত্রণ করার জন্য প্রতিক্রিয়া জোরদার করা হচ্ছে: IIS7 এ ব্যক্তিগত
  • আইআইএস 7: ক্যাশে সেটিং কাজ করছে না ... কেন?
  • IIS7 + ASP.NET MVC ক্লায়েন্ট ক্যাশিং হেডারগুলি কাজ করছে না
  • Aspx পৃষ্ঠাগুলির জন্য ক্যাশ-নিয়ন্ত্রণ সেট করুন
  • ক্যাশ-কন্ট্রোল: কোন দোকান, অবশ্যই-পুনর্বিবেচনা IIS7 + ASP.NET MVC এ ক্লায়েন্ট ব্রাউজারে পাঠানো হয় না

এবং তাই

গ্রহনযোগ্য উত্তর সঠিক, যা শিরোনাম সেট করা আবশ্যক, কিন্তু কিভাবে সেট করা উচিত তা নয়। আইআইএস 7 এর সাথে এই ভাবে কাজ করে:

Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.AppendCacheExtension("no-store, must-revalidate");
Response.AppendHeader("Pragma", "no-cache");
Response.AppendHeader("Expires", "-1");

প্রথম লাইন সেট করে Cache-controlকরতে no-cache, এবং দ্বিতীয় লাইন অন্যান্য বৈশিষ্ট্যাবলী যোগ করাno-store, must-revalidate


আমি <head><meta>উপাদান সঙ্গে কোন ভাগ্য ছিল । HTTP ক্যাশে সম্পর্কিত পরামিতিগুলি সরাসরি (এইচটিএমএল ডক এর বাইরে) যোগ করা সত্যিই আমার জন্য কাজ করে।

ওয়েবিপি web.headerকলগুলি ব্যবহার করে পাইথনে নমুনা কোড অনুসরণ করে। আমি উদ্দেশ্যমূলকভাবে আমার ব্যক্তিগত অপ্রাসঙ্গিক ইউটিলিটি কোড redacted।

    import web
    import sys
    import PERSONAL-UTILITIES

    myname = "main.py"

    urls = (
        '/', 'main_class'
    )

    main = web.application(urls, globals())

    render = web.template.render("templates/", base="layout", cache=False)

    class main_class(object):
        def GET(self):
            web.header("Cache-control","no-cache, no-store, must-revalidate")
            web.header("Pragma", "no-cache")
            web.header("Expires", "0")
            return render.main_form()

        def POST(self):
            msg = "POSTed:"
            form = web.input(function = None)
            web.header("Cache-control","no-cache, no-store, must-revalidate")
            web.header("Pragma", "no-cache")
            web.header("Expires", "0")
            return render.index_laid_out(greeting = msg + form.function)

    if __name__ == "__main__":
        nargs = len(sys.argv)
        # Ensure that there are enough arguments after python program name
        if nargs != 2:
            LOG-AND-DIE("%s: Command line error, nargs=%s, should be 2", myname, nargs)
        # Make sure that the TCP port number is numeric
        try:
            tcp_port = int(sys.argv[1])
        except Exception as e:
            LOG-AND-DIE ("%s: tcp_port = int(%s) failed (not an integer)", myname, sys.argv[1])
        # All is well!
        JUST-LOG("%s: Running on port %d", myname, tcp_port)
        web.httpserver.runsimple(main.wsgifunc(), ("localhost", tcp_port))
        main.run()


এছাড়াও, ভাল পরিমাপের জন্য, যদি আপনি ক্যাশিং সক্ষম করতে এটি ব্যবহার করেন তবে ExpiresDefaultআপনার .htaccessফাইলটিতে পুনরায় সেটটি নিশ্চিত করুন।

ExpiresDefault "access plus 0 seconds"

তারপরে, আপনি ExpiresByTypeযে ফাইলগুলি ক্যাশ করতে চান তার জন্য নির্দিষ্ট মান নির্ধারণ করতে আপনি ব্যবহার করতে পারেন :

ExpiresByType image/x-icon "access plus 3 month"

আপনার গতিশীল ফাইলগুলি যেমন php, ইত্যাদি ব্রাউজার দ্বারা ক্যাশে করা হচ্ছে তাও কাজে লাগতে পারে এবং কেন আপনি তা বুঝতে পারবেন না। চেক করুন ExpiresDefault


হেডারের পাশাপাশি https মাধ্যমে আপনার পৃষ্ঠা ভজনা বিবেচনা । অনেক ব্রাউজার ডিফল্টরূপে https ক্যাশে হবে না।


//In .net MVC
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
public ActionResult FareListInfo(long id)
{
}

// In .net webform
<%@ OutputCache NoStore="true" Duration="0" VaryByParam="*" %>




http-headers