ত্রুটি কোডগুলিতে ক্যাশ-নিয়ন্ত্রণ সর্বোচ্চ-বয়স প্রেরণ করা থেকে আইআইএস 7.5 বন্ধ করুন


10

আমার এর সাথে ক্যাশে নিয়ন্ত্রণ Max-Ageশিরোনাম যুক্ত কিছু স্থিতিশীল সামগ্রী রয়েছে যাতে ক্লায়েন্টরা স্থির সামগ্রীটি ক্যাশে করে। যাইহোক, ক্লায়েন্টকে এটি ক্যাশে দেওয়ার পরামর্শ দেওয়ার ক্ষেত্রে ত্রুটি প্রতিক্রিয়া থাকলে আইআইএস 7.5 এখনও এই শিরোলেখটিকে পাঠায়।

এর নেতিবাচক প্রভাব রয়েছে যা কিছু প্রক্সি তারপরে সেই ত্রুটির প্রতিক্রিয়াটিকে ক্যাশে করবে। আমি পারতাম Vary: Accept,Accept-Encodingতবে Max-Ageএটি ত্রুটির প্রতিক্রিয়াগুলিতে বেরিয়ে আসার মূল সমস্যাটির সমাধান করতে পারে না ।

বর্তমান সম্পর্কিত আইআইএস web.configবিভাগটি হ'ল:

<configuration>
  <system.webServer>
    <staticContent>
      <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="7.00:00:00" />
    </staticContent>
  </system.webServer>
</configuration>

এমন কোনও উপায় আছে যাতে আমি এটি তৈরি করতে পারি যাতে আমরা ক্লায়েন্ট বা প্রক্সিগুলিকে 400/500 ত্রুটি কোডগুলি ক্যাশে বলতে না পারি?


আপনি কি কাস্টম ত্রুটি পৃষ্ঠা ব্যবহার করছেন?
জাস্টিন নিসনার

@Justin - না, এই ক্ষেত্রে না
নিক Craver

আইআইএস 7.0 আমার জন্য 40 * এ সর্বোচ্চ-বয়স প্রেরণ করে না। আমি নিশ্চিত না যদিও আইআইএস সংস্করণগুলির মধ্যে এটির কোনও বৈষম্য।
ডেভিড মারডোক

এছাড়াও, কোনও স্থির সামগ্রীকে 500 ত্রুটি কোড প্রেরণে বাধ্য করে?
ডেভিড মারডোক

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

উত্তর:


2

আমি একটি প্রাথমিক পরীক্ষা "স্যুট" তৈরি করেছি।

আমি যখন আইআইএস .0.০ এ একটি ন্যূনতম ওয়েবকনফিগ দিয়ে পরীক্ষাগুলি চালিত করি (.NET 4.0 এ ইন্টিগ্রেটেড পাইপলাইন মোড) সমস্ত কিছু পাস হয়; যখন অনুরোধের শিরোনামটি ফাইলটির সাথে মেলে না তখন পরীক্ষা ফাইলটির Cache-Controlপ্রতিক্রিয়া শিরোনাম সেট করা হয় ।privateAcceptContent-Type

এটি আমাকে বিশ্বাস করতে পরিচালিত করে যে আপনার আইআইএসের স্থিতিশীল ক্যাচিং রুটিন বা আইআইএস 7.0 এবং 7.5 এর চেয়ে পৃথক হওয়া কিছু মডিউল রয়েছে।

আমি যে ফাইলগুলি ব্যবহার করেছি তা এখানে রয়েছে ( some-script.jsএটি কেবল একটি খালি ফাইল হ'ল )

Web.Config:

<?xml version="1.0"?>
<configuration>
    <system.web>
        <compilation debug="true" targetFramework="4.0">
        </compilation>
    </system.web>
    <system.webServer>
        <staticContent>
            <!-- Set expire headers to 30 days for static content-->
            <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="7.00:00:00" />
        </staticContent>
    </system.webServer>
</configuration>

test.html:

<!doctype html>
<html>
<head>
    <title>http://serverfault.com/questions/346975</title>
    <style>
        body > div
        {
            border:1px solid;
            padding:10px;
            margin:10px;
        }
    </style>
</head>
    <body>
        <div>
            <h2>Request JS file with Accepts: accept/nothing</h2>
            <b>Response Headers: </b>
            <pre id="responseHeaders-1">loading&hellip</pre>
        </div>

        <div>
            <h2>Request JS file with Accepts: */*</h2>
            <b>Response Headers: </b>
            <pre id="responseHeaders-2">loading&hellip</pre>
        </div>

        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
        <script>
            var responseHeaders1 = $("#responseHeaders-1"),
                responseHeaders2 = $("#responseHeaders-2"),
                fetchScript = function (accepts, element, successMsg, errorMsg) {

                    var jXhr = $.ajax({
                        // fetch the resource "fresh" each time since we are testing the Cache-Control header and not caching itself
                        "url": "some-script.js?" + (new Date).getTime(),
                        "headers": {
                            "Accept" : accepts
                        },
                        "complete": function () {
                            var headers = jXhr.getAllResponseHeaders();
                            headers = headers.replace(/(Cache-Control:.+)/i, "<strong><u>$1</u></strong>");
                            element.html(headers);
                        },
                        "success": function () {
                            element.after("<div>" + successMsg + "</div>");
                        },
                        "error": function () {
                            element.after("<div>" + errorMsg + "</div>");
                        }
                    });
                };

                fetchScript("accept/nothing", responseHeaders1, "Uh, your server is sending stuff when the client doesn't accept it.", "Your server (probably) responded correctly.");
                fetchScript("*/*", responseHeaders2, "Your server responded correctly.", "Something went wrong.");
        </script>
    </body>
</html>

লোকালহোস্টের অনুরোধগুলি ব্যবহার করে আমরা আপনার অনুসন্ধানগুলি পুনরুত্পাদন করতে পারি - আপনি কি দূরবর্তী মেশিন থেকে একই পরীক্ষা করার চেষ্টা করেছেন?
জিওফ Dalgas

হ্যা, আমি করেছিলাম. se.vervestudios.co/tests/se-test/test.html (ভবিষ্যতের লোকদের মনে রাখবেন, পূর্ববর্তী লিঙ্কটি কেবলমাত্র অস্থায়ী পরীক্ষার উদ্দেশ্যে ছিল এবং সম্ভবত আর কাজ করে না, দুঃখিত)
ডেভিড মুরডাক

এই প্রতিক্রিয়াটিতে এম্বেড করা ত্রুটিটি কিছুটা ঝুঁকিপূর্ণ তথ্য প্রকাশ করে - এখানে দেখুন । দেখা যাচ্ছে যে আপনার সার্ভার বিশ্বাস করে যে সমস্ত অনুরোধগুলি স্থানীয়ভাবে জারি করা হয়েছে - দেখুন: iis.net/ConfigReferences/system.webServer/httpErferences আপনি যদি কাস্টমরিজগুলি এর মাধ্যমে সক্ষম করেন: <httpErferences ত্রুটিমোড = "কাস্টম" /> আপনি একই সমস্যাটি দেখতে পাবেন আমাদের @ ডেভিড
জিওফ ডালগাস

0

আপনি কী ধরণের সামগ্রীতে ক্যাশে যাচ্ছেন তা নির্দিষ্ট করা উচিত। উদাহরণস্বরূপ আপনি স্ক্রিপ্টস, সিএসএস, চিত্র .. ইত্যাদি ক্যাশে করতে পারেন। তাই <location path ="Scripts">ট্যাগের আগে ট্যাগ ব্যবহার করুন <system.webServer>। সুতরাং আপনার ওয়েব কনফিগারেশন এর মত দেখাচ্ছে।

 <location path ="Scripts">
    <system.webServer>
      <staticContent>
        <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="07:00:00" />
      </staticContent>
    </system.webServer>
  </location>
  <location path ="css">
    <system.webServer>
      <staticContent>
        <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="07:00:00" />
      </staticContent>
    </system.webServer>
 </location>

সত্যই কি এই প্রশ্নটির সমাধান করে?
ছানা 14
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.