কীভাবে HTTP শিরোনাম সেট করবেন (ক্যাশে-নিয়ন্ত্রণের জন্য)?


237

কীভাবে আমার সাইটের জন্য ব্রাউজার ক্যাশে সক্ষম করবেন? আমি কি কেবল ক্যাশে-নিয়ন্ত্রণটি রেখেছি: আমার শিরোনামে কোথাও এইভাবে প্রকাশ্য?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
Cache-Control:public;
>

আমি এক্সএএমপিপি-র সর্বশেষ সংস্করণে বিকাশকারী পিএইচপি এর সর্বশেষ সংস্করণটি ব্যবহার করছি।


আপনি কোন সার্ভারের সাইড ল্যাঙ্গুয়েজ ব্যবহার করছেন? পিএইচপি ?, এএসপি ?, জেএসপি? আপনি শিরোনামগুলি সেট করার পদ্ধতিটি একই রকম তবে একেবারে একরকম নয়। বা আপনি যদি চিত্রগুলি ক্যাশে করছেন ... প্রায়শই এটি আপনার অ্যাপাচি (বা ওয়েব সার্ভার) কনফিগারেশনে করা হয়
স্ক্যানলিফ

দুঃখের বিষয় হচ্ছে যে "সমাধান" কেবল একটি অবৈধ ডক্টইপিইটি জেনারেট করে ;-) আপনি যদি এইচটিএমএল থেকে এটি করতে চান (আমি এটির সুপারিশ করব না), আপনি মেটা এইচটিটিপি-ইকুইভ

উত্তর:


198

এইচটিএমএলে ক্যাশে-নিয়ন্ত্রণ ব্যবহার করতে, আপনি মেটা ট্যাগ ব্যবহার করেন , যেমন

<meta http-equiv="Cache-control" content="public">

বিষয়বস্তু ক্ষেত্রে মানটি নীচের চারটি মানের একটি হিসাবে সংজ্ঞায়িত করা হয়।

নীচে Cache-Controlহেডার সম্পর্কিত কিছু তথ্য রয়েছে

HTTP 1.1। অনুমোদিত মান = পাবলিক | প্রাইভেট | নন-ক্যাচে | কোন-স্টোর।

সর্বজনীন - সর্বজনীন ভাগ করা ক্যাশে ক্যাশে হতে পারে।
ব্যক্তিগত - কেবলমাত্র ব্যক্তিগত ক্যাশে ক্যাশে দেওয়া যেতে পারে।
নো-ক্যাশে - ক্যাশে করা যাবে না।
নো-স্টোর - ক্যাশে করা যেতে পারে তবে সংরক্ষণাগারভুক্ত নয়।

দিকনির্দেশক ক্যাচে-নিয়ন্ত্রণ: কোনও ক্যাশ ইঙ্গিত দেয় যে ক্যাশেড তথ্য ব্যবহার করা উচিত নয় এবং পরিবর্তে অনুরোধগুলি মূল সার্ভারে প্রেরণ করা উচিত। এই নির্দেশের PRAGMA: NO-CACHE এর মতো একই শব্দার্থক রয়েছে।

ক্লায়েন্টদের মধ্যে উচিত কোন-ক্যাশে অনুরোধ HTTP- র / 1.1 অনুবর্তী হিসেবে পরিচিত একটি সার্ভারে পাঠানো হয় যখন কোন-cache: কেও ক্যাশে এবং cache-নিয়ন্ত্রণ: উভয় PRAGMA অন্তর্ভুক্ত। এক্সপায়ারসও দেখুন।

দ্রষ্টব্য: এমটিএ বিবৃতিগুলির চেয়ে HTTP তে ক্যাশে আদেশগুলি নির্দিষ্ট করা আরও ভাল হতে পারে, যেখানে তারা ব্রাউজারের চেয়ে বেশি প্রভাবিত করতে পারে, তবে প্রক্সি এবং অন্যান্য মধ্যস্থতাকারী যা তথ্য ক্যাশে করতে পারে।


30
এইচটিএমএল 5 এটিকে নিষিদ্ধ করে এবং <meta>ক্যাচিং নির্দিষ্ট করার জন্য সর্বদা একটি ভয়ঙ্কর এবং ঝলকানো উপায়।
কর্নেল

1
@ পার্নেল আমার বুঝতে সমস্যা হয় যে আপনার লিঙ্কগুলির কোন অংশটি উত্তরের কোন অংশকে নিষিদ্ধ করেছে ... মেটা ট্যাগ চশমা এখানে কী লেখা আছে তা অপছন্দ করা সম্পর্কে বা কিছুই বলা নিষিদ্ধ করার বিষয়ে কিছুই বলে না?
ফলিক্স গাগনন-গ্রেনিয়ার

1
@ ফ্যালিক্সগ্যাগন-গ্রেনিয়ার "এইচটি-পি-ও-সমী গুণাবলী একটি গণনাযুক্ত বৈশিষ্ট্য" এর অর্থ এটি অনুমানের টেবিলে কেবলমাত্র মানগুলিকেই অনুমতি দেয়। এমনকি এটি পরবর্তী বিভাগে ক্যাশিংয়ের ডাক দেয় ("অন্যান্য প্রগমা নির্দেশিকা"):> এইচটিটিপি প্রসেসিং মডেলকে প্রভাবিত করে এমন শিরোনামগুলির সাথে সম্পর্কিত প্রাগমা নির্দেশিকা (যেমন ক্যাশিং) অবশ্যই নিবন্ধভুক্ত হওয়া উচিত নয়, কারণ তারা এইচটিটিপি-স্তরের আচরণের জন্য আলাদা হবে would ব্যবহারকারী এজেন্টরা না এমন ব্যবহারকারী এজেন্টগুলির চেয়ে HTML কার্যকর করে।
কর্নেল

3
উদ্ধৃত দস্তাবেজটি no-storeমানটির সাথে সঠিক নয় (ডকুমেন্ট নিজেই আরএফসি 2068 উল্লেখ করেছে ) - no-storeযে কোনও জায়গায়, নথিকে সঞ্চিত / ক্যাশে করা আটকাচ্ছে। যেখানে no-cacheএটি সংরক্ষণের অনুমতি দেয় না তবে এটি প্রতিটিবার সার্ভারের সাথে চেক করতে হবে। ব্রাউজারগুলি পিছনে বোতামের কার্যকারিতা ইত্যাদি সক্ষমno-cache করতে পৃষ্ঠাগুলি সঞ্চয় করতে পারে
মিঃ হোইট

3
গুগল এইচটিটিপি ক্যাচিং আইএমওর জন্য অন্যতম সহজ রেফারেন্স সরবরাহ করে: developers.google.com/web/fundamentals/performance/…
MrWhite

137

আপনি পিএইচপি-তে শিরোনামগুলি সেট করে সেট করতে পারেন :

<?php
  //set headers to NOT cache a page
  header("Cache-Control: no-cache, must-revalidate"); //HTTP 1.1
  header("Pragma: no-cache"); //HTTP 1.0
  header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past

  //or, if you DO want a file to cache, use:
  header("Cache-Control: max-age=2592000"); //30days (60sec * 60min * 24hours * 30days)

?>

নোট করুন যে ব্যবহৃত সঠিক শিরোনামগুলি আপনার প্রয়োজনের উপর নির্ভর করবে (এবং যদি আপনাকে HTTP 1.0 এবং / অথবা HTTP 1.1 সমর্থন করতে হয় )


3
Pragmaএবং Expiresসম্ভবত ব্রাউজারের বিশাল সংখ্যাগরিষ্ঠর জন্য অপ্রয়োজনীয়। fastly.com/blog/headers-we-dont-ant
thijsai

1
@ থিজসই হ্যা এইচটিটিপি / ১.০ খুব বেশি পুরানো হয়ে গেছে ... আপনার ব্যবহারকারীর ম্যাট্রিক্সের উপর ভিত্তি করে আপনার কেবলমাত্র শিরোনামগুলি ব্যবহার করুন
স্ক্যানলিফ ১

49

আমি যেমন লিখেছি ফাইলটি ব্যবহার করা সবচেয়ে ভাল .htaccess। তবে আপনি যখন ক্যাশে থাকা বিষয়বস্তু রেখে যাচ্ছেন তখন সময় থেকে সাবধান থাকুন।

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

<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
Header set Cache-Control "max-age=604800, public"
</FilesMatch>

যেখানে: 604800 = 7 দিন

PS: এটি কোনও শিরোনাম পুনরায় সেট করতে ব্যবহার করা যেতে পারে


30

Http://www.askapache.com/htaccess/apache-speed-cache-control.html পৃষ্ঠায় এই জাতীয় ব্যবহার করার পরামর্শ দেওয়া হয়েছে:

ক্যাশে-নিয়ন্ত্রণ শিরোনাম যুক্ত করুন

এটি আপনার রুট .htaccess ফাইলে যায় তবে আপনার যদি httpd.conf অ্যাক্সেস থাকে তবে এটি আরও ভাল।

এই কোডটি ফাইলগুলিতে ম্যাচ নির্দেশিকা এবং নির্দিষ্ট ফাইলগুলিতে ক্যাশে-নিয়ন্ত্রণ শিরোনাম যুক্ত করতে শিরোলেখ নির্দেশকে ব্যবহার করে।

# 480 weeks
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
Header set Cache-Control "max-age=290304000, public"
</FilesMatch>

3
আদেশ কি এই গুরুত্বপূর্ণ? "সর্বাধিক বয়স = 290304000, প্রকাশ্য" বা "পাবলিক, সর্বাধিক বয়স = 290304000" বা উভয়ই সমানভাবে সঠিক?
সত্য প্রকাশ

2
মানগুলি মতবিরোধী না হলে (যেমন cacheএবং no-cache) অর্ডার বিবেচনা করে না । max-ageএবং publicদ্বন্দ্ব করবেন না যাতে আদেশের বিষয়টি বিবেচনা করে না।
ব্লেইস

1
মনে রাখবেন যেহেতু এটি Headerনির্দেশ ব্যবহার করে তাই আপনাকে সক্ষম করতে হবে mod_headers
স্কিপি লে গ্র্যান্ড গৌরূ 25'18

@ স্কিপি লে গ্র্যান্ড গৌরূ কীভাবে আমি মোড_হেডারগুলিকে সক্ষম করব?
স্যাম

@ সামুয়েলস্ট্র্যাটফোর্ড আমি পড়লাম এটি অন্যান্য বিতরণে পৃথক, তবে ডিবিয়ানের অধীনে আপনি হয় ব্যবহার a2enmodকরতে পারেন বা থেকে প্রতীকী লিঙ্ক তৈরি করতে /etc/apache2/mods-available/headers.loadপারেন /etc/apache2/mods-enabled/headers.load
স্কিপি লে গ্র্যান্ড গৌরু

21

এটি .htaccessআমার আসল ওয়েবসাইটে আমি সবচেয়ে ভাল ব্যবহার করেছি:

<ifModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file .(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</ifModule>

##Tweaks##
Header set X-Frame-Options SAMEORIGIN

## EXPIRES CACHING ##
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType image/gif "access 1 year"
ExpiresByType image/png "access 1 year"
ExpiresByType text/css "access 1 month"
ExpiresByType text/html "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType text/x-javascript "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType image/x-icon "access 1 year"
ExpiresDefault "access 1 month"
</IfModule>
## EXPIRES CACHING ##

<IfModule mod_headers.c>
    Header set Connection keep-alive
    <filesmatch "\.(ico|flv|gif|swf|eot|woff|otf|ttf|svg)$">
        Header set Cache-Control "max-age=2592000, public"
    </filesmatch>
    <filesmatch "\.(jpg|jpeg|png)$">
        Header set Cache-Control "max-age=1209600, public"
    </filesmatch>
    # css and js should use private for proxy caching https://developers.google.com/speed/docs/best-practices/caching#LeverageProxyCaching
    <filesmatch "\.(css)$">
        Header set Cache-Control "max-age=31536000, private"
    </filesmatch>
    <filesmatch "\.(js)$">
        Header set Cache-Control "max-age=1209600, private"
    </filesmatch>
    <filesMatch "\.(x?html?|php)$">
        Header set Cache-Control "max-age=600, private, must-revalidate"
      </filesMatch>
</IfModule>

3
.Htaccess ফাইলের প্রায় নিখুঁত উদাহরণ ... নির্দিষ্ট চিত্রগুলি অন্তর্ভুক্ত করা থাকলে এবং চিত্রটির কীভাবে পথ লিখতে হবে এবং .htaccess ফাইলটি কোথায় রাখবেন (উদাহরণস্বরূপ, চিত্র dir বা সূচক ডায়ারে) এটি সম্পূর্ণ হবে .. .eg। '<IfModule mod_headers.c> <ফাইল / আইএমজি / মাইমাজে.জেপিজি> শিরোনাম ক্যাশে-নিয়ন্ত্রণ "সর্বাধিক বয়স = 3600, অবশ্যই পুনর্নির্মাণ" << ফাইলস </ ifModule>' ... এই কাজ করবে? .. । বা ... বা ইমগ দির '<ফাইলম্যাচ "^ (উদাহরণ \ .jpg | নমুনা \ .png) $"> শিরোনাম সেট করে ক্যাশে-নিয়ন্ত্রণ "সর্বাধিক বয়স = 31536000, সর্বজনীন" </ ফাইলসাম্যাচ>' .. । একটি সব একই কৌশল ঝুঁকিপূর্ণ বলে মনে হয় - যাহাই হউক না কেন নির্দিষ্ট উদাহরণ মহান হতে হবে যদি poss
মার্কো-UandL

2
শুধু এফওয়াইআই: জেএস এবং সিএসএস ফাইলগুলিতে জিজেপ সংক্ষেপণ আপনার এসএসএল এনক্রিপশনটি ভাঙ্গতে সহায়তা করতে পারে। আপনি যদি সুরক্ষার উপর নির্ভর করেন তবে গিজিপটি চালু করবেন না
এডুয়ার্ড ভয়েড

1
এটি লগইন অ্যাকাউন্ট পৃষ্ঠাটি ক্যাশে করছে, সুতরাং আপনি নিজের অ্যাকাউন্ট থেকে লগ আউট করতে পারবেন না। আরও খারাপ কেউ কেবল অ্যাকাউন্ট পৃষ্ঠাতে অ্যাক্সেস করতে পারে না এবং শেষ ব্যবহারকারীদের লগইনে প্রবেশ করতে পারে। এটি কোনও ইকমার্স সাইটে ব্যবহার করার পরামর্শ দেওয়া হয় না, তারপরে <filesMatch "\.(x?html?|php)$">ক্যাশে হওয়া স্থির এইচটিএমএল পৃষ্ঠাগুলি এড়ানোর জন্য আপনাকে অপসারণ করা উচিত । বাকি ফাইলম্যাচগুলি ঠিক আছে।
নিকোএক্স

1
আপনি সদৃশ আছে <filesmatch "\.(eot|woff|otf|ttf|svg)$">
নিকোএক্স

2
আপনার কাছে প্রক্সি ক্যাচিং থাকলে আপনি সেট cssএবং jsপ্রাইভেট হয়ে যান। সে সম্পর্কিত আপনার লিঙ্কে আমি কোনও প্রস্তাবনা পাই না। বেশিরভাগ সিডিএন আপনাকে সেই মানগুলি ক্যাশে করার পরামর্শ দিচ্ছে।
নিকোএক্স

14

অ্যাপাচি সার্ভারের জন্য আপনার মেয়াদউত্তীর্ণ এবং ক্যাশে-নিয়ন্ত্রণ শিরোনাম সেট করার জন্য mod_expires চেক করা উচিত ।

বিকল্পভাবে, আপনি নিজের উপর ক্যাশে-নিয়ন্ত্রণ যুক্ত করতে শিরোলেখ নির্দেশিকা ব্যবহার করতে পারেন :

Header set Cache-Control "max-age=290304000, public"

5

মেটা ক্যাশে নিয়ন্ত্রণ ট্যাগ ওয়েব প্রকাশকদের সংজ্ঞা দেয় যে কীভাবে পৃষ্ঠাগুলি ক্যাশে পরিচালনা করা উচিত। এর মধ্যে কী ক্যাশেযোগ্য হতে হবে, ক্যাশেগুলি কী দ্বারা সংরক্ষণ করা যেতে পারে, মেয়াদোত্তীর্ণকরণ ব্যবস্থার পরিবর্তন এবং পুনর্নির্মাণ এবং পুনরায় লোড নিয়ন্ত্রণগুলি ঘোষণার নির্দেশাবলী অন্তর্ভুক্ত করে।

অনুমোদিত মানগুলি হ'ল:

সর্বজনীন - পাবলিক শেয়ার করা ক্যাশে ক্যাশে করা যেতে পারে
ব্যক্তিগত - কেবল ব্যক্তিগত ক্যাশে
নো-ক্যাশে ক্যাশে করা
যেতে পারে - নো-স্টোর ক্যাশে করা যায় না - ক্যাশে করা যেতে পারে তবে আর্কাইভ করা যায় না

কেস সংবেদনশীলতা সম্পর্কে সতর্ক হন। আপনার ওয়েবপৃষ্ঠার উত্সটিতে নিম্নলিখিত মেটা ট্যাগ যুক্ত করুন। ট্যাগের শেষে বানানটির পার্থক্যটি হয় আপনি "/> = xML বা"> = এইচটিএমএল ব্যবহার করেন।

    <meta http-equiv="Cache-control" content="public">
    <meta http-equiv="Cache-control" content="private">
    <meta http-equiv="Cache-control" content="no-cache">
    <meta http-equiv="Cache-control" content="no-store">

উত্স-> মেটাট্যাগ


সংশোধন: নো- স্টোরকে
issues

ক্যাশে-নিয়ন্ত্রণ নো-স্টোর - নো-স্টোর নো-ক্যাশের মতো যা প্রতিক্রিয়াটিকে ক্যাশে করা এবং পুনরায় ব্যবহার করা যায় না, তবে এর মধ্যে একটি গুরুত্বপূর্ণ পার্থক্য রয়েছে। নো-স্টোরের জন্য উত্স সার্ভার থেকে প্রতিবার উত্সের অনুরোধ করা এবং ডাউনলোড করা দরকার। ব্যক্তিগত তথ্য নিয়ে কাজ করার সময় এটি একটি গুরুত্বপূর্ণ বৈশিষ্ট্য।
মার্কোজেন

5

ওডাব্লুএএসপি নিম্নলিখিত পরামর্শ দেয়,

যখনই সম্ভব এটি নিশ্চিত করুন ক্যাশে-নিয়ন্ত্রণ HTTP শিরোনামটি নো-ক্যাশে, নো-স্টোর, অবশ্যই পুনর্নির্মাণ, ব্যক্তিগত; এবং প্রাগমা এইচটিটিপি শিরোনামটি নো-ক্যাশে সেট করা আছে।

<IfModule mod_headers.c>
    Header set Cache-Control "private, no-cache, no-store, proxy-revalidate, no-transform"
    Header set Pragma "no-cache"
</IfModule>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.