পাঠ ২৯ · ৫৭-এর মধ্যে · মডিউল ৬
Home / Courses / Computer Networks / HTTP/HTTPS

HTTP ও HTTPS

HTTP & HTTPS
৮ মিনিট পড়া মধ্যম · Intermediate Python কোডসহ সম্পূর্ণ বাংলায়

এই পাঠে যা শিখবেন

  • HTTP রিকোয়েস্ট ও রেসপন্সের গঠন
  • GET/POST/PUT/DELETE মেথডের অর্থ ও পার্থক্য
  • স্ট্যাটাস কোডের চারটি প্রধান ক্যাটাগরি ও তাদের সাধারণ উদাহরণ
  • HTTP-এর স্টেটলেসনেস এবং HTTPS কীভাবে TLS দিয়ে এনক্রিপশন যোগ করে — Python দিয়ে একটি টয় রিকোয়েস্ট রাউটার

১ · HTTP রিকোয়েস্ট-রেসপন্স মডেল

HTTPHyperText Transfer Protocolওয়েবের অ্যাপ্লিকেশন-লেয়ার প্রোটোকল — ক্লায়েন্ট (ব্রাউজার) একটি রিকোয়েস্ট পাঠায়, সার্ভার একটি রেসপন্স দিয়ে উত্তর দেয়। L28-এর ক্লায়েন্ট-সার্ভার রিকোয়েস্ট-রেসপন্স প্যাটার্নের সবচেয়ে পরিচিত প্রয়োগ। হলো ওয়েবের রিকোয়েস্ট-রেসপন্স প্রোটোকল — একটি ক্লায়েন্ট একটি রিকোয়েস্ট পাঠায় (মেথড + পাথ + হেডার, যেমন GET /index.html), সার্ভার একটি স্ট্যাটাস কোড + হেডার + বডি দিয়ে উত্তর দেয়। এটি M6/L28-এ আলোচিত ক্লায়েন্ট-সার্ভার প্যাটার্নের সবচেয়ে পরিচিত ও ব্যাপক ব্যবহৃত প্রয়োগ।

২ · HTTP মেথড

  • GET — কোনো রিসোর্স পুনরুদ্ধার করা, কোনো সাইড-ইফেক্ট থাকা উচিত নয় (idempotent, safe — একাধিকবার চালালেও একই ফলাফল)।
  • POST — নতুন ডেটা জমা দেওয়া, সাইড-ইফেক্ট থাকতে পারে (যেমন একটি নতুন রেকর্ড তৈরি করা)।
  • PUT — একটি বিদ্যমান রিসোর্স আপডেট (বা প্রতিস্থাপন) করা।
  • DELETE — একটি রিসোর্স মুছে ফেলা।

৩ · স্ট্যাটাস কোড ক্যাটাগরি

সার্ভারের রেসপন্সের প্রথম সংখ্যাটি রেসপন্সের ধরন নির্দেশ করে —

2xx — সফল
যেমন 200 OK — রিকোয়েস্ট সফলভাবে প্রক্রিয়া হয়েছে।
3xx — রিডাইরেক্ট
যেমন 301 Moved Permanently — রিসোর্স অন্য জায়গায় সরে গেছে।
4xx — ক্লায়েন্ট এরর
যেমন 404 Not Found — অনুরোধকৃত রিসোর্স পাওয়া যায়নি।
5xx — সার্ভার এরর
যেমন 500 Internal Server Error — সার্ভারের নিজের সমস্যা।

৪ · স্টেটলেসনেস ও HTTPS

HTTP ডিফল্টভাবে স্টেটলেসStatelessnessপ্রতিটি HTTP রিকোয়েস্ট স্বাধীন — সার্ভার আগের রিকোয়েস্টের কোনো স্মৃতি রাখে না। কুকি/সেশন এই স্টেটলেস প্রোটোকলের উপর স্টেট যোগ করার মেকানিজম। — প্রতিটি রিকোয়েস্ট স্বাধীন, আগের কোনো রিকোয়েস্টের স্মৃতি ডিফল্টভাবে থাকে না। কুকি ও সেশন (শুধু উল্লেখ) এই স্টেটলেস প্রোটোকলের উপর স্টেট যোগ করার মেকানিজম — যেমন লগইন অবস্থা মনে রাখা।

HTTPS = HTTP + TLSTransport Layer Securityএকটি এনক্রিপশন প্রোটোকল যা HTTP ট্র্যাফিককে এনক্রিপ্ট করে — M10/L48-এ TLS-এর বিস্তারিত রিভিউ আছে। এনক্রিপশন — ডেটা ট্রানজিটে এনক্রিপ্টেড থাকে, তাই মাঝপথে কেউ শুনলেও (eavesdropping) আসল কন্টেন্ট পড়তে পারে না। TLS-এর বিস্তারিত কাজ (হ্যান্ডশেক, সার্টিফিকেট) M10/L48-এ পর্যালোচনা করা হবে; RSA-এর মতো এনক্রিপশনের গাণিতিক ভিত্তি Discrete Mathematics কোর্সে ও ব্যবহারিক আক্রমণ/প্রতিরক্ষা Cybersecurity কোর্সের ক্রিপ্টোগ্রাফি মডিউলে আলোচিত হয়েছে।

Python
# একটি টয় ইন-মেমরি HTTP-স্টাইল রিকোয়েস্ট রাউটার
def home_handler():
    return "স্বাগতম, ABCL TECH!"

def about_handler():
    return "আমাদের সম্পর্কে জানুন।"

# routes: (method, path) -> handler ফাংশন
routes = {
    ("GET", "/"): home_handler,
    ("GET", "/about"): about_handler,
}

def handle_request(method, path, routes):
    handler = routes.get((method, path))
    if handler is None:
        return 404, "Not Found"
    return 200, handler()

# --- একটি রেজিস্টার্ড রুট টেস্ট ---
status, body = handle_request("GET", "/", routes)
print(f"GET / -> {status} {body}")

# --- একটি রেজিস্টার্ড রুট টেস্ট (২য়) ---
status, body = handle_request("GET", "/about", routes)
print(f"GET /about -> {status} {body}")

# --- একটি অ-রেজিস্টার্ড রুট টেস্ট ---
status, body = handle_request("GET", "/contact", routes)
print(f"GET /contact -> {status} {body}")

    
মূল কথা · Key takeaway

HTTP-এর শক্তি তার সরলতায় — একটি মেথড, একটি পাথ, একটি স্ট্যাটাস কোড দিয়ে পুরো ওয়েব চলে। HTTPS সেই একই সরল মডেলকে অক্ষত রেখে শুধু ট্রান্সপোর্টে একটি এনক্রিপশন স্তর যোগ করে — অ্যাপ্লিকেশন লজিক (রাউট, মেথড, স্ট্যাটাস কোড) একদম অপরিবর্তিত থাকে।

ভাবনার প্রশ্ন

প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।

প্র ০১ GET-কে কেন "সাইড-ইফেক্ট থাকা উচিত নয়" বলা হয় — বাস্তবে এটি ভঙ্গ হলে কী সমস্যা হতে পারে?

GET-কে "নিরাপদ" (safe) ও "idempotent" ধরে নেওয়া হয় বলে ব্রাউজার, প্রক্সি ও ক্যাশ প্রায়ই GET রিকোয়েস্ট রিট্রাই বা প্রিফেচ করে কোনো দ্বিধা ছাড়াই। যদি একটি GET রুট আসলে ডেটাবেসে কিছু মুছে ফেলে বা পরিবর্তন করে (একটি ডিজাইন ভুল), তাহলে ব্রাউজারের "ব্যাক" বাটন বা একটি ক্রলার-বট অনিচ্ছাকৃতভাবে সেই সাইড-ইফেক্ট বারবার ট্রিগার করতে পারে — এটি একটি ক্লাসিক, বাস্তব ওয়েব-ডিজাইন ভুল।

প্র ০২ HTTP স্টেটলেস হওয়া সত্ত্বেও কীভাবে একটি ওয়েবসাইট আপনাকে "লগ ইন" রাখতে পারে?

সার্ভার একটি ইউনিক সেশন আইডি বা টোকেন তৈরি করে ক্লায়েন্টকে একটি কুকি হিসেবে পাঠায়; এরপর প্রতিটি পরবর্তী রিকোয়েস্টে ব্রাউজার সেই কুকিটি স্বয়ংক্রিয়ভাবে ফেরত পাঠায়, আর সার্ভার সেই আইডি দিয়ে সার্ভার-সাইডে সংরক্ষিত "কে লগইন আছে" তথ্য খুঁজে বের করে। HTTP প্রোটোকল নিজে কিছু মনে রাখে না — পুরো স্টেট ব্যবস্থাপনা কুকি + সার্ভার-সাইড স্টোরেজের মাধ্যমে অ্যাপ্লিকেশন লেয়ারে যোগ করা হয়েছে।

প্র ০৩ HTTPS এনক্রিপশন যোগ করে, কিন্তু এটি কি নিশ্চিত করে যে আপনি সঠিক সার্ভারের সাথেই কথা বলছেন?

হ্যাঁ — এনক্রিপশনের পাশাপাশি TLS একটি সার্টিফিকেট-ভিত্তিক পরিচয় যাচাইও করে (একটি বিশ্বস্ত সার্টিফিকেট অথরিটি সার্ভারের পরিচয় প্রত্যয়ন করে), যা মাঝপথে কেউ নিজেকে সার্ভার হিসেবে জাহির করা (man-in-the-middle) থেকে রক্ষা করে। এই পরিচয়-যাচাই ও এনক্রিপশনের বিস্তারিত মেকানিজম M10/L48-এ পর্যালোচনা করা হবে, আর সংশ্লিষ্ট আক্রমণ কৌশল Cybersecurity কোর্সে গভীরে আলোচিত।

অনুশীলন

  1. চিন্তা করুন: উপরের কোড সেলে routes-এ একটি নতুন ("POST", "/login") রুট যোগ করলে কী পরিবর্তন করতে হবে?

    একটি নতুন হ্যান্ডলার ফাংশন লিখে সেটিকে routes ডিকশনারিতে ("POST", "/login"): login_handler হিসেবে যোগ করতে হবে — handle_request ফাংশনটি নিজে অপরিবর্তিত থাকবে, কারণ এটি (method, path) টুপল দিয়ে সাধারণভাবে লুকআপ করে, নির্দিষ্ট রুট হার্ডকোড করা নেই।

  2. পরীক্ষা করুন: handle_request ফাংশনটি এমনভাবে বদলান যাতে এটি ৪০৪-এর বদলে একটি কাস্টম ৫০০ এরর রিটার্ন করে যদি হ্যান্ডলার ফাংশন কল করার সময় কোনো এক্সেপশন ঘটে।

    একটি try/except ব্লকে হ্যান্ডলার কলটি মুড়ে দিন — এক্সেপশন ধরা পড়লে 500, "Internal Server Error" রিটার্ন করুন, আর হ্যান্ডলার না পাওয়া গেলে (আগের মতো) 404 রিটার্ন করুন। এটি দেখায় কীভাবে ৪xx (ক্লায়েন্টের ভুল অনুরোধ) ও ৫xx (সার্ভারের নিজের সমস্যা) ব্যবহারিকভাবে আলাদা করা হয়।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

পাঠ ২৮
অ্যাপ্লিকেশন লেয়ার প্রোটোকল পরিচিতি