پروتکل Hypertext Transfer یا HTTP را می‌توان ستون فقرات بسیاری از کارکردهای اینترنت به حساب آورد. درحالی که پروتکل HTTP/1.1 برای مدتی طولانی در دسترس و استاندارد بوده، این روزها خیلی از سرویس‌دهندگان وب به سراغ پروتکل HTTP/2 رفته‌اند تا از مزایایی مانند سرعت بالاتر و پرفورمنس بهتر برخوردار شوند. HTTP/2 را می‌توان یک بازنگری عمیق در شبکه HTTP توصیف کرد که بسیاری از محدودیت‌های HTTP/1.1 را کنار می‌زند و بهره‌وری ارتباطات وب را بالا می‌برد. در این مطلب می‌گوییم HTTP2 چیست و چطور کار می‌کند و در قیاس با HTTP/1.1 چه بهبودهایی به همراه می‌آورد. 

HTTP2 چیست ؟

در ساده‌ترین حالت، HTTP/2 نسخه دوم پروتکل HTTP است. این پروتکل با هدف افزایش سرعت و سادگی اپلیکیشن‌ها طراحی شده و بسیاری از نقاط ضعف ورژن‌های ابتدایی HTTP را کنار می‌زند. مهم‌ترین اهداف HTTP/2 را در ادامه آورده‌ایم:

بیشتر بخوانید: پروتکل https چیست و چه تفاوتی با HTTP دارد؟

HTTP2 چیست

دلایل اهمیت HTTP2 چیست ؟

پروتکل HTTP (یا Hypertext Transfer Protocol) به بخش اعظمی از وب امروزی قوت می‌رساند. زمانی که صفحات وب را باز می‌کنید، مرورگر شما یک درخواست HTTP به وب سرور (وب سرور چیست؟) می‌فرستد و محتوا صفحه را به عنوان پاسخ دریافت می‌کند.

باید توجه داشت که HTTP نوعی پروتکل کلاینت-سرور است. این یعنی درخواست‌ها از یک نقطه (مثلا مرورگر شما که نقش کلاینت را ایفا می‌کند) ارسال می‌شوند. پروتکل HTTP سپس این درخواست را به سرور انتقال می‌دهد و به سرور می‌گوید که دقیقا چه نیازی دارد. برای بارگذاری صحیح صفحه، سرور نیاز به درخواستی برای صفحه HTML (مخفف Hypertext Markup Language)، چند تصویر و احتمالا مقداری کد جاوا اسکریپت دارد. بعد از دریافت درخواست‌ها، داده مورد نیاز فراخوانی شده و به عنوان پاسخ به مرورگر شما ارسال می‌شود.

از HTTP در نقاط دیگری نیز استفاده می‌شود که لزوما به چشم کاربران عادی نخواهند آمد. زمانی که پستی جدید در شبکه‌های اجتماعی منتشر می‌کنید، برای دوستان خود پیام می‌فرستید و یا اپلیکیشن مورد علاقه خود را باز می‌کنید، به احتمال فراوان یک درخواست HTTP در پس‌زمینه ارسال شده است. این درخواست‌ها به دست آن دسته از سرویس‌های اینترنتی می‌رسند که داده‌هایی مانند پست‌های شبکه‌های اجتماعی، پیام‌ها و اطلاعات اپلیکیشن‌های شما را در خود ذخیره کرده‌اند. 

یکی دیگر از کاربردهای HTTP، استریم داده است. زمانی که با داده‌های خرد مانند صفحات HTML یا جاوا اسکریپت سر و کار داریم، پاسخ کامل به صورت مستقیم ارسال می‌شود. اما وقتی نوبت به فایل‌های حجیم‌تر می‌رسد، نیاز به استریم داده به کلاینت خواهیم داشت. در این اوقات، اتصال HTTP برای مدتی طولانی‌تر برقرار باقی می‌ماند و داده در قالب بلوک‌های سبک‌تر ارسال می‌شوند. 

در مجموع باید گفت که بدون HTTP (و حالا HTTP/2)، وب جهان‌گستر خیلی ساده از کار خواهد افتاد. 

مهم‌ترین ویژگی‌ها و مزایای HTTP/2

از جمله ویژگی‌های کلیدی پروتکل HTTP/2 می‌شود به این موارد اشاره کرد:

برجسته‌ترین تفاوت‌ها میان HTTP/1.1 و HTTP2 چیست ؟

همان‌طور که پیش‌تر اشاره کردیم، HTTP/2 با هدف کنار زدن بسیاری از محدودیت‌ها و نواقص HTTP/1.1 طراحی شده است. در این بخش می‌بینیم که برجسته‌ترین تفاوت‌هایی که HTTP/2 با خود به همراه می‌آورد چیست. 

فشرده‌سازی

پروتکل HTTP/2 از قابلیتی داخلی برای فشرده‌سازی هدرهای درخواستی برخوردار شده است. وب اپلیکیشن‌های مدرن معمولا با گستره وسیعی از هدرهای مختلف – مثلا هدرهای اعتبارسنجی (Authorization)، دستورالعمل‌های کش کنترل و اطلاعات کلاینت – سازگاری دارند.

اگرچه فشرده‌سازی این هدرها ممکن است تفاوت چندانی در هر درخواست واحد ایجاد نکند، اپلیکیشن‌های پرترافیک امروزی نیاز به تبادل انبوهی داده دارند. این یعنی بهره‌وری در مقیاس کلان افزایش می‌یابد. برای مقایسه باید گفت HTTP/1.1 هدرها را به صورت پیش‌فرض فشرده‌سازی نمی‌کند. 

پروتکل HTTP/2

پرفورمنس

پروتکل HTTP/2 از جنبه‌های گوناگون، پرفورمنس HTTP/1.1 را بهبود می‌بخشد:

ساختار دودویی به جای متنی

برخلاف HTTP/1.1 که ساختار متنی ساده دارد، HTTP/2 به شکل دودویی یا باینری پیاده‌سازی شده است. در عمل یعنی شاهد پیاده‌سازی ساده‌تر فرمان‌هایی هستیم که پیش‌تر به خاطر فضای خالی در فرمت متنی، شکلی پیچیده پیدا می‌کردند. مرورگرهایی که از HTTP/2 پشتیبانی می‌کنند، پیش از ارسال فرمان‌ها در شبکه، آن‌ها را از حالت متنی به حالت دودویی تغییر می‌دهند. 

امنیت

پروتکل HTTP/2 چند بهبود امنیتی مهم نیز با خود به همراه می‌آورد:

تمامی این بهبودها باعث می‌شوند HTTP/2 سریع‌تر و امن‌تر از نسخه‌های قبلی ظاهر شود. 

مدل‌های ارائه (Delivery Models)

درحالی که پروتکل HTTP/1.1 پاسخ‌ها را براساس یک درخواست واحد ارائه می‌کند، HTTP/2 از قابلیت‌های مولتی‌پلکسینگ و Server Push برای افزایش پرفورمنس ارائه کمک می‌گیرد. 

سرریز بافر (Buffer Overflow)

«بافر» به فضایی گفته می‌شود که کلاینت و سرور از آن برای نگهداری درخواست‌هایی که هنوز پردازش نشده‌اند، استفاده می‌کنند. در HTTP/1.1، کنترل جریان (Flow Control) که برای مدیریت فضای بافر در دسترس استفاده می‌شود، در لایه Transport پیاده شده است. در HTTP/2، کلاینت و سرور می‌توانند کنترل‌های جریان خاص خود را برای برقراری ارتباط با فضای بافر در دسترس داشته باشند. 

مولتی‌پلکسینگ (Multiplexing)

پروتکل HTTP/2 از مولتی‌پلکسینگ کامل برای درخواست‌ و پاسخ پشتیبانی می‌کند. در عمل، این یعنی هر اتصالی که از مرورگر شما به وب سرور برقرار شده می‌تواند برای ارسال چندین درخواست و دریافت چندین پاسخ استفاده شود. در نتیجه نیاز به برقراری اتصالی جدید برای هر درخواست از بین می‌رود. HTTP/1.1 از مولتی‌پلکسینگ پشتیبانی نمی‌کند. 

اتصالات رمز‌نگاری‌شده سریع‌تر

HTTP/2 از افزونه جدید ALPN بهره‌مند شده که اتصالات رمزنگاری‌شده سریع‌تر را ممکن می‌کند، چرا که پروتکل اپلیکیشن حین برقراری نخستین ارتباط تعیین می‌شود. هنگام کار با HTTP/1.1 که از ALPN بهره‌مند نیست، دست‌دهی رمزنگاری (Encryption Handshake) نیاز به جابه‌جایی هرچه بیشتر داده خواهد داشت.

معایب HTTP2 چیست ؟

اگرچه HTTP/2 بهبودهای فراوان نسبت به HTTP/1.1 پدید آورده، همچنان محدودیت‌های خاص خود را نیز دارد. برای درک عمیق‌تر HTTP/2 لازم است این معایب را بشناسیم. ناگفته نماند که بسیاری از این معایب در HTTP/3 برطرف شده‌اند. 

HTTP2 چیست

نه‌چندان مدرن یا سریع

پروتکل HTTP/2 باید همواره با HTTP/1.1 سازگار باقی بماند و این موضوع، میزان مدرن‌سازی آن را تحت تاثیر قرار داده است. مهم‌ترین ایرادات در پرفورمنس HTTP/2 را در ادامه لیست کرده‌ایم:

در مجموع باید گفت اکثر مختصصان انتظار داشتند شاهد قابلیت‌های جدید بیشتری در HTTP/2 باشیم، اما بسیاری از این انتظارات برآورده نشد. دلیل ساده‌ای هم برای این اتفاق وجود دارد: HTTP/2 باید با نسخه قدیمی‌تر HTTP/1.1 سازگار باقی می‌ماند. ناگفته نماند که برخی قابلیت‌های جدید HTTP/2 مانند فشرده‌سازی هدرهای صفحه نیز در برابر حملات BREACH و CRIME آسیب‌پذیر ظاهر می‌شوند. 

عدم ضرورت رمزنگاری

سال‌ها پیش، رمزنگاری داده عمدتا به تراکنش‌های مالی محدود می‌شد. اما با افزایش شمار حملات سایبری و همین‌طور نظارت دولتی، محافظت از حریم شخصی کاربران و کسب‌وکارها از همیشه مهم‌تر شده است. درحالی که رمزنگاری می‌تواند به محافظت در برابر این نوع از تهدیدها کمک کند، عدم توافق نظر در تیم توسعه HTTP/2 باعث شد که تصمیم به عدم تغییر سیستم رمزنگاری نسبت به HTTP/1.1 بگیرند.

این یعنی صاحبان وب‌سایت‌ها همچنان ممکن است به سراغ تدابیر امنیتی سطح پایین‌تر بروند و کاربران را در معرض خطر قرار دهند. البته سازندگان مرورگرهای وب می‌توانند این مشکل را به نوعی حل کنند. در حال حاضر اکثر مرورگرها تنها زمانی HTTP/2 را فعال می‌کنند که پروتکل‌های SSL/TLS در دسترس باشند. در HTTP/3 نیز رمزنگاری در سطح پروتکل اجباری نیست، اما از آن‌جا که از پروتکل QUIC بهره می‌برد، انبوهی قابلیت امنیتی سختگیرانه‌تر دارد که در گذر زمان، رمزنگاری را به رویکردی استاندارد تبدیل می‌کنند. 

بیشتر بخوانید: ssl چیست و چه کاربردی دارد؟ + انواع گواهی SSL

امنیت کوکی‌ها

پروتکل HTTP/2 آسیب‌پذیری‌های ذاتی کوکی‌ها (کوکی چیست) را از بین نبرده است. برای مثال می‌شود به آسیب‌پذیری کوکی‌ها در برابر حملات Cross-Site Scripting (یا XSS) اشاره کرد. به خاطر نیاز به سازگاری با نسخه‌های قبلی، این مشکل کماکان به قوت خود باقیست. از سوی دیگر، اگرچه HTTP/3 این مشکل را به صورت بنیادین حل نکرده، اما پرفورمنس و قابلیت‌های امنیتی را به گونه‌ای بهبود داده که می‌توانند به شکلی موثرتر با حملات متمرکز بر کوکی‌ها مقابله کنند. 

علی‌رغم این معایب، HTTP/2 همچنان کاربرد گستره دارد و روی اکثر مرورگرها و سرورها پشتیبانی می‌شود. HTTP/3 هم اگرچه بهبودهای قابل توجه – به‌خصوص در وضعیتی که شبکه ناپایدار است – به همراه می‌آورد، هنوز نیاز به فراگیری هرچه بیشتر دارد.

انتخاب میان این پروتکل‌ها بستگی به نیازها و محیط شبکه دارد. در برخی سناریوها، HTTP/2 بهترین انتخاب به حساب می‌آید، مثلا زمانی که نیاز به سازگاری گسترده با سیستم‌های قدیمی دارید یا زمانی که مشغول کار در محیطی هستید که از UDP (و به تبع آن HTTP/3) پشتیبانی نمی‌کند.

روش استفاده از HTTP2 چیست و چگونه است؟

اگر کاربر سمت کلاینت هستید، برای استفاده از HTTP/2 صرفا باید مرورگرتان را به آخرین نسخه به‌روزرسانی کنید. اکثر مرورگرهای معتبر از HTTP/2 پشتیبانی می‌کنند. اگر کاربر سمت سرور باشید، فرایند ارتقا به HTTP/2 اندکی پیچیده‌تر است. در ادامه راهنمایی کوتاه برای محیط‌های سرور گوناگون ارائه می‌کنیم تا ذهنیتی کلی از فرایندها به دست آورید.

مقاله پیشنهادی: Sync یا همگام سازی چیست؟| آموزش سینک کردن مرورگرهای مختلف 

Apache

برای شروع به سراغ محبوب‌ترین سیستم عامل سرور و وب‌سرور کنونی می‌رویم: آپاچی همراه با لینوکس اوبونتو. سایر پیکربندی‌ها ممکن است نیازمند پشت سر گذاشتن مراحل متفاوت باشند. برای مثال کار با پلتفرم Microsoft IIS معمولا به مهندسان DevOps ماهر واگذار می‌شود. اما برای فعال‌سازی HTTP/2 روی هر سایتی در Apache صرفا باید ماژولی به‌خصوص نصب کنید. 

بیشتر بخوانید: اوبونتو چیست؟ + انواع، کاربردها و ویژگی‌های Ubuntu

پیش از هر چیز، Apache نسخه ۲.۴.۱۷ یا جدیدتر را روی سرور نصب کنید. نصب ماژول HTTP/2 برای Apache نیز در سه گام ساده امکان‌پذیر می‌شود.

sudo add-apt-repository ppa:ondrej/apache2
sudo apt-get update
sudo apt-get upgrade apache2
sudo a2enmod http2

حالا باید HTTP/2 را برای هاست مجازی خود فعال کنیم. برای شروع فایل conf. را روی هاست مجازی باز می‌کنیم تا شاهد چنین چیزی باشیم:

<virtualhost 192.168.1.1:443=""></virtualhost>
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP
SSLCertificateFile   /etc/ssl/star.example.com.crt
SSLCertificateKeyFile   /etc/ssl/star.example.com.key
ServerName   "one.example.com"
DocumentRoot "/var/www/html/one"
Protocols h2 http/1.1
CustomLog    "/var/log/httpd/one-access.log" combined
ErrorLog     "/var/log/httpd/one-error.log"
<directory var="" www="" html=""></directory>
           AllowOverride none
Require all granted
</Directory>
</VirtualHost>
Protocols h2 http/1.1
service apache2 restart

Nginx

در ادامه راهنمای گام‌به‌گام و کوتاه فعال‌سازی HTTP/2 روی Nginx را هم بررسی می‌کنیم. اگر میخواهید در مورد وب سرور Nginx  بیشتر بدانید پیشنهاد میکنم مقاله “nginx چیست و چگونه کار می‌کند؟” را بخوانید. 

nginx -v
sudo apt update
sudo apt install nginx
 } server
 ; listen 443 ssl http2
 ; server_name example.com 
; ssl_certificate /path/to/certificate.crt 
; ssl_certificate_key /path/to/certificate.key 
  ... other SSL settings# 
  ... rest of your server configuration# 
{
sudo nginx -t
sudo systemctl reload nginx

تست و ایرادیابی HTTP/2

حالا که می‌دانیم HTTP2 چیست و تمام دانستنی‌های پیرامون آن را هم بررسی کرده‌ایم، در بخش پایانی به نحوه تست و ایرادیابی HTTP/2 با استفاده از چند مرورگر محبوب می‌پردازیم. 

در گوگل کروم

تست و ایرادیابی HTTP/2

تست و ایرادیابی HTTP/2

تست و ایرادیابی HTTP/2 در کروم

در فایرفاکس و اج

تست و ایرادیابی HTTP/2 در فایرفاکس

تست و ایرادیابی HTTP/2 در فایرفاکس

تست و ایرادیابی HTTP/2 در فایرفاکس

در Safari

تست و ایرادیابی HTTP/2 در سافاری

تست و ایرادیابی HTTP/2 در سافاری

تست و ایرادیابی HTTP/2 در سافاری

جمع‌بندی 

در نهایت باید گفت که تصمیم‌گیری راجع به استفاده یا عدم استفاده از HTTP/2 کاملا به صاحبان وب‌سایت‌ها بستگی دارد، اما HTTP/2 بدون تردید گزینه‌ای محبوب و موثر برای وب اپلیکیشن‌ها و سایت‌های مدرن‌تر به حساب می‌آید. در این مطلب گفتیم HTTP2 چیست و چه ویژگی‌های گوناگونی دارد. اگر هنوز سوالاتی بی‌پاسخ راجع به این پروتکل دارید، در ادامه به برخی از پرتکرارترین سوالات جواب می‌دهیم. 

سوالات متداولی که شما می‌پرسید؟

۱. چرا هنوز بسیاری از سایت‌ها از HTTP/2 استفاده نمی‌کنند؟

این موضوع می‌تواند دلایل متعدد داشته باشد. پیش از هر چیز، پیاده‌سازی HTTP/2 برای سازمان‌هایی که زیرساخت عظیم دارند، هزینه‌بر و پیچیده به حساب می‌آید. علاوه بر این، پیاده‌سازی صحیح HTTP/2 نیز نیازمند اندکی دانش فنی خواهد بود. در نهایت، برخی مرورگرهای قدیمی‌تر هم ممکن است با پروتکل HTTP/2 سازگار نباشند و به تجربه کاربران آسیب بزنند. 

۲. بهترین ابزارهای اعتبارسنجی HTTP2 چیست؟

این روزها ابزارهای آنلاین گوناگونی داریم که به شما اجازه می‌دهند استفاده یا عدم استفاده از پروتکل HTTP/2 را در وب‌سایت‌ها و وب اپلیکیشن‌ها بسنجید. به عنوان مثال می‌توانید از این ابزارها کمک بگیرید:

منبع:

UpWork

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *