چند درصد اینترنت ایران امن (HTTPS) است؟

۹۶٫۲٪ درخواست‌های ایران به سایت‌ها با HTTPS است.

بقیه، یعنی ۳٫۸٪، با http ساده و بی‌رمز؛ در ۷ روز گذشته.

به‌روز شده ۱ ساعت پیش

تفاوت http و https به زبان ساده

http مثل نامه‌ی باز است: هر کسی وسط راه می‌تواند بخواندش یا عوضش کند. https همان نامه است در پاکت مهرشده: فقط مرورگر شما و سایت آن را باز می‌کنند. مهر این پاکت همان گواهی SSL است.

کدام نسخه‌ی HTTP ۷ روز گذشته.

  • HTTP/2۷۳٪
  • HTTP/1.x (قدیمی)۲۷٪
  • HTTP/3 (روی QUIC)۰٫۱٪

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

منبع: Cloudflare Radar · CC BY-NC 4.0 · نسخه‌ی HTTP درخواست‌های ایران

۳۰ روز گذشته

سهم HTTPS در هر روز

۹۴٫۲٪۹۵٫۸٪۹۶٫۳٪
سهم HTTPS درخواست‌های ایران در هر روز از ۳۰ روز گذشته.

سهم HTTP/2 در هر روز

۶۳٪۷۰٫۵٪۷۶٫۹٪
سهم HTTP/2 درخواست‌های ایران در هر روز از ۳۰ روز گذشته.

سایت خودم با کدام نسخه کار می‌کند؟

  1. ابزار توسعه‌دهندهدر کروم یا فایرفاکس کلید F12 را بزنید و به بخش Network بروید.
  2. ستون Protocolروی سر ستون‌ها کلیک راست کنید و Protocol را روشن کنید، بعد صفحه را دوباره باز کنید.
  3. بخوانیدhttp/1.1 یعنی نسخه‌ی قدیمی، h2 یعنی HTTP/2 و h3 یعنی HTTP/3.

سوال‌هایی که می‌پرسند.

تفاوت http و https چیست؟
در http حرف‌های مرورگر و سایت مثل نامه‌ی باز است؛ در https در پاکت مهرشده می‌رود و کسی وسط راه نمی‌تواند آن را بخواند یا عوض کند.
HTTP/2 و HTTP/3 چه فرقی دارند؟
HTTP/2 چند درخواست را هم‌زمان در یک اتصال می‌فرستد. HTTP/3 همین کار را روی راه تازه‌ای به اسم QUIC می‌کند که با گم شدن یک تکه، بقیه را معطل نمی‌کند.
سایت من با کدام نسخه کار می‌کند؟
در مرورگر کروم یا فایرفاکس ابزار توسعه‌دهنده (F12) را باز کنید، به بخش Network بروید و ستون Protocol را روشن کنید: h2 یعنی HTTP/2 و h3 یعنی HTTP/3.
چرا https خط خورده است؟
معمولا یعنی گواهی SSL سایت مشکل دارد: تاریخش گذشته، برای نام دیگری است یا ناقص نصب شده. آمار گواهی‌های .ir در صفحه‌ی SSL است.

بیشتر

HTTPS و HTTP/2 و HTTP/3 در ایران: تفاوت http و https به زبان ساده، و عدد سهم هر نسخه‌ی HTTP یعنی چه

سهم HTTPS در ایران در رادار سفید یعنی از هر صد درخواستی که در هفت روز گذشته از ایران به سایت‌های روی شبکه‌ی Cloudflare رسیده، چندتا امن (HTTPS) بوده و چندتا باز (HTTP ساده)، و هر کدام با کدام نسخه‌ی HTTP آمده‌اند: ۱٫x، ۲ یا ۳. در این راهنما با مثال نامه و مغازه می‌گوییم HTTP چیست، تفاوت http و https چیست، چرا مرورگر سایت http را «امن نیست» می‌نامد، HTTP/2 و HTTP/3 چه فرقی با هم دارند و برای سرعت سایت چه معنایی دارند، و چطور در مرورگر خودتان ببینید سایتتان با کدام نسخه کار می‌کند.

این صفحه دقیقا چه چیزی را نشان می‌دهد؟

داده‌ها از Cloudflare Radar می‌آید، با مجوز CC BY-NC 4.0. Cloudflare یک شرکت بزرگ اینترنتی است و بخش بزرگی از سایت‌های دنیا از شبکه‌ی آن رد می‌شوند. این شرکت بخشی عمومی به اسم Radar دارد که عددهای اینترنت کشورها را منتشر می‌کند. رادار سفید این عددها را فقط برای ایران می‌گیرد. عددهای این صفحه هر ۶ ساعت یک بار تازه می‌شوند و رادار سفید آن‌ها را ۳۰ روز نگه می‌دارد و بعد پاک می‌کند.

وقتی صفحه‌ی سهم HTTPS و نسخه‌های HTTP در ایران را باز می‌کنید، مرورگر شما به Cloudflare وصل نمی‌شود. صفحه از روی نسخه‌ای ساخته می‌شود که رادار سفید پیش‌تر گرفته است. اگر یک بار Cloudflare در دسترس نباشد، صفحه همین را می‌گوید: «دسترسی به کلادفلر به دلیل اختلال قطع است و ممکن است به خاطر قطعی اینترنت بین‌الملل باشد». آن وقت آخرین داده‌ای را که داشته نشان می‌دهد و درباره‌اش با زمان گذشته حرف می‌زند.

در این صفحه چهار چیز می‌بینید:

  1. سهم HTTPS و HTTP ساده در ۷ روز گذشته. یعنی از همه‌ی درخواست‌هایی که در این یک هفته از ایران به سایت‌های روی Cloudflare رسیده، چند درصد امن بوده و چند درصد باز.
  2. سهم نسخه‌های HTTP در ۷ روز گذشته. چند درصد با HTTP/1.x آمده، چند درصد با HTTP/2 و چند درصد با HTTP/3.
  3. روند روزانه در ۳۰ روز گذشته. همان سهم‌ها روز به روز، تا ببینید در این یک ماه بالا و پایین شده‌اند یا نه.
  4. راه سنجیدن سایت خودتان. سه قدم ساده در ابزار برنامه‌نویس مرورگر که پایین‌تر مفصل می‌گوییم.

عدد امروز بالای همین صفحه است. اینجا عمدا هیچ درصدی نمی‌نویسیم، چون عددها هر چند ساعت عوض می‌شوند و نوشته‌ی ثابت زود کهنه می‌شود.

این عدد چه چیزی را نمی‌گوید؟

دو محدودیت مهم دارد که باید همیشه در ذهن داشته باشید:

  • فقط چیزی است که از شبکه‌ی Cloudflare می‌گذرد. سایتی که روی این شبکه نیست، در این عدد دیده نمی‌شود. پس این عدد سهم HTTPS در «همه‌ی اینترنت ایران» نیست؛ سهم درخواست‌هایی است که Cloudflare از ایران دیده.
  • سهم درخواست‌هاست، نه آدم‌ها یا سایت‌ها. یک صفحه‌ی وب ممکن است ده‌ها درخواست بسازد: خود صفحه، عکس‌ها، فونت‌ها، فایل‌های جاوااسکریپت. هر کدام یک درخواست حساب می‌شود. پس عدد نمی‌گوید «چند درصد سایت‌های ایران https دارند»؛ می‌گوید «چند درصد درخواست‌ها امن بوده‌اند».

حالا برویم سراغ اصل ماجرا: این HTTP که هی از آن حرف می‌زنیم اصلا چیست؟

HTTP چیست؟ مثل خواستن جنس از یک مغازه

فرض کنید به یک مغازه می‌روید. به فروشنده می‌گویید: «لطفا یک دفتر صد برگ بدهید». فروشنده یا دفتر را می‌دهد، یا می‌گوید «نداریم»، یا می‌گوید «از قفسه‌ی بغلی بردارید». شما می‌خواهید، او جواب می‌دهد. گفتگو همین است.

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

HTTP کوتاه شده‌ی HyperText Transfer Protocol است. معنی کلمه به کلمه‌اش می‌شود «قرارداد جابه‌جا کردن ابرمتن». ابرمتن یعنی متنی که در آن پیوند هست و با زدن روی پیوند به صفحه‌ی دیگری می‌روید؛ همان صفحه‌های وب. «قرارداد» یا پروتکل هم یعنی مجموعه‌ای از قاعده‌ها که همه قبولش کرده‌اند: درخواست چه شکلی باشد، پاسخ چه شکلی باشد، هر کدام چه بخش‌هایی داشته باشد.

قاعده‌های معنایی HTTP، یعنی اینکه «درخواست» و «پاسخ» و «آدرس» و «کد وضعیت» یعنی چه، امروز در سندی به اسم RFC 9110 نوشته شده است. RFC اسم سندهایی است که قاعده‌های فنی اینترنت را رسما می‌نویسند؛ چیزی شبیه کتاب قانون اینترنت. نکته‌ی جالب این است که این معنا برای همه‌ی نسخه‌های HTTP یکی است. نسخه‌ها فقط در «شیوه‌ی رساندن» حرف با هم فرق دارند، نه در خود حرف. این را پایین‌تر بیشتر باز می‌کنیم.

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

این یکی از پرسش‌هایی است که زیاد جستجو می‌شود. اینترنت را معمولا مثل یک ساختمان چندطبقه توضیح می‌دهند. طبقه‌های پایین کار جابه‌جا کردن بسته‌ها را می‌کنند: آدرس دادن (IP) و رساندن مطمئن داده (TCP) یا رساندن سریع ولی بی‌ضمانت (UDP). HTTP در طبقه‌ی بالا، یعنی لایه‌ی کاربرد، است. یعنی خودش کاری به اینکه بسته‌ها از کدام سیم رد می‌شوند ندارد؛ فقط می‌گوید چه حرفی زده شود، و برای رساندنش به طبقه‌های پایین تکیه می‌کند.

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

تفاوت http و https: نامه‌ی باز و پاکت مهرشده

حالا مهم‌ترین پرسش این صفحه: تفاوت http و https چیست؟

یک بار دیگر به مثال نامه برگردیم. فرض کنید روی یک کارت پستال برای دوستتان می‌نویسید: «رمز کمد من ۴۵۲۱ است». کارت پستال پاکت ندارد. نامه‌رسان، کارمند اداره‌ی پست، هر کسی که کارت دستش برسد، می‌تواند آن را بخواند. حتی می‌تواند یک عدد را پاک کند و عدد دیگری بنویسد و شما هیچ‌وقت نفهمید.

http همین کارت پستال است. درخواست شما و پاسخ سایت به شکل متن باز در شبکه جابه‌جا می‌شوند. هر دستگاهی که سر راه است، مثل مودم یک کافه یا هر جای دیگر مسیر، اگر بخواهد می‌تواند بخواندشان یا تغییرشان بدهد.

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

https همین پاکت مهرشده است. حرف s در آخرش یعنی secure، یعنی «امن». صفحه‌ی HTTPS در MDN، که مرجع آموزشی برنامه‌نویسان وب است، آن را نسخه‌ی رمزشده‌ی HTTP توصیف می‌کند که با TLS کار می‌کند. TLS قراردادی است که پاکت را می‌سازد و مهر می‌زند. نسخه‌ی تازه‌اش، TLS 1.3، در RFC 8446 نوشته شده است. اگر می‌خواهید ببینید درخواست‌های ایران با کدام نسخه‌ی TLS می‌آیند، صفحه‌ی نسخه‌های TLS در ایران را ببینید.

پاکت مهرشده دقیقا سه کار می‌کند

https سه چیز را با هم می‌دهد، و خوب است هر سه را جدا بشناسید:

  1. پنهان ماندن (رمزنگاری). کسی سر راه نمی‌تواند بخواند چه صفحه‌ای باز کردید، چه رمزی نوشتید یا چه چیزی در فرم پر کردید. فقط مرورگر شما و سایت کلید باز کردن پاکت را دارند.
  2. دست نخوردن (یکپارچگی). اگر کسی سر راه حتی یک حرف از صفحه را عوض کند، مرورگر می‌فهمد و صفحه را نشان نمی‌دهد. پس کسی نمی‌تواند وسط راه تبلیغ یا کد ناخواسته در صفحه بگذارد.
  3. اطمینان از طرف مقابل (احراز هویت). مرورگر مطمئن می‌شود سایتی که جواب می‌دهد واقعا همان سایتی است که آدرسش را زدید، نه یک سایت جعلی که خودش را جای آن جا زده. این کار با گواهی انجام می‌شود.

گواهی یعنی چه؟

گواهی یا certificate یک کارت شناسایی دیجیتال برای سایت است. یک مرکز صدور گواهی (certificate authority)، که مرورگرها از پیش به آن اعتماد دارند، این کارت را امضا می‌کند و در آن می‌نویسد «این کلید مال این دامنه است». وقتی به یک سایت https وصل می‌شوید، سایت کارتش را نشان می‌دهد و مرورگر امضا را می‌سنجد.

گرفتن گواهی دیگر کار سخت و گرانی نیست. مثلا Let's Encrypt یک مرکز صدور گواهی رایگان است که در صفحه‌ی «چطور کار می‌کند» توضیح می‌دهد صاحب سایت چطور به صورت خودکار ثابت می‌کند دامنه مال اوست و گواهی می‌گیرد. اگر کنجکاوید چند گواهی برای دامنه‌های .ir صادر می‌شود و از کدام مرکزها، صفحه‌ی گواهی‌های SSL دامنه‌های ایران را ببینید.

یک سوءتفاهم رایج

https یعنی راه امن است، نه اینکه سایت درستکار است. پاکت مهرشده تضمین می‌کند نامه وسط راه خوانده یا عوض نمی‌شود؛ تضمین نمی‌کند که خود فرستنده آدم خوبی است. یک سایت جعلی هم می‌تواند گواهی بگیرد و https داشته باشد. پس قفل کنار آدرس یعنی «کسی وسط راه نیست»، نه «به این سایت اعتماد کن». همیشه به خود آدرس هم نگاه کنید.

چرا مرورگر سایت http را «امن نیست» می‌نامد؟

شاید دیده باشید که کنار آدرس بعضی سایت‌ها عبارت «Not secure» یا «امن نیست» می‌آید. این از اول نبود. سال‌ها مرورگرها سایت‌های https را با یک قفل سبز تشویق می‌کردند و درباره‌ی سایت‌های http چیزی نمی‌گفتند.

بعد جهت عوض شد. تیم Chrome در یادداشتی در وبلاگ Chromium در بهمن ۱۳۹۶ (فوریه‌ی ۲۰۱۸) اعلام کرد که از ژوئیه‌ی ۲۰۱۸، با نسخه‌ی ۶۸ این مرورگر، همه‌ی سایت‌های http با برچسب «Not secure» نشان داده می‌شوند. یعنی امن بودن حالت عادی شد و باز بودن حالت استثنا که باید به کاربر هشدار داد.

دلیلش همان مثال کارت پستال است. MDN در راهنمای رمزهای ناامن می‌گوید رمز عبور همیشه باید با HTTPS فرستاده شود، و نه فقط صفحه‌ی ورود: همه‌ی صفحه‌های سایت باید با HTTPS برسند. همان راهنما مثال می‌زند که کسی می‌تواند در کافه یا فرودگاه یک وای‌فای رایگان راه بیندازد و منتظر بماند تا آدم‌ها وصل شوند و رمزشان را بزنند. روی http، این رمزها مثل متن کارت پستال خوانده می‌شوند.

این برای صاحب سایت چه معنایی دارد؟

سه نتیجه‌ی عملی:

  • اعتماد بازدیدکننده. وقتی کسی کنار آدرس سایت شما «امن نیست» ببیند، احتمالا دلش نمی‌خواهد در آن فرم پر کند یا شماره‌اش را بنویسد.
  • امکانات تازه‌ی مرورگر. بسیاری از امکانات جدید وب فقط روی صفحه‌های امن کار می‌کنند. یکی از مهم‌ترینش برای این صفحه این است که مرورگرها HTTP/2 و HTTP/3 را عملا فقط روی https به کار می‌برند؛ پایین‌تر می‌گوییم چرا.
  • گوگل. گوگل در یادداشتی در وبلاگ Search Central در سال ۲۰۱۴ اعلام کرد که HTTPS را به عنوان یکی از نشانه‌های رتبه‌بندی در نظر می‌گیرد. این یکی از نشانه‌های بسیار است و به تنهایی سایتی را بالا نمی‌برد، ولی دلیلی هم برای عقب ماندن نیست.

پس آیا سایت من باید https باشد؟

بله. امروز تقریبا هیچ دلیلی برای ماندن روی http نمانده است. گواهی رایگان در دسترس است، مرورگرها http را «امن نیست» می‌نامند و امکانات سریع‌تر وب روی https کار می‌کنند. حتی سایتی که فرم و رمز ندارد هم سود می‌برد، چون کسی وسط راه نمی‌تواند در صفحه‌هایش دست ببرد.

نسخه‌های HTTP: از یک صف تا چند رشته در یک لوله

تا اینجا درباره‌ی «باز یا مهرشده» حرف زدیم. حالا موضوع دوم این صفحه: نسخه‌ی HTTP.

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

بیایید سه نسخه را با مثال لوله‌ی آب ببینیم، همان سه لوله‌ای که بالای صفحه نقاشی شده‌اند.

HTTP/1.1: یک لوله، یک صف

HTTP/1.1 نسخه‌ای است که وب سال‌ها با آن کار کرد. قاعده‌های امروزی‌اش در RFC 9112 نوشته شده است. در صفحه‌ی رادار سفید، این نسخه و نسخه‌ی قدیمی‌ترش HTTP/1.0 با هم زیر اسم HTTP/1.x می‌آیند.

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

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

گیر کردن سر صف یعنی چه؟

در HTTP/1.1 اگر یک پاسخ بزرگ یا کند باشد، بقیه‌ی درخواست‌های همان اتصال پشتش منتظر می‌مانند. به این گیر کردن سر صف (head-of-line blocking) می‌گویند. مثل صف نانوایی که اگر نفر اول صد تا نان بخواهد، بقیه که یک نان می‌خواهند باید صبر کنند.

HTTP/2: یک لوله، چند رشته در آن

HTTP/2 برای حل همان مشکل صف آمد. قاعده‌های امروزی‌اش در RFC 9113 نوشته شده است.

ایده‌ی اصلی‌اش چندتایی کردن (multiplexing) است. به جای اینکه هر درخواست منتظر قبلی بماند، همه‌ی درخواست‌ها روی یک اتصال هم‌زمان می‌روند. HTTP/2 هر درخواست و پاسخ را به تکه‌های کوچک (به اسم frame، یعنی قاب) می‌شکند، روی هر تکه می‌نویسد مال کدام «رشته» (stream) است، و تکه‌های رشته‌های مختلف را در هم می‌بافد. آن طرف، تکه‌ها دوباره کنار هم گذاشته می‌شوند.

با مثال لوله: به جای چند لوله‌ی باریک جدا، یک لوله‌ی پهن داریم که درونش چند رشته‌ی آب با رنگ‌های مختلف کنار هم جریان دارند. عکس و فونت و جاوااسکریپت هم‌زمان می‌آیند و هیچ‌کدام منتظر دیگری نمی‌ماند.

HTTP/2 چه چیزهای دیگری آورد؟

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

پس HTTP/2 مشکل صف را کاملا حل کرد؟

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

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

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

HTTP/3 و QUIC: یک راه تازه

HTTP/3 در RFC 9114 نوشته شده است. فرق بزرگش با دو نسخه‌ی قبلی این است که دیگر روی TCP سوار نمی‌شود. به جایش روی قراردادی تازه به اسم QUIC می‌رود.

QUIC چیست؟

QUIC یک قرارداد رساندن داده است که در RFC 9000 نوشته شده، با این عنوان: «QUIC: یک ترابری چندتایی و امن بر پایه‌ی UDP». هر کلمه‌ی این عنوان معنی دارد:

  • بر پایه‌ی UDP. UDP قرارداد ساده‌تری از TCP است. بسته را می‌فرستد و قول ترتیب و رسیدن نمی‌دهد. خود سند QUIC می‌گوید بسته‌هایش در UDP گذاشته می‌شوند تا راحت‌تر در سیستم‌ها و شبکه‌های موجود جا بیفتد. یعنی QUIC کارهای مطمئن کردن را خودش، در طبقه‌ی بالاتر، انجام می‌دهد.
  • چندتایی. QUIC خودش رشته‌ها را می‌شناسد. اگر بسته‌ای از یک رشته گم شود، فقط همان رشته منتظر می‌ماند و بقیه به راهشان ادامه می‌دهند. یعنی آن مشکل صف که در HTTP/2 به TCP برمی‌گشت، اینجا حل می‌شود.
  • امن. در QUIC، رمزنگاری جزو خود قرارداد است و از TLS 1.3 استفاده می‌کند. QUIC بدون رمزنگاری وجود ندارد. برای همین در صفحه‌ی نسخه‌های TLS در ایران هم QUIC جدا شمرده می‌شود.

با مثال لوله: HTTP/3 یعنی به جای یک لوله‌ی پهن که اگر یک جایش بگیرد همه‌ی رشته‌ها می‌ایستند، هر رشته راه خودش را دارد. اگر یکی بگیرد، بقیه می‌روند.

دو هدیه‌ی دیگر QUIC

  • شروع سریع‌تر. برای باز کردن یک اتصال https روی TCP، اول باید TCP دست بدهد و بعد TLS پاکت را بسازد؛ چند رفت‌وبرگشت پیش از اینکه حتی یک کلمه از صفحه بیاید. QUIC این دو را در یک دست دادن ترکیب می‌کند. سند QUIC از «برقراری اتصال با تأخیر کم» حرف می‌زند، و حتی اجازه می‌دهد مرورگری که قبلا به سایتی وصل شده، در دیدار بعدی داده را پیش از رسیدن پاسخ سرور بفرستد. هر رفت‌وبرگشت کمتر، یعنی صفحه زودتر شروع به آمدن می‌کند.
  • جابه‌جایی اتصال. در TCP، اتصال به آدرس IP گوشی شما بسته است. اگر از وای‌فای خانه به اینترنت همراه بروید، آدرستان عوض می‌شود و اتصال از اول ساخته می‌شود. سند QUIC می‌گوید جابه‌جایی اتصال با شناسه‌ی اتصال کار می‌کند و اجازه می‌دهد اتصال به یک مسیر شبکه‌ی تازه برود. یعنی دانلود یا تماس وسط راه قطع نمی‌شود.

رفت‌وبرگشت یعنی چه و چرا این‌قدر مهم است؟

رفت‌وبرگشت (round trip) زمانی است که یک پیام از دستگاه شما به سرور برود و جوابش برگردد. اگر سرور دور باشد، مثلا در قاره‌ی دیگر، هر رفت‌وبرگشت می‌تواند ده‌ها یا صدها میلی‌ثانیه طول بکشد. حالا اگر برای شروع هر اتصال چند رفت‌وبرگشت لازم باشد، این زمان‌ها روی هم جمع می‌شوند. برای همین کم کردن رفت‌وبرگشت‌ها، که QUIC و TLS 1.3 هر دو رویش کار کرده‌اند، برای کاربرهای دور از سرور ارزش زیادی دارد. اگر می‌خواهید زمان رفت‌وبرگشت از ایران را ببینید، صفحه‌ی تأخیر و پینگ اینترنت ایران را ببینید.

HTTP/3 به UDP نیاز دارد، و اگر نشد، برمی‌گردد

یک نکته‌ی بسیار مهم درباره‌ی HTTP/3: چون روی UDP سوار است، اگر UDP در مسیر کار نکند، HTTP/3 هم کار نمی‌کند. بعضی شبکه‌ها، مثل شبکه‌ی بعضی اداره‌ها یا دیوارهای آتش (firewall) که قاعده‌ی سختی دارند، فقط ترافیک وب TCP را راه می‌دهند و UDP را روی درگاه وب نمی‌پذیرند.

خوشبختانه این موضوع از اول در طراحی دیده شده است. سند RFC 9114 می‌گوید اگر مشکل اتصال، مثلا بسته بودن UDP، نگذارد اتصال QUIC ساخته شود، مرورگرها باید سراغ نسخه‌های HTTP روی TCP بروند. یعنی کاربر هیچ خطایی نمی‌بیند؛ صفحه با HTTP/2 یا HTTP/1.1 باز می‌شود. HTTP/3 یک امکان اضافه است، نه جایگزینی که اگر نباشد سایت از کار بیفتد.

مرورگر از کجا می‌فهمد سایتی HTTP/3 دارد؟

مرورگر نمی‌تواند از اول بداند. معمولا بار اول با HTTP/2 یا HTTP/1.1 روی TCP وصل می‌شود. سرور در پاسخ یک سرآیند به اسم Alt-Svc می‌فرستد که یعنی «سرویس جایگزین». سند HTTP/3 می‌گوید یک سایت می‌تواند با این سرآیند و نشانه‌ی h3 اعلام کند که همین محتوا با HTTP/3 هم در دسترس است. خود سازوکار Alt-Svc در RFC 7838 نوشته شده است. مرورگر این را یادش می‌ماند و دفعه‌ی بعد HTTP/3 را امتحان می‌کند.

راه دیگری هم هست: سایت می‌تواند در DNS، همان دفترچه‌ی تلفنی که اسم سایت را به آدرس تبدیل می‌کند، رکوردی از نوع HTTPS بگذارد که از پیش بگوید چه نسخه‌هایی دارد؛ این رکورد در RFC 9460 نوشته شده است. اگر کنجکاوید چه نوع پرسش‌هایی از ایران به DNS می‌رسد، صفحه‌ی DNS و DNSSEC در ایران نوع پرسش‌ها را نشان می‌دهد.

نتیجه‌ی این سازوکار برای شما: اگر سایتی را برای اولین بار باز کنید و در ابزار مرورگر h2 ببینید، به این معنی نیست که سایت HTTP/3 ندارد. صفحه را یک بار دیگر بارگذاری کنید و دوباره نگاه کنید.

هر نسخه برای سرعت سایت چه معنایی دارد؟

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

HTTP/1.1

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

HTTP/2

  • همه‌ی فایل‌ها روی یک اتصال هم‌زمان می‌آیند؛ صفحه‌های پرفایل بیشترین سود را می‌برند.
  • سرآیندهای تکراری فشرده می‌شوند و حجم کمتری می‌رود.
  • روی شبکه‌های پایدار عالی کار می‌کند. روی شبکه‌هایی که بسته زیاد گم می‌کنند، مشکل صف TCP هنوز هست.

HTTP/3

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

عدد رادار سفید به برنامه‌نویس چه می‌گوید؟

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

یک سایت چطور HTTPS و HTTP/2 و HTTP/3 را روشن می‌کند؟

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

قدم اول: HTTPS

  1. گواهی بگیرید. از یک مرکز صدور گواهی، مثلا Let's Encrypt که رایگان است. بسیاری از میزبان‌ها و کنترل‌پنل‌ها این کار را خودکار انجام می‌دهند و گواهی را پیش از تمام شدن تمدید می‌کنند.
  2. گواهی را روی سرور بگذارید. نرم‌افزار وب‌سرور باید بداند گواهی و کلیدش کجاست تا بتواند پاکت را بسازد.
  3. http را به https بفرستید. کسی که هنوز آدرس http قدیمی را می‌زند، باید با یک تغییر مسیر دائمی (کد 301) به نسخه‌ی https برود.
  4. پیوندهای داخلی را درست کنید. اگر صفحه‌ای https است ولی عکس یا فایلی را از آدرس http می‌آورد، به آن «محتوای مختلط» می‌گویند و مرورگر یا آن را نمی‌آورد یا هشدار می‌دهد.
  5. به مرورگر بگویید همیشه https بیاید. سرآیندی به اسم Strict-Transport-Security، که در RFC 6797 نوشته شده و MDN هم توضیحش داده، به مرورگر می‌گوید از این به بعد برای این سایت فقط https بزند، حتی اگر کاربر http تایپ کند. این را وقتی روشن کنید که مطمئنید همه‌ی صفحه‌ها روی https درست کار می‌کنند.

قدم دوم: HTTP/2

مرورگرها HTTP/2 را عملا فقط روی https به کار می‌برند. پس اول https، بعد HTTP/2. بیشتر وب‌سرورهای امروزی HTTP/2 را پشتیبانی می‌کنند و معمولا با یک گزینه در تنظیمات روشن می‌شود. اگر سایتتان پشت یک شبکه‌ی توزیع محتوا (CDN) است، یعنی شبکه‌ای از سرورها در جاهای مختلف که نسخه‌ای از سایت شما را نزدیک کاربر نگه می‌دارند، معمولا خود آن شبکه HTTP/2 را با مرورگر کاربر حرف می‌زند و شاید کاری لازم نباشد.

قدم سوم: HTTP/3

HTTP/3 دو چیز لازم دارد که HTTP/2 نداشت:

  • پشتیبانی نرم‌افزار سرور یا CDN از QUIC. همه‌ی وب‌سرورها و همه‌ی نسخه‌هایشان هنوز این را ندارند. اول ببینید نرم‌افزار شما دارد یا نه.
  • باز بودن درگاه UDP شماره‌ی ۴۴۳. وب https معمولا روی درگاه TCP شماره‌ی ۴۴۳ است. HTTP/3 همان شماره را روی UDP می‌خواهد. اگر دیوار آتش سرور فقط TCP را راه بدهد، HTTP/3 هرگز ساخته نمی‌شود و مرورگرها بی‌صدا با HTTP/2 می‌آیند.

بعد از روشن کردن، سرور باید سرآیند Alt-Svc را بفرستد تا مرورگرها بفهمند HTTP/3 هست. بسیاری از نرم‌افزارها این را همراه خود روشن کردن انجام می‌دهند.

سایت خودم با کدام نسخه کار می‌کند؟ سه قدم در مرورگر

حالا بخش عملی. لازم نیست ابزار خاصی نصب کنید؛ هر مرورگر رومیزی امروزی ابزار برنامه‌نویس (DevTools) دارد. این قدم‌ها برای Chrome و مرورگرهای ساخته‌شده بر پایه‌ی آن است و مستندات DevTools در Chrome for Developers همین ستون را توضیح داده. مرورگرهای دیگر هم در ابزار برنامه‌نویس خود بخش Network مشابهی دارند.

  1. ابزار برنامه‌نویس را باز کنید. سایتتان را باز کنید، کلید F12 را بزنید یا روی صفحه کلیک راست کنید و Inspect را انتخاب کنید. در پنجره‌ای که باز می‌شود، به زبانه‌ی Network بروید.
  2. ستون Protocol را روشن کنید. روی سرِ یکی از ستون‌های جدول درخواست‌ها، مثلا Name یا Status، کلیک راست کنید و از فهرست، Protocol را تیک بزنید.
  3. صفحه را دوباره بارگذاری کنید. حالا کنار هر درخواست، در ستون Protocol، نسخه‌اش را می‌بینید.

این نوشته‌ها یعنی چه؟

  • http/1.1 یعنی این درخواست با HTTP/1.1 آمده.
  • h2 یعنی HTTP/2.
  • h3 یعنی HTTP/3 روی QUIC.

چند نکته که موقع نگاه کردن به کارتان می‌آید:

  • هر ردیف جداست. صفحه‌ی اصلی ممکن است h2 باشد ولی یک فونت یا اسکریپت که از جای دیگری می‌آید http/1.1 باشد. همه‌ی ستون را نگاه کنید، نه فقط ردیف اول.
  • بار اول h3 نمی‌بینید؟ دوباره بارگذاری کنید. همان‌طور که گفتیم، مرورگر معمولا بعد از دیدن سرآیند Alt-Svc سراغ HTTP/3 می‌رود.
  • روی شبکه‌ی دیگری هم امتحان کنید. اگر روی یک شبکه h3 می‌بینید و روی دیگری h2، احتمالا UDP در مسیر دوم راه ندارد و مرورگر برگشته است. این خطای سایت شما نیست.
  • https را هم ببینید. روی آدرس در نوار بالا کلیک کنید (یا روی نشانه‌ی کنارش). مرورگر می‌گوید اتصال امن است یا نه و گواهی را هم نشان می‌دهد.

چرا https خط خورده است؟

یکی از پرجستجوترین پرسش‌ها درباره‌ی https همین است: «چرا کنار آدرس، https با خط قرمز خط خورده؟» یا «چرا سایت https باز نمی‌شود و مرورگر صفحه‌ی هشدار نشان می‌دهد؟».

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

دلیل‌های رایج

  • گواهی تاریخ گذشته. هر گواهی تاریخ پایان دارد. اگر صاحب سایت تمدیدش را فراموش کرده باشد، مرورگر قبولش نمی‌کند. صفحه‌ی گواهی‌های SSL دامنه‌های ایران نشان می‌دهد گواهی‌هایی که برای دامنه‌های .ir صادر می‌شوند چه مدت اعتبار دارند؛ گواهی کوتاه‌مدت یعنی تمدید خودکار مهم‌تر است.
  • گواهی برای دامنه‌ی دیگری است. مثلا گواهی برای example.ir صادر شده ولی شما www.example.ir را باز کرده‌اید و آن نام در گواهی نیست.
  • امضاکننده‌ی ناشناخته. گواهی را خود صاحب سایت امضا کرده یا مرکزی که مرورگر به آن اعتماد ندارد. یا زنجیره‌ی گواهی، یعنی گواهی‌های میانی که امضای سایت را به مرکز اصلی وصل می‌کنند، روی سرور ناقص گذاشته شده.
  • محتوای مختلط. صفحه https است ولی بعضی فایل‌هایش را از آدرس http می‌آورد. بعضی مرورگرها در این حالت هشدار کنار آدرس نشان می‌دهند.
  • ساعت دستگاه خودتان اشتباه است. اگر تاریخ گوشی یا کامپیوتر شما چند سال جلو یا عقب باشد، مرورگر فکر می‌کند گواهی هنوز معتبر نشده یا تمام شده. این یکی از رایج‌ترین دلیل‌هاست وقتی همه‌ی سایت‌ها برایتان هشدار می‌دهند.

به عنوان کاربر چه کنم؟

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

پرسش‌های رایج

آیا https سایت را کند می‌کند؟

ساختن پاکت در گذشته هزینه‌ی محسوسی داشت، ولی نسخه‌های تازه‌ی TLS رفت‌وبرگشت‌های کمتری لازم دارند. از آن مهم‌تر، مرورگرها HTTP/2 و HTTP/3 را عملا فقط روی https به کار می‌برند؛ پس سایت https می‌تواند از نسخه‌های سریع‌تر استفاده کند و سایت http نه.

چرا بعضی درخواست‌ها هنوز HTTP ساده‌اند؟

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

خلاصه در چند خط

  • HTTP زبان مشترک مرورگر و سایت است: مرورگر می‌خواهد، سایت جواب می‌دهد، مثل مشتری و مغازه.
  • http مثل کارت پستال باز است؛ https مثل پاکت مهرشده: پنهان، دست‌نخورده، و با اطمینان از طرف مقابل از راه گواهی.
  • Chrome از نسخه‌ی ۶۸ در سال ۲۰۱۸ همه‌ی سایت‌های http را «Not secure» می‌نامد. https یعنی راه امن است، نه اینکه سایت حتما درستکار است.
  • HTTP/1.1 درخواست‌ها را روی هر اتصال در صف می‌گذارد. HTTP/2 (RFC 9113) همه را روی یک اتصال هم‌زمان می‌فرستد. HTTP/3 (RFC 9114) روی QUIC (RFC 9000) سوار است، سریع‌تر شروع می‌کند و گم شدن یک بسته فقط یک رشته را نگه می‌دارد.
  • HTTP/3 به UDP نیاز دارد؛ اگر UDP در مسیر بسته باشد، مرورگر بی‌صدا به HTTP/2 یا HTTP/1.1 برمی‌گردد.
  • برای روشن کردن: اول گواهی و https، بعد HTTP/2 در سرور یا CDN، بعد HTTP/3 با پشتیبانی QUIC و درگاه UDP شماره‌ی ۴۴۳ باز.
  • برای دیدن نسخه‌ی سایت خودتان: ابزار برنامه‌نویس، زبانه‌ی Network، ستون Protocol، و دوباره بارگذاری.
  • https خط خورده یعنی مرورگر مهر پاکت را قبول نکرده: گواهی تاریخ گذشته، نام اشتباه، امضاکننده‌ی ناشناخته، محتوای مختلط یا ساعت اشتباه دستگاه.
  • عدد رادار سفید سهم درخواست‌های ایران به سایت‌های روی Cloudflare است، نه سهم همه‌ی سایت‌ها یا آدم‌ها. عدد امروز بالای همان صفحه است.

برای دیدن عددهای امروز، به صفحه‌ی سهم HTTPS و نسخه‌های HTTP در ایران بروید؛ برای گواهی‌ها صفحه‌ی گواهی‌های SSL و برای نسخه‌های TLS صفحه‌ی TLS در ایران را ببینید، و برای بقیه‌ی عددهای اینترنت ایران، صفحه‌ی اصلی رادار سفید را. داده‌ها از Cloudflare Radar می‌آید، با مجوز CC BY-NC 4.0.