HTTP, HTTPS ও TLS: request ও নিরাপদ সংযোগ
HTTP, HTTPS, and TLS
এই পাঠের সূচিপত্র
এই পাঠে যা শিখবেন
- HTTP message ও status বোঝা
- TLS কী সুরক্ষা দেয়
- Safe retry ও request semantics চিনতে শেখা
সমস্যা দিয়ে শুরু
একটি API order তৈরি করেছে, কিন্তু response ফেরার আগে mobile network বিচ্ছিন্ন হয়েছে। User আবার button চাপলেন। দ্বিতীয় POST থেকে আরেকটি order হলো। HTTPS ব্যবহার করা সত্ত্বেও duplicate order হলো কেন? Transport security এবং application correctness আলাদা concern।
সহজ করে বুঝি
HTTP একটি application protocol। Request-এ method, target, headers এবং প্রয়োজনে body থাকে। Response-এ status, headers ও body থাকে। GET সাধারণত resource পড়ে; POST operation বা resource creation বোঝাতে ব্যবহার করা হয়। Method-এর অর্থের সঙ্গে application behavior মিলতে হবে।
HTTPS হলো HTTP-কে TLS-সুরক্ষিত connection-এ বহন করা। TLS transit-এ confidentiality, integrity এবং certificate validation-এর মাধ্যমে server identity যাচাই করতে সাহায্য করে। HTTPS মানে endpoint trustworthy business logic লিখেছে বা database encrypted—এমন নিশ্চয়তা নয়।
পরিচিত একটি উপমা
সিল করা envelope-এ চিঠি পাঠালে পথে কেউ সহজে পড়তে বা বদলাতে পারবে না। কিন্তু recipient ভুল bill তৈরি করলে envelope সেই ভুল ঠেকাবে না। TLS হলো নিরাপদ পরিবহনের অংশ; authorization ও duplicate handling হলো application-এর দায়িত্ব।
নকশাটি দেখুন
Diagram লোড হচ্ছে…
Diagram-এর text flow দেখুন
flowchart LR A[Client] -->|TLS protected HTTPS| B[Reverse Proxy] B -->|Private network HTTP or TLS| C[Laravel App] C --> D[(Database)]
Client certificate chain ও hostname যাচাই করে encrypted connection তৈরি করে। HTTP request proxy বা app-এ পৌঁছায়। App validation ও authorization চালায়। Response status যেমন 201 created, 404 not found বা 422 validation failure outcome জানায়। Proxy-এর forwarded headers বিশ্বাস করার configuration-ও সঠিক হতে হবে।
PHP ও Laravel-এ প্রয়োগ
Laravel HTTP Client-এ read-only provider request-এর timeout এবং error handling দেখানো হলো। URL configuration-এ trusted fixed endpoint রাখুন। User-দেওয়া arbitrary URL fetch করলে SSRF ঝুঁকি আসে। নিচের code-এ automatic retry নেই; retry policy operation-এর semantics বুঝে যোগ করতে হবে।
use Illuminate\Support\Facades\Http;
$response = Http::acceptJson()
->connectTimeout(2)
->timeout(5)
->get('https://catalog.example.test/products/42');
$response->throw();
$product = $response->json();সুবিধা, সীমাবদ্ধতা ও trade-off
TLS CPU ও handshake cost যোগ করে, তবে connection reuse এই cost ভাগ করতে পারে। Security-এর জন্য certificate verification বন্ধ করে সেই খরচ এড়াবেন না। HTTP status contract পরিষ্কার হলে client সহজে valid error ও transient failure আলাদা করতে পারে।
সাধারণ ভুল
- GET route দিয়ে order তৈরি বা data delete করা।
- HTTPS থাকলেই authentication লাগবে না ভাবা।
- Certificate verification বন্ধ করে production issue ঢেকে রাখা।
- Timeout দেখেই non-idempotent POST অন্ধভাবে retry করা।
আরও একটু গভীরে
HTTP-এর stateless semantics মানে এক request বোঝার জন্য protocol স্বয়ং আগের application conversation মনে রাখে না। Cookie ও session দিয়ে application context তৈরি হতে পারে। PUT ও DELETE-এর intended idempotent semantics আছে; তা সঠিক implementation-এর বিকল্প নয়। POST-এ idempotency key দিয়ে duplicate prevention design করতে পারেন।
মনে রাখুন
- TLS transit রক্ষা করে, business invariant নয়।
- Method, status ও body মিলে API contract।
- Timeout-এর পরে write-এর outcome অনিশ্চিত হতে পারে।
নিজে চেষ্টা করুন
একটি order create API-এর success, validation failure এবং duplicate request response design করুন। Timeout-এর পর client কী জানতে পারবে না তা লিখুন।
নিজের বোঝা যাচাই করুন
1. HTTPS কি database encryption নিশ্চিত করে?
না। Transit encryption ও at-rest encryption আলাদা configuration ও threat model।
2. POST timeout হলে order হয়নি?
নিশ্চিত নয়। Commit-এর পরে response হারাতে পারে।
3. সব error-এ 200 কেন সমস্যা?
Client, proxy ও monitoring outcome ভুল ব্যাখ্যা করতে পারে।
4. GET-এ write কেন এড়াবেন?
GET safe semantics ধরে browser, cache ও tooling কাজ করে। Side effect সেই প্রত্যাশা ভাঙে।
5. Proxy TLS terminate করলে কী দেখতে হবে?
Proxy-to-app path-এর protection, trusted proxy configuration এবং forwarded scheme/header handling।
আরও পড়ুন
এই পাঠের কুইজ
এই পাঠ থেকে ২টি প্রশ্ন। উত্তর দিয়ে ব্যাখ্যা দেখুন; অধ্যায়ের কুইজ আলাদাভাবে দিতে হবে।
এই পাঠের ২টি প্রশ্নের উত্তর দিন। পাস করতে দুটিই সঠিক হতে হবে।
জমা দেওয়ার পর সঠিক উত্তর ও ব্যাখ্যা দেখবেন। ফলাফল এই ব্রাউজারে সংরক্ষিত থাকবে। অনুশীলনের ফল অধ্যায় সম্পন্নের হিসাবে যোগ হয় না।
অগ্রগতি এই ব্রাউজারে সংরক্ষিত থাকে। শুধু পাঠ খুললে সম্পন্ন হয় না।