304 / যদি-সংশোধিত-থেকে / হেড অনুরোধ রোধ করতে শিরোলেখগুলি


31

সামগ্রীটি ক্যাশে হওয়ার পরে সার্ভারে সমস্ত অনুরোধগুলি সরাসরি বন্ধ করতে আমি কোন শিরোনাম পাঠাব?

আমাদের একটি খুব উচ্চ বিলম্বিত সার্ভার রয়েছে (দীর্ঘশ্বাস, ভিএমওয়্যার) তাই এমনকি HEADসার্ভারে একটি অনুরোধ প্রেরণ করতে + 40 মিমি লাগে।

বর্তমানে এগুলি পাঠানো / গ্রহণ করা শিরোনামগুলি;

প্রথম অনুরোধ

ক্লায়েন্ট প্রেরণ;

GET http://dugong:8080/Rvi24mYJkxFRGNzq73PPvgWGh1j/IMG_2071.jpg HTTP/1.1
Host: dugong:8080
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:9.0) Gecko/20100101 Firefox/9.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Pragma: no-cache, no-cache, no-cache
Cache-Control: no-cache, no-cache, no-cache

সার্ভার সাড়া দেয়;

HTTP/1.1 200 OK
Server: nginx/1.0.11
Date: Wed, 01 Feb 2012 14:51:51 GMT
Content-Type: text/plain
Vary: Accept-Encoding
Last-Modified: Tue, 31 Jan 2012 10:45:11 GMT
Content-Length: 14
Expires: Thu, 31 Jan 2013 14:51:51 GMT
Cache-Control: max-age=31536000

সুতরাং এটি ভবিষ্যতে 365 দিনগুলিতে একটি Cache-Controlএবং Expiresশিরোনাম সেট প্রেরণ করে। দুর্ভাগ্যক্রমে দ্বিতীয় রিফ্রেশে এটি আবার If-Modified-Sinceশিরোনামের সাহায্যে বস্তুর অনুরোধ করে ।

দ্বিতীয় অনুরোধ

GET http://dugong:8080/Rvi24mYJkxFRGNzq73PPvgWGh1j/IMG_2071.jpg HTTP/1.1
Host: dugong:8080
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:9.0) Gecko/20100101 Firefox/9.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
If-Modified-Since: Tue, 31 Jan 2012 10:45:11 GMT
Cache-Control: max-age=0

রেসপন্স;

HTTP/1.1 304 Not Modified
Server: nginx/1.0.11
Date: Wed, 01 Feb 2012 14:58:00 GMT
Vary: Accept-Encoding
Expires: Thu, 31 Jan 2013 14:58:00 GMT
Cache-Control: max-age=31536000

দুর্ভাগ্যক্রমে নির্বোধ পুরানো প্রক্সি সফ্টওয়্যার কারণে আমরা ব্যবহার করতে পারি না Keep-Alive, বা অ্যাপ্লিকেশনটির সামনে অন্য কোনও সার্ভার / প্রক্সি রাখতে পারি না । আমরা সার্ভারের কার্যকারিতা উন্নত করতে এবং নেটওয়ার্কের বিলম্বকে হ্রাস করতে পারি না। 301 টি অনুরোধ থেকে মুক্তি পেতে আমরা কোন শিরোনাম পাঠাতে পারি তা নির্ধারণের চেষ্টা করছি। আমি ইটাগগুলি ব্যবহার করার চেষ্টা করেছি কিন্তু এতে কোনও তফাত আসে না, এটি এখনও একটি If-modified-sinceশিরোনাম প্রেরণ করে । আমি Last-Modifiedশিরোলেখ অপসারণ করার চেষ্টা করেছি কিন্তু এটি কেবল কোনও ক্যাশে ছাড়াই একটি স্ট্যান্ডার্ড জিইটি অনুরোধের কারণ ঘটায় (লগগুলি চেক করা হয়েছে, সার্ভারটি এখনও অনুরোধ গ্রহণ করছে)।

ক্লায়েন্টগুলি ফায়ারফক্স (বেশিরভাগ), আই 7, 8 এবং (কিছু) 9, ক্রোম এবং সাফারি এর মিশ্রণ তবে এই আচরণটি সমস্ত ব্রাউজারে পরীক্ষিত বলে মনে হচ্ছে।

টি এল; ডিআর;

ভয়াবহ নেটওয়ার্ক, ক্লায়েন্টদের তাদের ক্যাশে যাচাই করার জন্য অনুরোধগুলি কখনই না পাঠাতে If-modified-sinceএবং শিরোনামটি Expiresপূরণ না হওয়া অবধি সামগ্রীকে ক্যাশে রাখার জন্য আমি কী শিরোনাম পাঠাতে পারি ?

আমি সম্ভবত সুস্পষ্ট কিছু মিস করছি তবে আমি যা চেষ্টা করেছি তার থেকে একই ফলাফল পাওয়া যাচ্ছে।

আমাদের একটি এনজিআইএনএক্স সার্ভার রয়েছে আমাদের অ্যাপ্লিকেশন সার্ভারের সামনে যাতে আমি যেকোন শিরোনামকে যুক্ত করতে / মুছতে পারি remove আমাদের প্রক্সিটি কীপ-অ্যালাইভকে সমর্থন করে না এবং তাদের আক্রমণাত্মক নেটওয়ার্কের কার্যকারিতা উন্নত করার কোনও উপায় নেই। ভয়ানক সফ্টওয়্যার ডিজাইনের কারণে ওয়েব অ্যাপ্লিকেশন প্রতিটি পৃষ্ঠার লোডে +100 সংস্থানগুলি লোড করে (হ্যাঁ, এন্টারপ্রাইজ সফ্টওয়্যার সাফল্য অর্জন করে) প্রতি বস্তুতে 40-50 মিলিয়ন ডলার।


1
হুম, এটা অদ্ভুত। মেয়াদ উত্তীর্ণ হওয়া এবং সর্বাধিক বয়স হেডারগুলি প্রেরণে চিত্রের আরও অনুরোধগুলি রোধ করা উচিত। সম্পাদনা করুন: যাইহোক, কোনও জেপিজি প্রেরণে কী চুক্তি হয়েছে text/plain?
অসন্তুষ্ট গোয়াট

1
@ ডিসগ্রান্টলড গোয়াত আহ, আপনি ধরে নিয়েছেন একটি .jpg ফাইলটি আসলে একটি পাঠ্য নথির চেয়ে একটি চিত্র। আমার ওয়ার্ল্ডে আপনাকে স্বাগতম =) (এটি আসলে একটি পাঠ্য ফাইল যা আমার পরীক্ষার জন্য 'হ্যালো ওয়ার্ল্ড' ধারণ করে, সফ্টওয়্যারটি কেবলমাত্র নির্বিশেষে IMG_xxxx.jpg সমস্ত ফাইলের নামকরণ করে। শীতল হাহ?)
স্মুড

আপনি HTTP অনুরোধ শিরোনাম সেট করতে কী ব্যবহার করছিলেন?
বারলপ

উত্তর:


25

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

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

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

যে জিনিসটি সাহায্য করতে পারে তা হ'ল ক্যাশে নিয়ন্ত্রণ শিরোনামে "পাবলিক" যুক্ত করা, অর্থাৎ Cache-Control: public, max-age=31536000। আমি সম্প্রতি শিখেছি যে এক বছরের বেশি মেয়াদ শেষ হওয়ার তারিখটি অবৈধ। যেহেতু আপনার মেয়াদ শেষ হওয়ার তারিখটি ঠিক এক বছর, সম্ভবত কিছু দিন বা সপ্তাহের মধ্যে ফাইলটি ব্রাউজারের ক্যাশে থাকা নিশ্চিত হবে এবং তা ফেলে দেওয়া হবে না।


আকর্ষণীয়, আমি মেয়াদ শেষ হয়ে 60০ দিনের মধ্যে কমিয়ে পাব্লিক পতাকা যুক্ত করব এবং কী হবে তা দেখুন। এই (ফায়ারবাগকে এবং সার্ভার লগ অনুযায়ী) F5s লিঙ্ক ক্লিক বদলে ঘটছে করা লাগে
এবার Smudge

প্রযুক্তিগতভাবে, এইচটিটিপি / ১.১ অনুমান কেবলমাত্র বলে যে "সার্ভারগুলি ভবিষ্যতে এক বছরের বেশি সময়সীমা প্রেরণ করা উচিত নয়" (সম্ভবত এটি শেষ হওয়ার আগে একটি হাস্যকরভাবে দীর্ঘ সময়) এবং ভবিষ্যতে "প্রায় এক বছর" উপযুক্ত সমাপ্তি হয় এমন সামগ্রী পাঠানোর সময় যা কখনই শেষ হয় না বলে আশা করা যায়।
ইলমারি করোনেন

1
কিছুটা খেলার পরে, আমি সিদ্ধান্ত নিয়েছি যে ৩5৫ ডি সমাপ্তিটি আমাদের ক্লায়েন্টগুলিকে প্রভাবিত করছে না তবে আমি এটিকে নিরাপদ বলে নামিয়ে রেখেছি, মনে Cache-Control: public,...হয় এই নির্দিষ্ট পরিস্থিতির মূল কারণ এটি।
স্মুড

আপনি কি "জনসাধারণ" শিরোনামটি অপ্রয়োজনীয় রাউন্ড-ট্রিপগুলি স্থির করেছেন? আমি চেষ্টা করেছিলাম, তবে কোনও সাফল্যই
পাইনি

2
আমার উত্তর থেকে এটি পরিষ্কার না হলে আপনার ব্রাউজারে পৃষ্ঠাটি পুনরায় লোড করা হলে ফাইলগুলি আবার অনুরোধ করবে । পৃষ্ঠা খোলার জন্য কেবল লিঙ্কগুলিতে ক্লিক করুন এবং ব্রাউজারটি এর ক্যাশে ব্যবহার করে।
অসন্তুষ্ট গোয়াট


3

আমার একই সমস্যা ছিল, এবং অনুরোধগুলি অবশ্যই 304স্থিতির সাথে প্রতিক্রিয়া জানাতে সার্ভারটিকে হিট করছে - আমি 304 প্রেরণ করছি কিছু সি # এর মাধ্যমে এবং নিশ্চিতভাবে এটি সার্ভারকে হিট করে ..

আমি শুধু Cache-Control: privateসেট ছিল । না max-ageএবং না Expiresএটি প্রত্যাশার মতো পরিচালনা করে; If-Modified-Sinceআমি যেটা প্রত্যাশা করি তার তুলনায় আমি মানটি পরীক্ষা করে যেখানে 304ডাব্লু / খালি প্রতিক্রিয়া বডি সরবরাহ করি তার সাথে সার্ভারটি হিট করুন - অন্যথায় 200& প্রতিক্রিয়া শৃঙ্খলা পূর্ণ।

ক্লায়েন্টে Expiresহেডার নির্ধারণের কাঙ্ক্ষিত ফলাফল ছিল 200 - (from cache)এবং কোনও HTTP অনুরোধ সার্ভারে আঘাত করে না।

কিন্তু .. আমি দেখা গেছে যে সেটিং উভয় max-age= & Expiresনা পাঠাতে ব্রাউজার হতে পারে If-Modified-Sinceহেডার এবং এ সব ক্যাশে না যদি মান মেলে না

আপনার ক্যাশে সমস্যা রয়েছে এবং মিশ্রণে বিভিন্ন শিরোনাম ব্যবহার করেছেন কিনা সে সম্পর্কে সচেতন হওয়ার মতো কিছু।


1

সামান্য অফ-টপিক তবে সম্ভবত সহায়ক। ক্যাশেড সামগ্রীর আপনার অনুরোধগুলির জন্য আরেকটি উন্নতি হ'ল সেশনসটোরেজে ক্যাশে করা যাতে আপনাকে সার্ভারকে ক্যাশেটি বৈধ করতে এবং একটি 304 গ্রহণ করার প্রয়োজন হয় না example উদাহরণস্বরূপ গুগল দেখুন, কনসোলটি খুলুন এবং সেশন স্টোরেজ লিখুন। আপনি দেখতে পাবেন যে তারা সেশন স্টোরেজ সহ সিএসএস বা ডিওএম ক্যাচ করছে। তবে, আপনি এটি পুরানো আই ব্রাউজারগুলিতে ব্যবহার করতে পারবেন না।


0

আপনার উত্স কোডটি দেখুন এবং নিশ্চিত করুন যে অন্য পৃষ্ঠায় স্থানান্তরিত করার জন্য কোনও মিতা রেফ্রেশ নেই। পরিবর্তে সেন্ডরাইডারের মতো কিছু ব্যবহার করুন। আমার সেটআপে মেটা রিফ্রেশ আইই তে 304 এস উত্পাদন করে তবে ক্রোম নয়। sendRedirect কোনও ব্রাউজারে এটি উত্পাদন করে না।

<meta http-equiv="refresh" content="0;URL='nextpage'" />    

বনাম

<% response.sendRedirect("nextpage") %>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.