درباره HTTP/3
HTTP/3 مبتنی بر QUIC به طور فزایندهای توسط بسیاری از وبسایتها و CDNهای بزرگ پشتیبانی میشود. با این حال، علیرغم اینکه خود Hysteria بر پایه QUIC ساخته شده است، ما استفاده از Hysteria برای پروکسی کردن ترافیک HTTP/3 را توصیه نمیکنیم (زمانی که امکان استفاده از HTTP/2 یا پایینتر وجود دارد).
چرا
Hysteria برای انتقال ترافیک TCP از طریق QUIC طراحی شده است و از یک الگوریتم کنترل ازدحام اصلاحشده برای حداکثر کردن توان عملیاتی به جای حداقل کردن از دست رفتن بستهها استفاده میکند. اگرچه Hysteria از UDP پشتیبانی میکند، اما از دست رفتن بستههای خود UDP را کاهش نمیدهد. به بیان ساده، هنگام استفاده از Hysteria برای پروکسی کردن پروتکلهای مبتنی بر UDP مانند HTTP/3، هیچ اثر «افزایش سرعتی» تجربه نخواهید کرد. سرعت اتصال در این سناریو صرفاً به الگوریتمهای کنترل ازدحام وبسرور و پیادهسازی QUIC خود مرورگر (معمولاً Cubic، Reno یا BBR) بستگی دارد.
همین مسئله عملاً برای هر پروتکل پروکسی دیگری نیز صادق است و مشکلی مختص طراحی یا پیادهسازی Hysteria نیست.
علاوه بر این، QUIC تمام اطلاعات کنترل انتقال مانند شمارههای ترتیبی، تأییدیهها و غیره را که به طور سنتی به صورت متن ساده بودند، رمزنگاری میکند. این رمزنگاری پیادهسازی چیزی مشابه پروکسی شفاف TCP را برای جایگزینی کنترل ازدحام اصلی در هر یک از دو سر اتصال غیرممکن میسازد.
راهحل
در حال حاضر، تمام سایتها و برنامهها از QUIC فقط به عنوان یک گزینه «ارتقا» استفاده میکنند. اگر شبکه از آن پشتیبانی نکند (مثلاً UDP مسدود باشد)، به HTTP/2 یا پایینتر (که از TCP استفاده میکند) بازمیگردد.
اگر از Chrome یا Firefox با پروکسی HTTP/SOCKS5 روی رایانه شخصی استفاده میکنید، مرورگر عملاً HTTP/3 را خودش غیرفعال کرده است زیرا پروکسی HTTP نمیتواند از ارسال UDP پشتیبانی کند. در مورد SOCKS5، اگرچه از نظر تئوری از UDP پشتیبانی میکند، اما در Chrome و Firefox پیادهسازی نشده است.
اگر از یک کلاینت VPN مانند Shadowrocket یا SagerNet روی گوشی (یا TUN روی رایانه شخصی) استفاده میکنید، توصیه میشود HTTP/3 را به صورت دستی با یکی از روشهای زیر غیرفعال کنید.
- Chrome: به
chrome://flags/بروید،Experimental QUIC protocolرا پیدا کرده و آن را رویDisabledقرار دهید. - Firefox: به
about:configبروید،network.http.http3.enableرا پیدا کرده و آن را رویfalseقرار دهید. - پورت UDP 443 را با یک قانون ACL مسدود کنید.
reject(all, udp/443)