এটা বলা ন্যায্য যে SharedArrayBuffer
ওয়েবে কিছুটা রুক্ষ অবতরণ করেছে, কিন্তু জিনিসগুলি স্থির হচ্ছে। আপনার যা জানা দরকার তা এখানে:
সংক্ষেপে
-
SharedArrayBuffer
বর্তমানে Firefox 79+ এ সমর্থিত, এবং Android Chrome 88-এ পৌঁছাবে। তবে, এটি শুধুমাত্র ক্রস-অরিজিন আইসোলেটেড পৃষ্ঠাগুলিতে উপলব্ধ। -
SharedArrayBuffer
বর্তমানে ডেস্কটপ ক্রোমে উপলব্ধ, কিন্তু Chrome 92 থেকে এটি ক্রস-অরিজিন বিচ্ছিন্ন পৃষ্ঠাগুলিতে সীমাবদ্ধ থাকবে৷ আপনি যদি মনে না করেন যে আপনি সময়ে এই পরিবর্তনটি করতে পারবেন, তাহলে অন্তত Chrome 113 পর্যন্ত বর্তমান আচরণ ধরে রাখতে আপনি একটি অরিজিন ট্রায়ালের জন্য নিবন্ধন করতে পারেন। - আপনি যদি
SharedArrayBuffer
ব্যবহার চালিয়ে যাওয়ার জন্য ক্রস-অরিজিন আইসোলেশন সক্ষম করতে চান তাহলে আপনার ওয়েবসাইটের অন্যান্য ক্রস-অরিজিন উপাদানগুলির উপর প্রভাব ফেলবে, যেমন বিজ্ঞাপন প্লেসমেন্ট।SharedArrayBuffer
প্রভাব এবং নির্দেশিকা বোঝার জন্য আপনার তৃতীয় পক্ষের সংস্থানগুলির দ্বারা ব্যবহৃত হয় কিনা তা পরীক্ষা করুন৷
ক্রস-অরিজিন আইসোলেশন ওভারভিউ
আপনি এই শিরোনামগুলির সাথে পৃষ্ঠাটি পরিবেশন করে একটি পৃষ্ঠা ক্রস-অরিজিনকে বিচ্ছিন্ন করতে পারেন:
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin
একবার আপনি এটি করলে, আপনার পৃষ্ঠা ক্রস-অরিজিন বিষয়বস্তু লোড করতে সক্ষম হবে না যদি না সংস্থানটি Cross-Origin-Resource-Policy
হেডার বা CORS হেডার ( Access-Control-Allow-*
এবং আরও অনেক কিছু) এর মাধ্যমে এটিকে অনুমতি দেয়।
এছাড়াও একটি রিপোর্টিং API রয়েছে, যাতে আপনি Cross-Origin-Embedder-Policy
এবং Cross-Origin-Opener-Policy
ফলে ব্যর্থ হওয়া অনুরোধগুলির ডেটা সংগ্রহ করতে পারেন।
আপনি যদি মনে না করেন যে আপনি Chrome 92-এর জন্য এই পরিবর্তনগুলি সময়মতো করতে পারবেন, তাহলে আপনি অন্তত Chrome 113 পর্যন্ত বর্তমান ডেস্কটপ Chrome আচরণ বজায় রাখতে একটি অরিজিন ট্রায়ালের জন্য নিবন্ধন করতে পারেন।
ক্রস-অরিজিন আইসোলেশন সম্পর্কে আরও নির্দেশিকা এবং তথ্যের জন্য এই পৃষ্ঠার নীচে আরও পড়ার বিভাগটি দেখুন।
কিভাবে আমরা এখানে পেতে?
SharedArrayBuffer
Chrome 60-এ পৌঁছেছে (এটি জুলাই 2017, আপনারা যারা Chrome সংস্করণের পরিবর্তে তারিখে সময়ের কথা ভাবেন) এবং সবকিছু দুর্দান্ত ছিল। ৬ মাসের জন্য।
2018 সালের জানুয়ারিতে কিছু জনপ্রিয় CPU-তে একটি দুর্বলতা প্রকাশ করা হয়েছিল। সম্পূর্ণ বিশদ বিবরণের জন্য ঘোষণাটি দেখুন, তবে এর অর্থ হল যে কোডটি মেমরি পড়ার জন্য উচ্চ-রেজোলিউশন টাইমার ব্যবহার করতে পারে যেটিতে এটির অ্যাক্সেস থাকা উচিত নয়।
এটি আমাদের ব্রাউজার বিক্রেতাদের জন্য একটি সমস্যা ছিল, কারণ আমরা সাইটগুলিকে JavaScript এবং WASM আকারে কোড চালানোর অনুমতি দিতে চাই, কিন্তু এই কোডটি যে মেমরিটি অ্যাক্সেস করতে পারে তা কঠোরভাবে নিয়ন্ত্রণ করে৷ আপনি যদি আমার ওয়েবসাইটে আসেন, আমি আপনার খোলা ইন্টারনেট ব্যাঙ্কিং সাইট থেকে কিছু পড়তে সক্ষম হবে না। আসলে, আমার জানা উচিত নয় যে আপনার ইন্টারনেট ব্যাঙ্কিং সাইট খোলা আছে। এগুলো ওয়েব নিরাপত্তার মৌলিক বিষয়।
এটি প্রশমিত করার জন্য, আমরা আমাদের উচ্চ-রেজোলিউশন টাইমারগুলির রেজোলিউশন যেমন performance.now()
কমিয়েছি। যাইহোক, আপনি একজন ওয়ার্কারের একটি টাইট লুপে মেমরি পরিবর্তন করে এবং অন্য থ্রেডে এটি পড়ার মাধ্যমে SharedArrayBuffer
ব্যবহার করে একটি উচ্চ-রেজোলিউশন টাইমার তৈরি করতে পারেন। ভাল উদ্দেশ্যমূলক কোডকে ব্যাপকভাবে প্রভাবিত না করে এটি কার্যকরভাবে প্রশমিত করা যায়নি, তাই SharedArrayBuffer
সম্পূর্ণরূপে অক্ষম করা হয়েছিল।
একটি সাধারণ প্রশমন হল একটি ওয়েবপৃষ্ঠার সিস্টেম প্রক্রিয়া অন্য কোথাও থেকে সংবেদনশীল ডেটা ধারণ করে না তা নিশ্চিত করা। ক্রোম শুরু থেকেই একটি মাল্টি-প্রসেস আর্কিটেকচারে বিনিয়োগ করেছিল ( কমিক মনে রাখবেন? ), কিন্তু এখনও এমন কিছু ঘটনা ছিল যেখানে একাধিক সাইট থেকে ডেটা একই প্রক্রিয়ায় শেষ হতে পারে:
<iframe src="https://your-bank.example/balance.json"></iframe>
<script src="https://your-bank.example/balance.json"></script>
<link rel="stylesheet" href="https://your-bank.example/balance.json" />
<img src="https://your-bank.example/balance.json" />
<video src="https://your-bank.example/balance.json"></video>
<!-- …and more… -->
এই APIগুলির একটি 'উত্তরাধিকার' আচরণ রয়েছে যা অন্য উত্স থেকে অপ্ট-ইন ছাড়াই অন্যান্য উত্স থেকে সামগ্রী ব্যবহার করার অনুমতি দেয়৷ এই অনুরোধগুলি অন্য উত্সের কুকিজ দিয়ে করা হয়, তাই এটি একটি সম্পূর্ণ 'লগ ইন' অনুরোধ। আজকাল, নতুন API-এর জন্য CORS ব্যবহার করে অপ্ট-ইন করতে অন্য অরিজিন প্রয়োজন।
আমরা এই লিগ্যাসি APIগুলিকে ওয়েবপৃষ্ঠার প্রক্রিয়ায় প্রবেশ করা থেকে বাধা দিয়ে কাজ করেছি যদি এটি 'ভুল' মনে হয়, এবং এটিকে ক্রস-অরিজিন রিড ব্লকিং বলে। সুতরাং, উপরের ক্ষেত্রে, আমরা JSON-কে প্রক্রিয়াটিতে প্রবেশ করার অনুমতি দেব না, কারণ এটি সেই APIগুলির কোনোটির জন্য বৈধ বিন্যাস নয়। অর্থাৎ iframes ছাড়া। আইফ্রেমের জন্য আমরা বিষয়বস্তুকে একটি ভিন্ন প্রক্রিয়ায় রাখি।
এইসব প্রশমনের জায়গায়, আমরা Chrome 68 (জুলাই 2018) এ SharedArrayBuffer
আবার চালু করেছি, কিন্তু শুধুমাত্র ডেস্কটপে। অতিরিক্ত প্রক্রিয়ার প্রয়োজনীয়তার মানে আমরা মোবাইল ডিভাইসে একই কাজ করতে পারি না। এটাও উল্লেখ করা হয়েছে যে Chrome-এর সমাধানটি অসম্পূর্ণ ছিল, কারণ আমরা শুধুমাত্র 'ভুল' ডেটা ফর্ম্যাটগুলিকে ব্লক করছিলাম, যেখানে এটি সম্ভব (যদিও অস্বাভাবিক) যে অনুমানযোগ্য URL-এ বৈধ CSS/JS/ছবিগুলিতে ব্যক্তিগত ডেটা থাকতে পারে৷
ওয়েব স্ট্যান্ডার্ডের লোকেরা আরও সম্পূর্ণ ক্রস-ব্রাউজার সমাধান নিয়ে আসতে একত্রিত হয়েছে। সমাধানটি ছিল পৃষ্ঠাগুলিকে বলার একটি উপায় দেওয়া "আমি এতদ্বারা তাদের অপ্ট-ইন না করে এই প্রক্রিয়াতে অন্য-অরিজিন সামগ্রী আনার আমার ক্ষমতা পরিত্যাগ করছি"। এই ঘোষণাটি পৃষ্ঠার সাথে পরিবেশিত COOP এবং COEP শিরোনামের মাধ্যমে করা হয়। ব্রাউজার এটি প্রয়োগ করে, এবং বিনিময়ে পৃষ্ঠাটি SharedArrayBuffer
এবং অনুরূপ ক্ষমতা সহ অন্যান্য APIগুলিতে অ্যাক্সেস লাভ করে। অন্যান্য উত্সগুলি Cross-Origin-Resource-Policy
বা CORS-এর মাধ্যমে সামগ্রী এম্বেডিং-এ অপ্ট-ইন করতে পারে৷
ফায়ারফক্স প্রথম সংস্করণ 79 (জুলাই 2020) এ এই সীমাবদ্ধতার সাথে SharedArrayBuffer
পাঠায়।
তারপর, 2021 সালের জানুয়ারিতে, আমি এই নিবন্ধটি লিখেছিলাম, এবং আপনি এটি পড়েছেন। হ্যালো।
এবং যে আমরা এখন যেখানে. ক্রস-অরিজিন আইসোলেটেড পৃষ্ঠাগুলির জন্য Chrome 88 SharedArrayBuffer
Android-এ ফিরিয়ে আনে এবং Chrome 92 ডেস্কটপে একই প্রয়োজনীয়তা নিয়ে আসে, উভয়ই ধারাবাহিকতার জন্য এবং সম্পূর্ণ ক্রস-অরিজিন বিচ্ছিন্নতা অর্জন করতে।
ডেস্কটপ ক্রোম পরিবর্তন বিলম্বিত
এটি একটি 'অরিজিন ট্রায়াল' আকারে একটি অস্থায়ী ব্যতিক্রম যা লোকেদের ক্রস-অরিজিন আইসোলেটেড পৃষ্ঠাগুলি বাস্তবায়নের জন্য আরও সময় দেয়। এটি পৃষ্ঠাটিকে ক্রস-অরিজিন বিচ্ছিন্ন করার প্রয়োজন ছাড়াই SharedArrayBuffer
সক্ষম করে৷ ব্যতিক্রমটি Chrome 113-এ মেয়াদ শেষ হয়ে গেছে এবং ব্যতিক্রমটি শুধুমাত্র ডেস্কটপ ক্রোমে প্রযোজ্য।
- আপনার মূলের জন্য একটি টোকেন অনুরোধ করুন .
- আপনার পৃষ্ঠাগুলিতে টোকেন যোগ করুন। এটি করার দুটি উপায় আছে:
- প্রতিটি পৃষ্ঠার মাথায় একটি
origin-trial
<meta>
ট্যাগ যোগ করুন। উদাহরণস্বরূপ, এটি এমন কিছু দেখতে পারে:
<meta http-equiv="origin-trial" content="TOKEN_GOES_HERE">
- আপনি যদি আপনার সার্ভার কনফিগার করতে পারেন, তাহলে আপনি একটি
Origin-Trial
HTTP হেডার ব্যবহার করে টোকেন যোগ করতে পারেন। ফলস্বরূপ প্রতিক্রিয়া শিরোনামটি এমন কিছু হওয়া উচিত:
Origin-Trial: TOKEN_GOES_HERE
- প্রতিটি পৃষ্ঠার মাথায় একটি
আরও পড়া
- ক্রস-অরিজিন আইসোলেশন সক্ষম করার জন্য একটি গাইড
- কিভাবে ক্রস-অরিজিন আপনার পৃষ্ঠাগুলিকে আলাদা করবেন
- কেন ক্রস-অরিজিন বিচ্ছিন্নতা প্রয়োজন
আনস্প্ল্যাশে ড্যানিয়েল গ্রেগোয়ারের ব্যানার ছবি