HTTP/1.1, HTTP/2 ও HTTP/3-এর পার্থক্য
HTTP/1.1, HTTP/2, and HTTP/3
এই পাঠের সূচিপত্র
এই পাঠে যা শিখবেন
- HTTP/1.1 connection reuse ও HTTP/2 multiplexing
- HTTP/3 ও QUIC-এর ভূমিকা
- Protocol upgrade-এর বাস্তব সীমাবদ্ধতা
সমস্যা দিয়ে শুরু
একটি product page-এ CSS, images ও API data লাগে। একই server যথেষ্ট দ্রুত হলেও mobile network-এ অনেক request অপেক্ষা করে। শুধু controller optimize করলে পুরো page দ্রুত নাও হতে পারে। Transport protocol connection setup, concurrent delivery ও packet loss-এর সময় অপেক্ষার ধরন বদলায়।
সহজ করে বুঝি
HTTP semantics—method, status, headers—version বদলালেও মূলত একই থাকে। HTTP/1.1 persistent connection ব্যবহার করতে পারে; browser parallelism-এর জন্য একাধিক connection খোলে। HTTP/2 একটি TCP connection-এর stream-এ request/response multiplex করে এবং header compression ব্যবহার করে। কিন্তু TCP packet loss হলে connection-এর পরবর্তী bytes অপেক্ষা করতে পারে। HTTP/3 QUIC ব্যবহার করে; আলাদা stream-এর delivery loss isolation উন্নত করে, তবে congestion ও shared resources-এর প্রভাব থাকে। কোনো version database query magically দ্রুত করে না।
পরিচিত একটি উপমা
এক কাউন্টারের লম্বা সারি থেকে বহু token-এর service-এ যাওয়ার মতো HTTP/2। তবে সব token-এর কাগজ একই delivery van-এ আটকে গেলে সবাই অপেক্ষা করতে পারে। HTTP/3 কিছু stream-এর আটকে যাওয়া অন্য stream-এর delivery থেকে আলাদা করতে সাহায্য করে; রাস্তার মোট capacity তবু সীমিত।
নকশাটি দেখুন
Diagram লোড হচ্ছে…
Diagram-এর text flow দেখুন
flowchart TD B[Browser] --> E[Edge negotiates HTTP version] E -->|HTTP 1.1 or 2 upstream| P[Reverse Proxy] P --> L[Laravel PHP runtime] L --> D[(Database)]
Browser থেকে edge-এর connection আর edge থেকে origin-এর connection আলাদা। Public site HTTP/3 দিলেও origin Laravel server HTTP/1.1 ব্যবহার করতে পারে। Reverse proxy HTTP request decode করে application runtime-এ পাঠায়। তাই browser protocol দেখে internal network-এর protocol ধরে নেওয়া যাবে না। Response semantics ঠিক রাখা application-এরই দায়িত্ব।
PHP ও Laravel-এ প্রয়োগ
Laravel route fragment browser network tools-এ protocol যাচাইয়ের জন্য ছোট response দেয়। HTTP/2 বা HTTP/3 enable করতে edge/proxy ও certificate configuration দরকার; এই route protocol চালু করে না। এটি routes/web.php-এ রাখলে path /protocol-demo হবে।
use Illuminate\Support\Facades\Route;
Route::get('/protocol-demo', function () {
return response()->json([
'message' => 'একই HTTP semantics',
'generated_at' => now()->toIso8601String(),
])->header('Cache-Control', 'no-store');
});সুবিধা, সীমাবদ্ধতা ও trade-off
Multiplexing বহু small request-এ সহায়ক হতে পারে। Header compression repeated metadata কমায়। তবে proxy compatibility, CPU, connection limits ও network loss profile মেপে সিদ্ধান্ত নিন। HTTP/3-এর জন্য UDP reachability দরকার; client fallback থাকতে পারে। Security middleware, authorization ও rate limiting transport upgrade-এর বিকল্প নয়।
সাধারণ ভুল
- HTTP/2 enable করেই N+1 query ঠিক হয়েছে বলা।
- Browser থেকে origin পর্যন্ত একটিমাত্র connection ভাবা।
- HTTP/3 হলেই সব client একই performance পাবে ধরে নেওয়া।
আরও একটু গভীরে
HTTP/2 stream concurrency unlimited নয়। Server settings, flow-control windows এবং resource limits কার্যকর থাকে। Header compression state ও connection reuse endpoint security policy-এর সঙ্গে যুক্ত। TLS-এ ALPN HTTP/2 negotiation-এ ব্যবহৃত হয়; HTTP/3 discovery deployment অনুযায়ী Alt-Svc বা DNS records ব্যবহার করতে পারে। নতুন connection আর warm reused connection আলাদা করে মাপুন, নইলে handshake improvement ও application latency গুলিয়ে যাবে।
মনে রাখুন
HTTP version transport efficiency বদলায়, business contract নয়। Edge ও origin আলাদা করে observe করুন। Warm connection, packet loss ও representative mobile network-এ পরীক্ষা করে লাভ বিচার করুন।
নিজে চেষ্টা করুন
একটি staging page-এর browser Network panel-এ protocol column চালু করুন। HTML, image ও API request-এর negotiated version লিখুন। তারপর disable cache দিয়ে cold load ও warm reload-এর waterfall তুলনা করুন; সংখ্যাকে universal benchmark হিসেবে প্রকাশ করবেন না।
নিজের বোঝা যাচাই করুন
1. HTTP/2 কী multiplex করে?
এক connection-এর একাধিক stream-এ message exchange করে। এতে HTTP/1.1-এর connection scheduling-এর কিছু সীমা কমে, কিন্তু TCP loss-এর shared অপেক্ষা থাকে।
2. HTTP/3 কি UDP মানেই unreliable?
না। QUIC UDP-এর ওপর reliability, stream ordering ও congestion control বাস্তবায়ন করে। Raw UDP-এর guarantee সরাসরি HTTP/3-এর guarantee নয়।
3. Laravel route-এ version switch করব?
সাধারণ deployment-এ edge বা reverse proxy negotiate করে। Route response version-independent semantics বজায় রাখে।
4. HTTP/2-এ unlimited request?
না। Concurrent streams, memory ও application worker limits থাকে। Multiplexing backend capacity বাড়িয়ে দেয় না।
5. কী মাপব?
Cold/warm connection, request waterfall, transferred bytes, errors ও user latency। আলাদা protocol-এর client population ভিন্ন হলে সেই bias লিখুন।
আরও পড়ুন
এই পাঠের কুইজ
এই পাঠ থেকে ২টি প্রশ্ন। উত্তর দিয়ে ব্যাখ্যা দেখুন; অধ্যায়ের কুইজ আলাদাভাবে দিতে হবে।
এই পাঠের ২টি প্রশ্নের উত্তর দিন। পাস করতে দুটিই সঠিক হতে হবে।
জমা দেওয়ার পর সঠিক উত্তর ও ব্যাখ্যা দেখবেন। ফলাফল এই ব্রাউজারে সংরক্ষিত থাকবে। অনুশীলনের ফল অধ্যায় সম্পন্নের হিসাবে যোগ হয় না।
অগ্রগতি এই ব্রাউজারে সংরক্ষিত থাকে। শুধু পাঠ খুললে সম্পন্ন হয় না।