http সমস কিভাবে ওয়েব ব্রাউজার ক্যাশে, সব ব্রাউজার জুড়ে?




মজিলা ফায়ারফক্স সমস্যা (21)

আমি শুধু ইঙ্গিত দিতে চাই যে কেউ কেবলমাত্র গতিশীল সামগ্রী ক্যাশিং প্রতিরোধ করতে চায় তবে অতিরিক্ত শিরোনাম প্রোগ্রাম্যাটিকভাবে তৈরি করা উচিত।

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

এই বেশ সুস্পষ্ট, এখনও উল্লেখযোগ্য মূল্য।

এবং অন্য সতর্কতা। HttpResponse ক্লাস থেকে ClearHeaders পদ্ধতি ব্যবহার করে সতর্ক থাকুন। যদি আপনি এটি অযৌক্তিকভাবে ব্যবহার করেন তবে এটি আপনাকে কিছু বিরক্তি দিতে পারে। এটা আমাকে দিয়েছে মত।

অ্যাকশনফিল্টার এ্যাট্রিবিউট ইভেন্টে পুনঃনির্দেশ করার পরে সকল শিরোলেখ সাফ করার ফলাফল টেম্পডাটা স্টোরেজে সমস্ত সেশন ডেটা এবং ডেটা হারিয়েছে। কোনও অ্যাকশন থেকে পুনঃনির্দেশ করা নিরাপদ এবং পুনঃনির্দেশকরণের সময় হেডারগুলি পরিষ্কার করবেন না।

দ্বিতীয় চিন্তায় আমি ক্লিয়ারহাইডার পদ্ধতি ব্যবহার করতে নিরুৎসাহিত। এটা আলাদাভাবে হেডার অপসারণ করা ভাল। এবং সঠিকভাবে ক্যাশ-কন্ট্রোল হেডার সেট করতে আমি এই কোডটি ব্যবহার করছি:

filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
filterContext.HttpContext.Response.Cache.AppendCacheExtension("no-store, must-revalidate");

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

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

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

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


বেলুসিস দ্বারা প্রদত্ত উত্তরগুলির শিরোনামগুলি ব্রাউজারের ব্যাক বোতামটি ব্যবহার করার সময় ব্রাউজার ক্যাশে সামগ্রী প্রদর্শনের থেকে সাফারি 5 (এবং সম্ভবত পুরানো সংস্করণগুলি) পাশাপাশি বাধা দেয় না। এটি রোধ করার একটি উপায় হল শরীরের ট্যাগে একটি খালি অনুলलोड ইভেন্ট হ্যান্ডলার বৈশিষ্ট্য যোগ করা:

<body onunload=""> 

এই হ্যাক দৃশ্যত সাফারি মধ্যে পিছনে এগিয়ে ক্যাশ বিরতি: ব্যাক বাটন ক্লিক করার সময় একটি ক্রস ব্রাউজার অনলোড ইভেন্ট আছে?


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

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

তাজা মডেল (অনুচ্ছেদ 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


IE6 একটি বাগ আছে

"ক্যাশ-কন্ট্রোল: নো-ক্যাশ" ব্যবহার করলেও "সামগ্রী-এনকোডিং: জিজিপ" সহ সামগ্রী সর্বদা ক্যাশে থাকে।

http://support.microsoft.com/kb/321722

আপনি IE6 ব্যবহারকারীদের জন্য জিজিপ কম্প্রেশনটি অক্ষম করতে পারেন ("MSIE 6" এর জন্য ব্যবহারকারী এজেন্টটি পরীক্ষা করুন)


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

    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);

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


BalusC সম্পূর্ণ করতে -> answer যদি আপনি পার্ল ব্যবহার করেন তবে আপনি HTTP হেডার যুক্ত করতে CGI ব্যবহার করতে পারেন।

পার্ল ব্যবহার করে:

Use CGI;    
sub set_new_query() {
        binmode STDOUT, ":utf8";
        die if defined $query;
        $query = CGI->new();
        print $query->header(
                        -expires       => 'Sat, 26 Jul 1997 05:00:00 GMT',
                        -Pragma        => 'no-cache',
                        -Cache_Control => join(', ', qw(
                                            private
                                            no-cache
                                            no-store
                                            must-revalidate
                                            max-age=0
                                            pre-check=0
                                            post-check=0 
                                           ))
        );
    }

Apache httpd.conf ব্যবহার করে

<FilesMatch "\.(html|htm|js|css|pl)$">
FileETag None
<ifModule mod_headers.c>
Header unset ETag
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
</ifModule>

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


1995 সালে কিছু তারিখে সংশোধিত http শিরোনাম সেট করা সাধারণত কৌতুক করে।

এখানে একটি উদাহরণ:

Expires: Wed, 15 Nov 1995 04:58:08 GMT
Last-Modified: Wed, 15 Nov 1995 04:58:08 GMT
Cache-Control: no-cache, must-revalidate

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

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

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

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

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


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

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

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


আমি <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()


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

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

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

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


আমি web.config রুটটি দরকারী খুঁজে পেয়েছি (উত্তরটিতে এটি যোগ করার চেষ্টা করেছি তবে মনে হচ্ছে এখানে পোস্ট করা হয়েছে বলে মনে হচ্ছে না)

<configuration>
<system.webServer>
    <httpProtocol>
        <customHeaders>
            <add name="Cache-Control" value="no-cache, no-store, must-revalidate" />
            <!-- HTTP 1.1. -->
            <add name="Pragma" value="no-cache" />
            <!-- HTTP 1.0. -->
            <add name="Expires" value="0" />
            <!-- Proxies. -->
        </customHeaders>
    </httpProtocol>
</system.webServer>

এবং এখানে একই কাজ করার express / node.js উপায় রয়েছে:

app.use(function(req, res, next) {
    res.setHeader('Cache-Control', 'no-cache, no-store, must-revalidate');
    res.setHeader('Pragma', 'no-cache');
    res.setHeader('Expires', '0');
    next();
});

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 আরও সম্পূর্ণ ডকুমেন্টেশন দেখুন।


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

ExpiresDefault "access plus 0 seconds"

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

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

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


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


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


ভূমিকা

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

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 এই ইন্টারনেট সাইট খুলতে সক্ষম ছিল না। অনুরোধকৃত সাইটটি অনুপলব্ধ বা পাওয়া যাবে না ।


যদি আপনি SSL এবং ক্যাশে আই 6-আই 8 এর সাথে ডাউনলোড সমস্যাগুলির মুখোমুখি হন: MS-Office ফাইলগুলির সাথে নো-ক্যাশ হেডার (এবং অনুরূপ মান) আপনি ক্যাশে ব্যবহার করতে পারেন: ব্যক্তিগত, নন-স্টোর শিরোনাম এবং POST অনুরোধে ফিরতি ফাইলটি ব্যবহার করুন। এটা কাজ করে।


গ্রহণযোগ্য উত্তর আইআইএস 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





http-headers