কিভাবে nginx ব্যবহার করে স্বাক্ষরিত HTTP এক্সচেঞ্জ (SXG) বিতরণ করবেন

কিভাবে nginx ব্যবহার করে SXG ফাইল পাবেন এবং পরিবেশন করবেন এবং সাবরিসোর্স প্রিফেচিং এর চ্যালেঞ্জ।

হিরোকি কুমাজাকি
Hiroki Kumazaki

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

ক্রস ব্রাউজার সমর্থন

Chrome বর্তমানে একমাত্র ব্রাউজার যা SXG সমর্থন করে। আরো আপ-টু-ডেট তথ্যের জন্য Origin-Signed HTTP এক্সচেঞ্জ- এর Consensus & Standardization বিভাগটি দেখুন।

SXG ফাইল পান

আপনার Accept রিকোয়েস্ট হেডারে উল্লেখ করুন যে আপনি সার্ভারকে অনুরোধের সাথে একটি SXG ফাইল ফেরত দিতে চান:

Accept: application/signed-exchange;v=b3,*/*;q=0.8

এই নির্দেশিকাটি অনুমান করে যে আপনি আপনার SXG ফাইলগুলি /var/www/sxg এ রেখেছেন।

একটি সাধারণ SXG ফাইল পরিবেশন করুন

একটি একক SXG ফাইল বিতরণ করতে নিম্নলিখিত শিরোনামগুলি সংযুক্ত করুন:

Content-Type: application/signed-exchange;v=v3
X-Content-Type-Options: nosniff

nginx কনফিগার করুন:

http {
    ...
    types {
        application/signed-exchange;v=b3  sxg;
    }
    add_header X-Content-Type-Options nosniff;

    location / {
        more_set_headers "Content-Type: application/signed-exchange;v=b3";
        alias /var/www/sxg/;
        try_files $uri.sxg $uri =404;
        autoindex off;
    }
    ...

nginx এ নতুন কনফিগারেশন লোড করুন:

sudo systemctl restart nginx.service

nginx SXG ফাইল পরিবেশন করা শুরু করবে। যখন Chrome আপনার সার্ভার অ্যাক্সেস করে, তখন আসল সামগ্রী প্রকাশকের ঠিকানা বারে উপস্থিত হবে!

সাবরিসোর্স প্রিফেচ করুন

বেশিরভাগ ওয়েব পৃষ্ঠায় একাধিক সাবরিসোর্স থাকে, যেমন CSS, JavaScript, ফন্ট এবং ছবি। বিষয়বস্তু নির্মাতার ব্যক্তিগত কী ছাড়া SXG-এর বিষয়বস্তু পরিবর্তন করা যাবে না। ব্রাউজার সাবরিসোর্স সমাধান করার চেষ্টা করলে এটি সমস্যার সৃষ্টি করে।

উদাহরণস্বরূপ, ধরুন https://website.test/index.html থেকে index.html.sxg https://website.test/app.js এর একটি লিঙ্ক রয়েছে। যখন একজন ব্যবহারকারীর ব্রাউজার https://distributor.test/example.com/index.html.sxg থেকে SXG ফাইলটি পায়, তখন এটি https://website.test/app.js এর লিঙ্ক খুঁজে পাবে। ব্রাউজারটি সরাসরি প্রকৃত অ্যাক্সেসে https://website.test/app.js আনতে পারে, তবে গোপনীয়তা রক্ষা করার জন্য এটি প্রিলোড পর্যায়ে করা উচিত নয়। যদি রিসোর্সটি প্রিলোড পর্বের সময় আনা হয়, তাহলে বিষয়বস্তু স্রষ্টার ( website.test ) জন্য কোন বিষয়বস্তু পরিবেশক ( distributor.test ) রিসোর্সটির জন্য অনুরোধ করছে তা সনাক্ত করতে সক্ষম হবে৷

distributor.test/index.html.sxg-এ app.js-এর লিঙ্ক website.test/app.js-এর দিকে নির্দেশ করে।

যদি ডিস্ট্রিবিউটর তাদের নিজস্ব পরিষেবা থেকে app.js.sxg পরিবেশন করতে চায় এবং https://website.test/app.js সেই সাবরিসোর্সের ডিস্ট্রিবিউটরের সংস্করণ হিসাবে পরিবর্তন করার চেষ্টা করে (যেমন https://distributor.test/website.test/app.js.sxg ), এটি একটি স্বাক্ষরের অমিল সৃষ্টি করবে এবং SXG কে অবৈধ করে দেবে৷

distributor.test/index.html.sxg-এ app.js-এর রেফারেন্স distributor.test/app.js-এর সাথে লিঙ্ক করার প্রয়াস একটি স্বাক্ষরের অমিল ঘটায়।

এই সমস্যার সমাধান করার জন্য, এখন Chrome এ একটি পরীক্ষামূলক SXG সাবরিসোর্স প্রিফেচিং বৈশিষ্ট্য রয়েছে৷ আপনি এটি সক্রিয় করতে পারেন: about://flags/#enable-sxg-subresource-prefetching । সাবরিসোর্স প্রিফেচিং ব্যবহার করতে নিম্নলিখিত শর্তগুলি অবশ্যই পূরণ করতে হবে:

  • প্রকাশককে অবশ্যই SXG-তে একটি প্রতিক্রিয়া শিরোনাম এন্ট্রি এম্বেড করতে হবে, যেমন: link: <https://website.test/app.js>;rel="preload";as="script",<https://website.test/app.js>;rel="allowed-alt-sxg";header-integrity="sha256-h6GuCtTXe2nITIHHpJM+xCxcKrYDpOFcIXjihE4asxk=" । এটি সাবরিসোর্স নির্দিষ্ট করে যা SXG এর নির্দিষ্ট ইন্টিগ্রিটি হ্যাশের সাথে প্রতিস্থাপিত হতে পারে।
  • SXG পরিবেশন করার সময় পরিবেশককে অবশ্যই একটি প্রতিক্রিয়া শিরোনাম সংযুক্ত করতে হবে, যেমন: link: <https://distributor.test/website.test/app.js.sxg>;rel="alternate";type="application/signed-exchange;v=b3";anchor="https://website.test/app.js" । এটি app.js এর পথ নির্দিষ্ট করে এবং সাবরিসোর্সের সাথে মিলে যায়।

নোঙ্গর

প্রথমটি তুলনামূলকভাবে সহজ কারণ nginx-sxg-module অখণ্ডতা হ্যাশ গণনা করতে পারে এবং আপস্ট্রিম প্রতিক্রিয়া থেকে লিঙ্ক শিরোনামে এম্বেড করতে পারে। কিন্তু দ্বিতীয়টি আরও কঠিন কারণ বিষয়বস্তু পরিবেশককে অবশ্যই SXG-এর নির্দিষ্ট উপ-সম্পদ সম্পর্কে সচেতন হতে হবে।

যদি https://website.test/app.js ব্যতীত অন্য কোন উপসম্পদ না থাকে, তাহলে আপনার nginx কনফিগারেশনে আপনাকে যা যোগ করতে হবে তা হল:

add_header link <https://distributor.test/website.test/app.js.sxg>;rel="alter...

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

মতামত পাঠানো

Chromium ইঞ্জিনিয়াররা webpackage-dev@chromium.org- এ SXG বিতরণের বিষয়ে আপনার প্রতিক্রিয়া শুনতে আগ্রহী। এছাড়াও আপনি বিশেষ আলোচনায় যোগ দিতে পারেন, বা দলকে একটি বাগ রিপোর্ট করতে পারেন ৷ আপনার প্রতিক্রিয়া প্রমিতকরণ প্রক্রিয়াকে ব্যাপকভাবে সাহায্য করবে এবং বাস্তবায়নের সমস্যাগুলি সমাধানে সহায়তা করবে। ধন্যবাদ!