Soket TCP dirancang agar stateful sehingga secara umum mereka digunakan untuk mengidentifikasi sesi. Protokol seperti SSH dan ftp melakukan hal ini.
HTTP dirancang untuk menjadi tanpa kewarganegaraan dan setiap koneksi hanya dikaitkan dengan sumber daya yang akan diunduh. Setelah sumber daya diunduh, soket TCP yang digunakan permintaan HTTP ditutup. Alasan asli untuk ini adalah kesederhanaan. Tetapi efek sampingnya adalah server HTTP yang menjalankan situs web modern dapat menangani pengguna yang jauh lebih banyak daripada server berbasis soket seperti SSH atau ftp.
Jadi soket tidak dapat digunakan karena HTTP akan menutup soket setelah mengunduh halaman web.
Tentu saja, mengatakan HTTP akan menutup soket per sumber daya adalah menyederhanakan hal-hal karena HTTP memiliki fitur seperti pipelining dan koneksi persisten yang dapat mengunduh banyak sumber daya per soket. Tapi itu hanya optimasi. Setelah semuanya diunduh, browser Anda akan menutup soket setelah batas waktu tertentu.
HTTP pada awalnya dirancang sebagai protokol sederhana untuk mengunduh file HTML. Browser lama juga dapat mengunduh file HTML dari protokol lain seperti Gopher dan ftp. Karena itu, tidak ada alasan untuk membuat HTTP stateful karena file HTML hanyalah file teks sederhana.
Setelah formulir web diperkenalkan dan halaman HTML dapat mengirim data kembali ke halaman web server mulai perlu sesi. Dengan demikian cookie dibuat untuk memperkenalkan kembali status ke protokol stateless yang ditransmisikan melalui lapisan transfer stateful yang ditransmisikan melalui lapisan jaringan stateless. Jadi lapisan aplikasi lengkap adalah:
- Ethernet, Wifi dll = stateless
- IP = stateless
- TCP = stateful
- HTTP = stateless
- HTTP + cookies = stateful
Saat ini kami memiliki soket web yang dapat menyimpan satu soket terbuka dari halaman web Anda ke server. Jadi dengan websockets Anda dapat menggunakan soket lagi untuk mengidentifikasi pengguna karena websocket itu sendiri stateful. Tetapi dalam kebanyakan kasus Anda masih akan membutuhkan cookie untuk halaman html utama yang memuat javascript yang memulai websocket.