এইচটিটিপিতে POST পদ্ধতিগুলি ক্যাশে করা কি সম্ভব?


152

খুব সাধারণ ক্যাচিং শব্দার্থবিজ্ঞান সহ: যদি প্যারামিটারগুলি একই হয় (এবং ইউআরএলটি অবশ্যই একই) তবে এটি একটি হিট। এটা কি সম্ভব? প্রস্তাবিত?

উত্তর:


93

বিভাগ 9.5 (POST) সম্পর্কিত আরএফসি 2616 আপনি যদি যথাযথ শিরোনাম ব্যবহার করেন তবে কোনও পোস্টের বার্তার প্রতিক্রিয়া ক্যাচ করার অনুমতি দেয় ।

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

নোট করুন যে একই আরএফসি ১৩ অনুচ্ছেদে (HTTP- তে ক্যাচিং) স্পষ্ট করে জানিয়েছে যে কোনও ক্যাশে অবশ্যই একটি পোস্টের অনুরোধের পরে সংশ্লিষ্ট সত্তাকে অবৈধ করতে হবে ।

কিছু HTTP পদ্ধতি অবশ্যই কোনও সত্তাকে অবৈধ করার জন্য ক্যাশে তৈরি করতে হবে। এটি হয় অনুরোধ-ইউআরআই দ্বারা নির্দেশিত সত্তা, বা অবস্থান বা বিষয়বস্তু-অবস্থানের শিরোনাম (উপস্থিত থাকলে) by এই পদ্ধতিগুলি হ'ল:

  - PUT
  - DELETE
  - POST

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

এটি আরএফসি 7231 (বিভাগ 4.3.3।) এও প্রতিফলিত হয়েছে এবং আরও স্পষ্ট হয়েছে , যা আরএফসি 2616 কে অপ্রচলিত করে।

পোষ্ট অনুরোধগুলির প্রতিক্রিয়াগুলি কেবল ক্যাশেযোগ্য হয় যখন তারা
স্পষ্টত তাজা তথ্য অন্তর্ভুক্ত করে ([আরএফসি 7234] এর বিভাগ 4.2.1 দেখুন)।
তবে পোষ্ট ক্যাচিং ব্যাপকভাবে প্রয়োগ করা হয় না। যেসব ক্ষেত্রে কোনও উত্স সার্ভার ক্লায়েন্টকে একটি পোষ্টের ফলাফলটি এমনভাবে কাটাতে সক্ষম করতে চায় যা পরবর্তী জিইটি দ্বারা পুনরায় ব্যবহার করা যেতে পারে, উত্স সার্ভার ফলাফল এবং সামগ্রী সামগ্রী সহ একটি 200 (ঠিক আছে) প্রতিক্রিয়া পাঠাতে পারে পোষ্টের কার্যকর অনুরোধ ইউআরআই (বিভাগ 3.1.4.2) এর সমান মান রয়েছে এমন শিরোনাম ক্ষেত্র।

এর মতে, ক্যাশেড পোষ্টের ফলাফল (যদি এই ক্ষমতাটি সার্ভার দ্বারা নির্দেশিত হয়) পরে একই ইউআরআইয়ের জন্য জিইটি অনুরোধের ফলাফল হিসাবে ব্যবহার করা যেতে পারে।


1
এই বিভাগটি মধ্যবর্তী ক্যাশে (ক্যাশে প্রক্সি সার্ভারের মতো) প্রয়োগ করে, মূল সার্ভারটি নয়।
ডেভিড জেড

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

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

2
ইউজিন, আমরা কি একমত হতে পারি যে) ক) পোষ্টের ক্যাশেড সত্তা (বিভাগে ১৩.১০) অবৈধ করা উচিত, যাতে উদাহরণস্বরূপ পরবর্তী জিইটি অবশ্যই একটি বার্স কপি এবং খ আনতে হবে) যাতে পোষ্টের প্রতিক্রিয়া ক্যাশে করা যায় (অনুচ্ছেদ 9.5 অনুযায়ী), যাতে যেমন একটি পরবর্তী পোস্ট একই প্রতিক্রিয়া পেতে পারেন?
ডায়োমিডিস স্পিনেলিস

3
এটি এইচটিটিপিবিস দ্বারা স্পষ্ট করা হচ্ছে; একটি সংক্ষিপ্তসার জন্য mnot.net/blog/2012/09/24/casing_POST দেখুন ।
মার্ক নটিংহাম

68

আরএফসি অনুযায়ী 2616 ধারা 9.5:

"পোষ্ট পদ্ধতির প্রতিক্রিয়াগুলি ক্যাশেযোগ্য নয়, UNLESS প্রতিক্রিয়াতে উপযুক্ত ক্যাশে-নিয়ন্ত্রণ অন্তর্ভুক্ত থাকে অথবা হেডার ক্ষেত্রের মেয়াদ শেষ হয়" "

সুতরাং, হ্যাঁ, আপনি পোষ্ট অনুরোধের প্রতিক্রিয়াটিকে ক্যাশে করতে পারেন তবে এটি যদি উপযুক্ত শিরোনাম নিয়ে আসে if বেশিরভাগ ক্ষেত্রে আপনি প্রতিক্রিয়াটি ক্যাশে করতে চান না। তবে কিছু ক্ষেত্রে - যেমন আপনি যদি সার্ভারে কোনও ডেটা সংরক্ষণ না করেন - এটি সম্পূর্ণ উপযুক্ত appropriate

দ্রষ্টব্য, তবে বর্তমান ফায়ারফক্স ..০.১০ সহ অনেক ব্রাউজারগুলি শিরোনাম নির্বিশেষে পোষ্টের প্রতিক্রিয়াটিকে ক্যাশে করবে না। IE এই ক্ষেত্রে আরও স্মার্ট আচরণ করে।

এখন, আমি আরএফসি 2616 এস 13.10 সম্পর্কিত কিছু বিভ্রান্তি এখানে পরিষ্কার করতে চাই। কোনও ইউআরআই-তে পোষ্ট পদ্ধতি "ক্যাশে করার জন্য সংস্থানটি অকার্যকর করে না" যেমন কিছু এখানে বলেছে। এটি এর ইউআরআই বাসির আগের ক্যাশেড সংস্করণ তৈরি করে, এমনকি যদি এর ক্যাশে নিয়ন্ত্রণ শিরোনামগুলি দীর্ঘ সময়ের জন্য সতেজতা নির্দেশ করে।


2
+1 রিবুট, 13.10 সম্পর্কিত ভুয়া বিবৃতি সংশোধন করে শিরোনামগুলির সমস্যাটি ব্যাখ্যা করার জন্য ধন্যবাদ। এই ভুল উত্তরগুলি অবাক করে এত বেশি ভোট পেয়েছে।
ইউজিন বেরেসভস্কি

3
"ক্যাশিংয়ের সংস্থানটি অকার্যকর করা" এবং "ইউআরআই স্টেলের ক্যাশেড সংস্করণ তৈরি করা" এর মধ্যে পার্থক্য কী? আপনি কি বলছেন যে সার্ভারকে একটি পোষ্ট প্রতিক্রিয়া ক্যাশে করার অনুমতি দেওয়া হয়েছে তবে ক্লায়েন্টরা তা করতে পারে না?
গিলি

1
যেখানে আপনি একই ইউআরআই ব্যবহার করেন GETএবং POSTঅনুরোধ করেন সেখানে "ইউআরআই বাসির ক্যাশেড সংস্করণ তৈরি করা" প্রযোজ্য । আপনি যদি ক্লায়েন্ট এবং সার্ভারের মধ্যে বসে GET /fooক্যাশে হন তবে আপনি দেখুন এবং আপনি প্রতিক্রিয়াটি ক্যাশে করছেন। এরপরে আপনি দেখুন POST /fooতারপরে আপনাকে ক্যাশেড প্রতিক্রিয়াটি অবৈধ করতে হবেGET /foo যদিও POSTপ্রতিক্রিয়াতে কোনও ক্যাশে নিয়ন্ত্রণ শিরোনাম অন্তর্ভুক্ত না কারণ তারা একই ইউআরআই রয়েছে , সুতরাং পরবর্তী GET /fooশিরোনামে ক্যাশটি এখনও থাকবে এমন নির্দেশ থাকলেও পরবর্তীটিকে পুনরায় বাতিল করতে হবে লাইভ (যদি আপনি POST /fooঅনুরোধটি না দেখে থাকেন )
স্টিফেন কনোলি

But in some cases - such as if you are not saving any data on the server - it's entirely appropriate.। তারপরে প্রথম স্থানে এ জাতীয় পোস্টের এপিআইয়ের বিন্দুটি কী?
সিদ্ধার্থ

33

সার্বিক:

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

দয়া করে HTTP 1.1 আরএফসি 2616 এস 9.1 এর 9.1 বিভাগ দেখুন

জিইটি পদ্ধতির শব্দার্থক ব্যতীত:

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

PUT পদ্ধতিটি নিজেই শব্দার্থভাবে বোঝানো হয় একটি সংস্থান স্থাপন বা তৈরি করা। এটি একটি আদর্শ অপারেশন, তবে এটি ক্যাশিংয়ের জন্য ব্যবহৃত হবে না কারণ এর মধ্যে একটি মোছা ঘটতে পারে।

মোছা পদ্ধতিটি নিজেই শব্দার্থতভাবে কোনও উত্স মুছতে বোঝানো হয়। এটি একটি আদর্শ অপারেশন, তবে এটি ক্যাশিংয়ের জন্য ব্যবহৃত হবে না কারণ এর মধ্যে একটি পুট ঘটতে পারে।

ক্লায়েন্ট সাইড ক্যাচিং সম্পর্কিত:

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

প্রক্সি ক্যাচিং সম্পর্কিত:

একটি প্রক্সি এইচটিটিপি সার্ভার যা আপনার বার্তাটি সার্ভারে ফরোয়ার্ড করে তা কখনই কোনও জিইটি বা হেড অনুরোধ ব্যতীত আর কিছু ক্যাশে করে না।

সার্ভার ক্যাশে সম্পর্কিত:

ডিফল্টরূপে একটি সার্ভার এর ক্যাশে যাচাইয়ের মাধ্যমে কোনও পোষ্ট অনুরোধ স্বয়ংক্রিয়ভাবে পরিচালনা করবে না। তবে অবশ্যই কোনও পোষ্ট অনুরোধ আপনার অ্যাপ্লিকেশনটিতে বা অ্যাড-ইন প্রেরণ করা যেতে পারে এবং প্যারামিটারগুলি সমান হলে আপনার নিজের পড়া ক্যাশে থাকতে পারে।

একটি সংস্থান অকার্যকর:

HTTP 1.1 আরএফসি 2616 এস 13.10 চেক করা দেখায় যে পিওএসটি পদ্ধতি ক্যাশে যাওয়ার জন্য সংস্থানটি অকার্যকর করে তুলবে।


9
"মূলত পোষ্ট কোনও আদর্শবান অপারেশন নয়। সুতরাং আপনি এটিকে ক্যাশে দেওয়ার জন্য ব্যবহার করতে পারবেন না।" এটি ঠিক ভুল, এবং এটি সত্যিকার অর্থে বোঝায় না, বিশদগুলির জন্য রিবুটের উত্তর দেখুন। দুর্ভাগ্যক্রমে, আমি এখনও ডাউন ডাউন করতে পারি না, অন্যথায় আমারও তা হত।
ইউজিন বেরেসভস্কি

1
ইউজিন: আমি পরিবর্তন করেছি "না" থেকে "নাও" হতে পারে।
ব্রায়ান আর বন্ডি

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

1
ইউজিন: যদি এটি একবারে বা 5 বার বলা হয় কিনা তা যদি কোনও পার্থক্য করে, যেমন আপনি যদি একটি তালিকায় কোনও বার্তা পোস্ট করছেন, তবে আপনি কি এই কলটি 5 বার ডান বার সার্ভারে চাপতে চান? এবং আপনি এটি ক্যাশে করতে চান না যাতে এটি ঠিক ঠিক সার্ভারে আঘাত করে না? কারণ এর পার্শ্ব প্রতিক্রিয়া রয়েছে যা গুরুত্বপূর্ণ।
ব্রায়ান আর বন্ডি

[cont'd] তবে সার্ভারের প্রকৃতপক্ষে ক্যাশে-মঞ্জুরি দেওয়ার শিরোনাম কেবলমাত্র শিরোনাম প্রেরণ করা উচিত কিনা তা অপসারণ করতে পারিনি যদি অপারেশনটি আদর্শবান হয়। যদিও এটি অনুমান করা যায় এটি এক ধরণের অর্থপূর্ণ। [কেবলমাত্র আপনার প্রতিক্রিয়াটি দেখেছি]: সম্মত, তাই আমি অনুমান করেছি যে আমি আমার মন আপ করেছি: সার্ভারের কেবলমাত্র আদর্শভাবের ক্ষেত্রে ক্যাশেযোগ্যতার ইঙ্গিত দেওয়া উচিত - এবং এটি একটি পোষ্টও হতে পারে, বিশেষত এক্স-এইচটিটিপি-পদ্ধতি-ওভাররাইডের প্রয়োজন বিবেচনা করে কিছু কারন.
ইউজিন বেরেসভস্কি

6

আপনি যদি কোনও পোষ্ট প্রতিক্রিয়া ক্যাশে করেন তবে তা অবশ্যই ওয়েব অ্যাপ্লিকেশনের দিকনির্দেশে। এটি এর অর্থ যা "এই পদ্ধতির প্রতিক্রিয়াগুলি ক্যাচযোগ্য নয়, যদি না প্রতিক্রিয়াটিতে উপযুক্ত ক্যাশে-নিয়ন্ত্রণ অন্তর্ভুক্ত থাকে বা হেডার ক্ষেত্রের মেয়াদ শেষ না হয়।"

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

এই অনুমানের অধীনে ক্যাচ থেকে জিইটি'র অনুসরণ করা যেতে পারে।

যে অ্যাপ্লিকেশন প্রয়োজনীয় এবং সঠিক শিরোনামকে ক্যাচযোগ্য এবং নন-ক্যাশেবল পোস্ট পোস্টের প্রতিক্রিয়াগুলির মধ্যে পার্থক্য করতে সংযুক্ত করতে ব্যর্থ হয়েছে তা কোনও অবৈধ ক্যাশিং ফলাফলের জন্য দোষ।

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


4

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

পোষ্টগুলি 100 টির মধ্যে 99 বার চিহ্নিত রাষ্ট্রের প্রতিনিধিত্ব করে না However যখন সার্ভারটি এই কথাটি বলার বাইরে চলে যায় যে অনুরোধটি ইউআরআই-এর অনুরূপ একটি সামগ্রী-অবস্থান শিরোনাম সেট করে এই পোস্টের প্রতিক্রিয়াটি তার ইউআরআইয়ের প্রতিনিধিত্ব represent যখন এটি হয়, পোষ্ট প্রতিক্রিয়া ঠিক একই ইউআরআইয়ের জিইটি প্রতিক্রিয়াটির মতো; এটি ক্যাশে এবং পুনরায় ব্যবহার করা যেতে পারে - তবে কেবল ভবিষ্যতের জিইটি অনুরোধের জন্য।

https://www.mnot.net/blog/2012/09/24/casing_POST


4

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

উত্তরগুলি ক্যাশিংয়ের কীভাবে কাজ করা উচিত, আরএফসি অনুসারে ক্যাশিং কীভাবে কাজ করে, আরএফসি অনুসারে ক্যাচিং কীভাবে কাজ করা উচিত, এবং ক্যাচিং বাস্তবে কীভাবে কাজ করে তার মিশ্রিত মিশ্রণ। আসুন আরএফসি দিয়ে শুরু করা যাক, ব্রাউজারের প্রকৃতপক্ষে কীভাবে কাজ করা হয় তা প্রদর্শন করে চলুন, তারপরে সিডিএন, গ্রাফকিউএল এবং উদ্বেগের অন্যান্য ক্ষেত্রগুলি নিয়ে কথা বলুন।

আরএফসি 2616

আরএফসি অনুসারে, পোস্টের অনুরোধগুলিতে ক্যাশেটি অবৈধ করতে হবে:

13.10 Invalidation After Updates or Deletions

..

Some HTTP methods MUST cause a cache to invalidate an entity. This is
either the entity referred to by the Request-URI, or by the Location
or Content-Location headers (if present). These methods are:
  - PUT
  - DELETE
  - POST

এই ভাষাটি পরামর্শ দেয় যে পোষ্ট অনুরোধগুলি ক্যাশেযোগ্য নয়, তবে এটি সত্য নয় (এই ক্ষেত্রে)। ক্যাশে কেবল পূর্ববর্তী সঞ্চিত ডেটার জন্য অবৈধ। আরএফসি স্পষ্ট করে পরিষ্কার করে দিয়েছে যে হ্যাঁ, আপনি POSTঅনুরোধগুলি ক্যাশে করতে পারেন :

9.5 POST

..

Responses to this method are not cacheable, unless the response
includes appropriate Cache-Control or Expires header fields. However,
the 303 (See Other) response can be used to direct the user agent to
retrieve a cacheable resource.

এই ভাষা সত্ত্বেও, আবশ্যকটি সেট করা Cache-Controlঅবশ্যই POSTএকই উত্সটিতে পরবর্তী অনুরোধগুলিকে ক্যাশে করবে না । POSTঅনুরোধগুলি অবশ্যই সার্ভারে প্রেরণ করা উচিত:

13.11 Write-Through Mandatory

..

All methods that might be expected to cause modifications to the
origin server's resources MUST be written through to the origin
server. This currently includes all methods except for GET and HEAD.
A cache MUST NOT reply to such a request from a client before having
transmitted the request to the inbound server, and having received a
corresponding response from the inbound server. This does not prevent
a proxy cache from sending a 100 (Continue) response before the
inbound server has sent its final reply.

কীভাবে তা বোঝা যায়? ঠিক আছে, আপনি POSTঅনুরোধটি ক্যাশে করছেন না , আপনি সংস্থানটি ক্যাশে করছেন।

পোষ্ট প্রতিক্রিয়া সংস্থাটি কেবল একই সংস্থানটিতে পরবর্তী জিইটি অনুরোধের জন্য ক্যাশে যাবে। সেট Locationবা Content-Locationযা সম্পদ শরীর প্রতিনিধিত্ব করে যোগাযোগ করতে পোষ্ট প্রতিক্রিয়ায় হেডার। সুতরাং পোষ্ট অনুরোধটিকে ক্যাশে করার একমাত্র প্রযুক্তিগতভাবে বৈধ উপায় হ'ল একই উত্সের পরবর্তী জিইটিগুলির জন্য।

সঠিক উত্তর উভয়:

  • "হ্যাঁ, আরএফসি আপনাকে একই উত্সে পরবর্তী জিইটিগুলির জন্য পোষ্ট অনুরোধগুলি ক্যাশে করার অনুমতি দেয়"
  • "না, আরএফসি আপনাকে পরবর্তী পোস্টগুলির জন্য পোষ্ট অনুরোধগুলি ক্যাশে করার অনুমতি দেয় না কারণ পোষ্ট আদর্শবান নয় এবং এটি সার্ভারের মাধ্যমে লিখতে হবে"

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

সূত্র:

ব্রাউজার আচরণের বিক্ষোভ

নীচের উদাহরণটি দেওয়া হয়েছে জাভাস্ক্রিপ্ট অ্যাপ্লিকেশন (index.js):

const express = require('express')
const app = express()

let count = 0

app
    .get('/asdf', (req, res) => {
        count++
        const msg = `count is ${count}`
        console.log(msg)
        res
            .set('Access-Control-Allow-Origin', '*')
            .set('Cache-Control', 'public, max-age=30')
            .send(msg)
    })
    .post('/asdf', (req, res) => {
        count++
        const msg = `count is ${count}`
        console.log(msg)
        res
            .set('Access-Control-Allow-Origin', '*')
            .set('Cache-Control', 'public, max-age=30')
            .set('Content-Location', 'http://localhost:3000/asdf')
            .set('Location', 'http://localhost:3000/asdf')
            .status(201)
            .send(msg)
    })
    .set('etag', false)
    .disable('x-powered-by')
    .listen(3000, () => {
        console.log('Example app listening on port 3000!')
    })

এবং নিম্নলিখিত উদাহরণ ওয়েব পৃষ্ঠা দেওয়া হয়েছে (index.html):

<!DOCTYPE html>
<html>

<head>
    <script>
        async function getRequest() {
            const response = await fetch('http://localhost:3000/asdf')
            const text = await response.text()
            alert(text)
        }
        async function postRequest(message) {
            const response = await fetch(
                'http://localhost:3000/asdf',
                {
                    method: 'post',
                    body: { message },
                }
            )
            const text = await response.text()
            alert(text)
        }
    </script>
</head>

<body>
    <button onclick="getRequest()">Trigger GET request</button>
    <br />
    <button onclick="postRequest('trigger1')">Trigger POST request (body 1)</button>
    <br />
    <button onclick="postRequest('trigger2')">Trigger POST request (body 2)</button>
</body>

</html>

নোডজেএস, এক্সপ্রেস ইনস্টল করুন এবং জাভাস্ক্রিপ্ট অ্যাপ্লিকেশন শুরু করুন। আপনার ব্রাউজারে ওয়েব পৃষ্ঠা খুলুন। ব্রাউজারের আচরণটি পরীক্ষা করতে কয়েকটি ভিন্ন পরিস্থিতিতে চেষ্টা করুন:

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

এ থেকে জানা যায়, যদিও আপনি নির্ধারণ করতে পারেন Cache-Controlএবং Content-Locationপ্রতিক্রিয়া হেডার, একটা ব্রাউজারের ক্যাশে একটি HTTP POST অনুরোধ করতে কোনও উপায় নেই।

আমার কি আরএফসি অনুসরণ করতে হবে?

ব্রাউজার আচরণ কনফিগারযোগ্য নয়, তবে আপনি যদি ব্রাউজার না হন তবে আপনি অগত্যা আরএফসি-র বিধি দ্বারা আবদ্ধ নন।

আপনি যদি অ্যাপ্লিকেশন কোড লিখছেন, তবে আপনাকে স্পষ্টভাবে পোষ্ট অনুরোধগুলি (সিউডোকোড) ক্যাশে করা থেকে বিরত করার কিছুই নেই:

if (cache.get('hello')) {
  return cache.get('hello')
} else {
  response = post(url = 'http://somewebsite/hello', request_body = 'world')
  cache.put('hello', response.body)
  return response.body
}

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

আমার কি পোষ্ট অনুরোধগুলি ক্যাশে করা উচিত?

আপনার পোষ্ট অনুরোধটি ক্যাশে করা উচিত কিনা তা প্রসঙ্গে নির্ভর করে।

উদাহরণস্বরূপ, আপনি ইলাস্টিকের অনুসন্ধান বা গ্রাফকিউএল পোস্ট করতে পারেন যেখানে আপনার অন্তর্নিহিত ক্যোয়ারী আদর্শবান ot এই ক্ষেত্রে, ব্যবহারের ক্ষেত্রে নির্ভর করে প্রতিক্রিয়াটিকে ক্যাশে করা কোনও অর্থ হতে পারে বা নাও পারে।

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

GraphQL

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


3

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


পোষ্ট অনুরোধটি প্রতিক্রিয়া পৃষ্ঠাটি তৈরি করতে ব্যবহৃত কোনও ডেটা পরিবর্তিত করবে না, সেক্ষেত্রে প্রতিক্রিয়াটি ক্যাশে করার জন্য এটি বোধগম্য হতে পারে।
ডেভিড জেড

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

6
যদি প্যারামিটার ডেটা খুব দীর্ঘ হয় তবে একটি জিইটি অনুরোধ সমস্ত সার্ভারের সাথে কাজ করবে না, সুতরাং পোস্টের প্রয়োজন হয়, বিশেষত যদি উত্সটি সার্ভারে চালিত হয় যা কোড লেখক কনফিগার করে না doesn't
গোগোভিটশ

@Gogowitsch খুবই সত্য, আপনি একটি 414 ত্রুটি কোড পাতিত করব - stackoverflow.com/a/2891598/792238
সিদ্ধার্থ

-2

ফায়ারফক্স 27.0 সহ এবং httpfox সহ, মে 19, 2014-তে আমি এর একটি লাইন দেখেছি: 00: 03: 58.777 0.488 657 (393) পোস্ট (ক্যাশে) পাঠ্য / এইচটিএমএল https://users.jackiszhp.info/S4UP

স্পষ্টতই, কোনও পোস্ট পদ্ধতির প্রতিক্রিয়া ক্যাশে করা হয় এবং এটি https এও। অবিশ্বাস্য!


-3

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

একটি তুচ্ছ উদাহরণ একটি বার্তা হতে পারে যা পার্শ্ব প্রতিক্রিয়া হিসাবে আপনার চলতি সপ্তাহে 10,000 ডলার প্রদান করে। আপনি "ঠিক আছে, এটি পেরিয়ে গেছে!" পেতে চান না পৃষ্ঠায় ফিরে যা গত সপ্তাহে ক্যাশে হয়েছিল। অন্যান্য, আরও জটিল বাস্তব-জনের ক্ষেত্রে একই রকমের ila


3
আসলেই কোনও উত্তর নয় - পোষ্ট সব ধরণের জিনিসের জন্য ব্যবহৃত হয় এবং কখনও কখনও ক্যাশে প্রতিক্রিয়া জানাতে বৈধ কারণ থাকতে পারে।
আলেক্সি লেভেনকভ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.