অস্বচ্ছ প্রতিক্রিয়ার ক্ষেত্রে কোন সীমাবদ্ধতা প্রযোজ্য?


89

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

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

উত্তর:


127

অস্পষ্ট প্রতিক্রিয়াগুলির শিরোনাম / শরীরে অ্যাক্সেস

অস্বচ্ছ প্রতিক্রিয়া প্রায় অধিকাংশ সহজবোধ্য সীমাবদ্ধতা যে তোমাদের অধিকাংশই থেকে অর্থপূর্ণ তথ্য ফিরে পেতে পারে না হয় বৈশিষ্ট্য এর Responseবর্গ, মত headers, অথবা বিভিন্ন কল পদ্ধতি যে আপ করা Bodyইন্টারফেস, মত json()বা text()। এটি একটি অস্বচ্ছ প্রতিক্রিয়ার ব্ল্যাক-বাক্স প্রকৃতির সাথে মিল রেখে।

কোনও পৃষ্ঠায় সম্পদ হিসাবে অস্পষ্ট প্রতিক্রিয়া ব্যবহার করা

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

  • <script>
  • <link rel="stylesheet">
  • <img>, <video>এবং<audio>
  • <object> এবং <embed>
  • <iframe>

একটি উল্লেখযোগ্য ব্যবহারের ক্ষেত্রে যার জন্য অস্বচ্ছ প্রতিক্রিয়া আছে না বৈধ হয় ফন্ট সম্পদ

সাধারণভাবে, আপনি কোনও পৃষ্ঠায় কোনও বিশেষ ধরণের সংস্থান হিসাবে অস্বচ্ছ প্রতিক্রিয়া ব্যবহার করতে পারেন কিনা তা নির্ধারণের জন্য, প্রাসঙ্গিক বিশদটি যাচাই করুন। উদাহরণস্বরূপ, এইচটিএমএল স্পেসিফিকেশনটি ব্যাখ্যা করেছে যে অ-সিওআরএস ক্রস-অরিজিন (অর্থাৎ অস্বচ্ছ) প্রতিক্রিয়াগুলি <script>উপাদানগুলির জন্য ব্যবহার করা যেতে পারে , যদিও ত্রুটি সম্পর্কিত তথ্য ফাঁস রোধে কিছু সীমাবদ্ধতা রয়েছে।

অস্বচ্ছ প্রতিক্রিয়া এবং ক্যাশে সঞ্চয়স্থান API

এমন একটি "গোটচা" যা বিকাশকারী অস্বচ্ছ প্রতিক্রিয়ার সাথে চালিত হতে পারে সেগুলি ক্যাশে স্টোরেজ এপিআইয়ের সাথে ব্যবহারের সাথে জড়িত । পটভূমি তথ্য দুটি টুকরো প্রাসঙ্গিক:

  • statusএকটি অস্বচ্ছ প্রতিক্রিয়া সম্পত্তি সবসময় সেট0 মূল অনুরোধ সফল হয়েছে বা ব্যর্থ কিনা নির্বিশেষে।
  • ক্যাশে স্টোরেজ এপিআই add()/ এর addAll()পদ্ধতিগুলি উভয়ই প্রত্যাখ্যান করবে যদি কোনও অনুরোধের ফলে প্রাপ্ত প্রতিক্রিয়াগুলির একটি স্থিতির কোড থাকে যা 2XX সীমার মধ্যে না থাকে ।

এই দুটি পয়েন্ট থেকে এটি অনুসরণ করে যে অনুরোধটি যদি add()/ addAll()কলটির অংশ হিসাবে একটি অস্বচ্ছ প্রতিক্রিয়ার ফলাফল হিসাবে সম্পাদিত হয় তবে এটি ক্যাশে যুক্ত হতে ব্যর্থ হবে।

আপনি স্পষ্টভাবে একটি সম্পাদন করে fetch()এবং তারপরে put()অস্বচ্ছ প্রতিক্রিয়ার সাথে পদ্ধতিটি কল করে এটি ঘিরে কাজ করতে পারেন । এটি করে আপনি কার্যকরভাবে ঝুঁকিটি বেছে নিচ্ছেন যে প্রতিক্রিয়াটি আপনি যা করছেন সেটি আপনার সার্ভার দ্বারা ফিরে আসা কোনও ত্রুটি হতে পারে।

const request = new Request('https://third-party-no-cors.com/', {mode: 'no-cors'});
// Assume `cache` is an open instance of the Cache class.
fetch(request).then(response => cache.put(request, response));

অস্বচ্ছ প্রতিক্রিয়া এবং নেভিগেটর.স্টোরেজ এপিআই

ক্রস-ডোমেন তথ্যের ফাঁস এড়াতে, স্টোর কোটার সীমা গণনা করার জন্য ব্যবহৃত অস্বচ্ছ প্রতিক্রিয়ার আকারে (যেমন একটি QuotaExceededব্যতিক্রম ছুঁড়েছে কিনা ) এবং navigator.storageএপিআই দ্বারা প্রতিবেদন করা উল্লেখযোগ্য প্যাডিং রয়েছে ।

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


4
এটি আসলে কোনও ডিভাইসের শারীরিক সঞ্চয়স্থানে পরিমাণের পরিমাণ নেয় না। এটি কেবলমাত্র মান যা কোটার গণনায় অবদান রাখে।
জেফ পোজনিক 14

4
এমনকি আপনার উত্তরটি এখানে ওয়ার্কবক্স গাইডে উল্লেখ করা হয়েছে: developers.google.com/web/tools/workbox/guides/…
ডিমা স্লুইন

14
সত্য, তবে আমি সেই ওয়ার্কবক্স গাইডটি লিখেছিলাম :-)
জেফ পোজনিক

4
এটি কি এই জাতীয় ক্যাশে একটি খারাপ ডিজাইনের সাথে মিল রেখে কোনও চিত্র সিডিএন ব্যবহার করে? (বরাদ্দ স্থান নষ্ট করা) আমাদের মূল ডোমেন থেকে পুনরুদ্ধার করা কোনও ফাইল ক্যাশে করা এবং এটি সিডিএন লিঙ্ক (কী) দিয়ে প্রকাশ করা সম্ভব? উদাহরণস্বরূপ, আমার কাছে একটি নেটওয়ার্ক অনুরোধ যেতে পারে cdn.x.com/test.jpgএবং ক্যাশে অনুরোধগুলি মূল ডোমেনে যায় www.x.com/test.jpg
সিগ্লেসেট

4
আমি এই সমস্যাটির আশেপাশে একটি কৌশল খুঁজে পেয়েছি, যদি এটি একটি শালীন সমাধান হয় তবে আমার কোনও ধারণা নেই তবে আমি মূলত আমার পরিষেবা কর্মীকে এটি সিডিএন বলে ভান করি। আমি ক্যাশে ডোমেন সম্পর্কিত আপাতত ইউআরএল যুক্ত করি (উদাঃ, /test.jpgতারপরে প্রতিটি আনার অনুরোধের জন্য cdn.x.com/test.jpgআমি উত্স ডোমেনের সাথে ইউআরএল সংশোধন করতে (ইউআরএল হয়ে যায় www.x.com/test.jpg), আমি এই জাতীয় কিছু ব্যবহার করি: const cacheUrl = (url.hostname == 'cdn.x.com')? new URL(event.target.location.origin + url.pathname): url;আমি তারপরে এই নতুন ইউআরএল দিয়ে ক্যাশে অনুরোধ করছি caches.match(cacheUrl), যা মনে হয় ভাল কাজ করার জন্য। এই পদ্ধতির বিষয়ে
যাইহোক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.