ওয়েব সার্ভারগুলি থেকে নথিগুলির অনুরোধ জানাতে, ব্রাউজারগুলি HTTP প্রোটোকল ব্যবহার করে। আপনি নিজের নাম বার থেকে সেই নামটি জানতে পারেন (এটি এখন লুকিয়ে থাকতে পারে তবে আপনি ঠিকানা বারে ক্লিক করলে, URL টি অনুলিপি করুন এবং এটি কোনও পাঠ্য সম্পাদককে পেস্ট করুন, আপনি http://
প্রথমে দেখতে পাবেন )। এইচটিটিপি একটি সাধারণ পাঠ্য-ভিত্তিক প্রোটোকল। এটি এর মতো কাজ করে:
প্রথমত, আপনার ব্রাউজারটি ওয়েবসাইটের সার্ভারের সাথে সংযোগ স্থাপন করে এবং যে ডকুমেন্টটি ডাউনলোড করতে চায় তার একটি URL পাঠায় (ওয়েব পৃষ্ঠাগুলিও নথি হয়) এবং ব্রাউজারটি সম্পর্কে নিজেই কিছু বিবরণ ( ব্যবহারকারী-এজেন্ট ইত্যাদি) প্রেরণ করে । উদাহরণস্বরূপ, সুপার ইউজার সাইটে মূল পৃষ্ঠাটি লোড করার জন্য http://superuser.com/
, আমার ব্রাউজারটি অনুরোধ প্রেরণ করে যা দেখে মনে হচ্ছে:
GET / HTTP/1.1
Host: superuser.com
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.0 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: pl-PL,pl;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: [removed for security]
DNT: 1
If-Modified-Since: Tue, 09 Jul 2013 07:14:17 GMT
প্রথম লাইনটি সুনির্দিষ্ট করে যে কোনও দস্তাবেজটি সার্ভারে ফিরে আসবে। অন্যান্য রেখাগুলিকে হেডার বলা হয়; তারা এ জাতীয় চেহারা:
Header name: Header value
এই লাইনগুলি অতিরিক্ত তথ্য প্রেরণ করে যা সার্ভারকে কী করা উচিত তা স্থির করতে সহায়তা করে।
সবকিছু ঠিকঠাক থাকলে সার্ভারটি অনুরোধ করা নথিটি পাঠিয়ে সাড়া দেবে। প্রতিক্রিয়াটি স্ট্যাটাস বার্তার সাথে শুরু হয়, তারপরে কিছু শিরোনাম (দস্তাবেজ সম্পর্কে বিশদ সহ) এবং অবশেষে, সবকিছু ঠিকঠাক থাকলে ডকুমেন্টের সামগ্রী। আমার অনুরোধের জন্য সুপার ব্যবহারকারীর সার্ভারের জবাবটি এমন দেখাচ্ছে:
HTTP/1.1 200 OK
Cache-Control: public, max-age=60
Content-Type: text/html; charset=utf-8
Expires: Tue, 09 Jul 2013 07:27:20 GMT
Last-Modified: Tue, 09 Jul 2013 07:26:20 GMT
Vary: *
X-Frame-Options: SAMEORIGIN
Date: Tue, 09 Jul 2013 07:26:19 GMT
Content-Length: 139672
<!DOCTYPE html>
<html>
[...snip...]
</html>
শেষ লাইনের পরে, সুপার ইউজারের সার্ভারটি সংযোগটি বন্ধ করে দেয়।
প্রথম লাইনে ( HTTP/1.1 200 OK
) প্রতিক্রিয়া কোড ধারণ করে , এক্ষেত্রে এটি 200 OK
। এর অর্থ সার্ভার সিদ্ধান্ত নিয়েছে যে অনুরোধ হিসাবে এটি কোনও দস্তাবেজ ফিরিয়ে দিতে পারে এবং প্রতিশ্রুতি দেয় যে যে বিষয়বস্তুগুলি অনুসরণ করবে সেগুলি এই জাতীয় নথি হবে। যদি এটি না হয় তবে কোডটি অন্য কিছু হবে এবং এটি সার্ভারটি কোনও প্রতিক্রিয়া হিসাবে কেবল একটি দস্তাবেজ ফিরিয়ে দিচ্ছে না তার কারণের একটি ইঙ্গিত দেয়: উদাহরণস্বরূপ, যদি এটি অনুরোধ করা নথিটি খুঁজে না পায় তবে এটি ফিরে আসার কথা 404 Not Found
, এবং যদি আপনাকে প্রশ্নে থাকা সামগ্রীটি অ্যাক্সেস করার অনুমতি না দেওয়া হয় তবে তা ফিরে আসার কথা 403 Forbidden
।
এই প্রথম স্থিতি রেখার পরে, প্রতিক্রিয়া শিরোনামগুলি অনুসরণ করে; তারা প্রদান বিষয়বস্তু সম্পর্কে আরও তথ্যের যেমন তার হিসাবে, ফিরে হচ্ছে Content-type
।
এরপরে একটি ফাঁকা লাইন। এটি আর কোনও প্রতিক্রিয়া শিরোনাম অনুসরণ করবে না এই ইঙ্গিত দেয়। এই লাইনের অতীতের সমস্ত কিছু এটি অনুরোধ করা দস্তাবেজের সামগ্রী। সুতরাং উপরের উদাহরণে, <!DOCTYPE html>
সুপার ইউজার হোম পৃষ্ঠার প্রথম লাইন (একটি এইচটিএমএল নথি) রয়েছে। যদি আমি ডাউনলোড করার জন্য কোনও নথির অনুরোধ করছিলাম তবে এটি সম্ভবত কিছু গীব্র বর্ণযুক্ত হবে, কারণ বেশিরভাগ নথির ফর্ম্যাটগুলি পূর্ববর্তী প্রক্রিয়াজাতকরণ ছাড়াই অপঠনযোগ্য।
শিরোনামে ফিরে যান। আমাদের জন্য সবচেয়ে আকর্ষণীয় একটি সর্বশেষ Content-Length
,। খালি লাইনের পরে এটি কতগুলি বাইট ডেটা আশা করতে পারে তা ব্রাউজারকে অবহিত করে, তাই মূলত এটি বাইটে প্রকাশিত নথির আকার। এই শিরোনামটি বাধ্যতামূলক নয় এবং এটি সার্ভার দ্বারা বাদ দেওয়া যেতে পারে। কখনও কখনও নথির আকারের পূর্বাভাস দেওয়া যায় না (উদাহরণস্বরূপ যখন ফ্লাইটে ডকুমেন্টটি তৈরি করা হয়), কখনও কখনও অলস প্রোগ্রামাররা এটি অন্তর্ভুক্ত করে না (ড্রাইভার ডাউনলোড সাইটগুলিতে প্রচলিত সাধারণ), কখনও কখনও ওয়েবসাইটগুলি নবাবিদের দ্বারা তৈরি করা হয় যারা জানেন না যেমন একটি শিরোনাম।
যাইহোক, কারণ যাই হোক না কেন, শিরোনামটি অনুপস্থিত হতে পারে। সেক্ষেত্রে সার্ভারটি কতটা ডেটা প্রেরণ করতে চলেছে তা ব্রাউজারটি জানে না এবং এটি সংযোগ বন্ধ করার জন্য সার্ভারের অপেক্ষায় অজানা হিসাবে নথির আকার প্রদর্শন করে । এবং এটি অজানা নথি মাপের কারণ।