टीसीपी सॉकेट्स को स्टेटफुल होने के लिए डिज़ाइन किया गया है ताकि सामान्य रूप से उनका उपयोग सत्रों की पहचान करने के लिए किया जा सके। SSH और ftp जैसे प्रोटोकॉल ठीक यही करते हैं।
HTTP को स्टेटलेस होने के लिए डिज़ाइन किया गया है और प्रत्येक कनेक्शन केवल डाउनलोड किए जाने वाले संसाधन से जुड़ा है। एक संसाधन के बाद टीसीपी सॉकेट डाउनलोड किया जाता है जो HTTP अनुरोध पर सवारी बंद होता है। इसका मूल कारण सादगी था। लेकिन इसका साइड-इफेक्ट यह है कि आधुनिक वेबसाइटों को चलाने वाले HTTP सर्वर सॉकेट आधारित सर्वरों की तुलना में SSH या ftp से कहीं अधिक उपयोगकर्ताओं को संभाल सकते हैं।
इसलिए सॉकेट्स का उपयोग नहीं किया जा सकता क्योंकि वेब पेज डाउनलोड करने के बाद HTTP सॉकेट बंद कर देगा।
बेशक, यह कहना कि HTTP प्रति संसाधन सॉकेट को बंद कर देगा, चीजों की देखरेख कर रहा है क्योंकि HTTP में पाइपलाइनिंग और लगातार कनेक्शन जैसी विशेषताएं हैं जो प्रति सॉकेट में कई संसाधन डाउनलोड कर सकते हैं। लेकिन यह सिर्फ अनुकूलन है। सब कुछ डाउनलोड होने के बाद आपका ब्राउज़र कुछ समय समाप्त होने के बाद सॉकेट को बंद कर देगा।
HTTP मूल रूप से HTML फ़ाइलों को डाउनलोड करने के लिए एक साधारण प्रोटोकॉल के रूप में डिज़ाइन किया गया था। पुराने ब्राउज़र भी HTML फाइलें डाउनलोड कर सकते हैं जैसे कि गोफर और एफटीपी जैसे अन्य प्रोटोकॉल। जैसे, HTTP स्टेटफुल बनाने का कोई कारण नहीं था क्योंकि HTML फाइलें सिर्फ साधारण टेक्स्ट फाइल होती हैं।
एक बार वेब फॉर्म पेश किए जाने के बाद और HTML पेजों को सत्र की जरूरत के लिए शुरू किए गए सर्वर वेब पेजों पर डेटा वापस भेजा जा सकता है। इस प्रकार कुकीज़ एक स्टेटलेस प्रोटोकॉल के लिए राज्य को फिर से पेश करने के लिए बनाई गई थीं जो एक स्टेटफुल ट्रांसफर परत के माध्यम से प्रेषित होती हैं जो एक स्टेटलेस नेटवर्क परत पर प्रसारित होती है। तो पूर्ण आवेदन परतें हैं:
- इथरनेट, वाईफाई आदि = स्टेटलेस
- आईपी = स्टेटलेस
- टीसीपी = स्टेटफुल
- HTTP = स्टेटलेस
- HTTP + कुकीज़ = स्टेटफुल
इन दिनों हमारे पास वेबसोकेट हैं जो आपके वेब पेज से सर्वर तक एक ही खुला सॉकेट रख सकते हैं। तो वेबस्कैट के साथ आप फिर से किसी उपयोगकर्ता की पहचान करने के लिए सॉकेट्स का उपयोग कर सकते हैं क्योंकि वेबसैट अपने आप में स्टेटफुल है। लेकिन ज्यादातर मामलों में आपको अभी भी मुख्य HTML पृष्ठ के लिए एक कुकी की आवश्यकता होगी जो कि वेबसैट शुरू करने वाली जावास्क्रिप्ट को लोड करती है।