WebSocket, tek bir TCP bağlantısı üzerinden tam çift yönlü iletişim kanalı sağlayan bir bilgisayar iletişim protokolüdür. WebSocket protokolü IETF tarafından 2011 yılında RFC 6455 ile standart hale getirilmiş ve WebIDL içerisindeki WebSocket API W3C tarafından standart hale getirilmektedir.
WebSocket, web tarayıcılarında ve web sunucularında uygulanmak üzere tasarlanmıştır, fakat herhangi bir istemci veya sunucu uygulaması tarafından uygulanabilmektedir. WebSocket protokolü, TCP tabanlı bağımsız bir protokoldür. HTTP ile tek ilişkisi, HTTP sunucuları tarafından bir upgrade isteği olarak yorumlanmasıdır. WebSocket protokolü, sunucuya ve sunucudan gerçek zamanlı veri aktarımını sağlayarak, tarayıcı ile web sunucusu arasında etkileşimi sağlamaktadır. Bu, sunucunun istemci istemeden tarayıcıya içerik gönderebileceği ve bağlantıyı açık tutarak istediği zaman mesaj alabilmesini veya gönderebilmesini sağlayan standart bir yöntem ile sağlanmaktadır. Bu şekilde, tarayıcı ile sunucu arasında iki yönlü devam eden bir iletişim gerçekleşebilmektedir. İletişim TCP 80 portu (veya TLS ile şifrelenmiş bağlantılarda 443 portu) üzerinden gerçekleşmektedir ve bu, güvenlik duvarı kullanarak Internet web trafiğini engelleyen ortamlar için bir avantaj olmaktadır. Benzer iki yönlü sunucu-tarayıcı iletişimi Comet gibi standart olmayan stopgap teknolojileri tarafından sağlanmaktaydı.
WebSocket protokolü, Google Chrome, Microsoft Edge, Internet Explorer, Firefox, Safari ve Opera dahil pek çok tarayıcı tarafından desteklenmektedir. WebSocket ayrıca sunucu üzerindeki web uygulamalarının da desteğini gerektirmektedir.
Genel bakış
HTTP’den farklı olarak, WebSocket protokolü tam çift yönlü iletişim sağlamaktadır. İlave olarak, WebSocket TCP protokolünün üzerinde mesaj akışına imkân tanımaktadır. TCP tek başına, mesaj kavramı kullanmadan byte akışı ile ilgilenmektedir. WebSocket protokolünden önce, 80 protokolü üzerinden tam çift yönlü iletişim Comet kanalları üzerinden yapılabilmekteydi; fakat, Comet uygulaması çok yaygın değildir ve TCP el sıkışması ve HTTP başlıkları yüzünden küçük mesajlar için verimsiz olmaktadır. WebSocket protokolü, webin güvenlik ilkelerini etkilemeksizin bu problemleri çözmeyi amaçlamaktadır.
WebSocket protokolü tanımı, şifreli ve şifresiz trafik için kullanılan iki yeni uniform resource identifier (URI) formatı olan ws ve wss ifadelerini tanımlamaktadır. Şema adı ve fragment dışında (#
desteklenmemektedir), diğer URI bileşenleri için genel URI biçimini kullanacak şekilde tanımlanmıştır.
Tarayıcının Geliştirici Araçlarını kullanarak, geliştiriciler WebSocket paketleri ile WebSocket el sıkışmasını inceleyebilmektedir.
Tarih
WebSocket, HTML5 tanımında ilk olarak, TCP tabanlı soket API’si yerine TCPConnection olarak anılmıştır. Haziran 2008’de, Michael Carter tarafından, WebSocket olarak bilinen protokolün ilk versiyonu olan bir takım çalışma gerçekleştirilmiştir.
Bunun üzerine kısa bir süre sonra Ian Hickson ve Michael Carter tarafından #whatwg IRC chat odasındaki işbirliği ile WebSocket ismi verilmiştir ve sonrasında Ian Hickson tarafından HTML5 tanımında yer alacak şekilde yazılmıştır ve Michael Carter tarafından bir blog üzerinde duyurulmuştur. Aralık 2009’da, varsayılan olarak WebSocket protokolü standartlarını tamamen uygulayan ilk tarayıcı Google Chrome 4 olmuştur. Sonrasında, Şubat 2010’da WebSocket protokolünün geliştirilmesi, W3C ve whatwg IRC grubundan IET’ye geçmiştir ve Ian Hickson gözetiminde iki değişime uğramıştır.
Protokol tamamlandıktan ve birden çok tarayıcı tarafından varsayılan olarak desteklendikten sonra, Aralık 2011’de Ian Fette gözetiminde RFC tamamlanmıştır.
Browser implementation
WebSocket protokolünün güvenli bir versiyonu, Firefox 6, Safari 6, Google Chrome 14,Opera 12.10 ve Internet Explorer 10 tarafından uygulanmaktadır. Detaylı bir protokol test raporu bu tarayıcıların spesifik protokol özelliklerine uyumluluğunu listelemektedir.
Protokolün daha eski ve daha az güvenli bir versiyonu, Opera 11, Safari 5 ve iOS 4.2'de bulunan Safari mobil versiyonunda uygulanmıştır. iOS7'deki BlackBerry tarayıcısı WebSocket protokolünü uygulamaktadır. Açıklıklar yüzünden, Firefox 4 ve 5 ile Opera 11 üzerinde devre dışı bırakılmıştır.
Ayrıca, SPDY üzerinde WebSocket protokolünün deneysel bir uygulamasına imkân tanıyan Google Chrome için --enable-websocket-over-spdy
bulunmaktadır.
Protokol | Taslak Tarihi | Internet Explorer | Firefox (PC) | Firefox (Android) | Chrome (PC, Mobile) | Safari (Mac, iOS) | Opera (PC, Mobile) | Android Browser |
---|---|---|---|---|---|---|---|---|
hixie-7517 Mart 2017 tarihinde Wayback Machine sitesinde . | 4 Şubat 2010 | 4 | 5.0.0 | |||||
hixie-76 20 Mart 2017 tarihinde Wayback Machine sitesinde . hybi-00 20 Mart 2017 tarihinde Wayback Machine sitesinde . | 6 Mayıs 2010 23 Mayıs 2010 | 4.0 (devre dışı bırakıldı) | 6 | 5.0.1 | 11.00 (disabled) | |||
7 hybi-07 20 Mart 2017 tarihinde Wayback Machine sitesinde . | 22 Nisan 2011 | 6 | ||||||
8 hybi-10 20 Mart 2017 tarihinde Wayback Machine sitesinde . | 11 Temmuz 2011 | 7 | 7 | 14 | ||||
13 RFC 6455 | Aralık 2011 | 10 | 11 | 11 | 16 | 6 | 12.10 | 4.4 |
Protokol El Sıkışması
Bir WebSocket bağlantısı kurmak için istemci, aşağıdaki örnekte gösterildiği gibi sucununun WebSocket el sıkışma cevabı gönderdiği bir WebSocket el sıkışma isteği göndermektedir.
İstemci isteği (HTTP’de olduğu gibi, her bir satır \r\n
ile bitmektedir ve sonda ilave bir boş satır bulunmak zorundadır):
GET /chat HTTP/1.1 Host: server.example.com Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw== Sec-WebSocket-Protocol: chat, superchat Sec-WebSocket-Version: 13 Origin: http://example.com
Sunucunun cevabı:
HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk= Sec-WebSocket-Protocol: chat
El sıkışma, sunucuların aynı port üzerinden hem HTTP bağlantılarını hem de WebSocket bağlantılarını işleyebilmesi açısından HTTP’ye benzemektedir. Bağlantı kurulduğunda, iletişim, HTTP protokolüne uymayan iki taraflı bir ikili protokole dönüşmektedir.
Upgrade
başlığına ek olarak, istemci base64 ile kodlanmış rastgele bytelardan oluşan bir Sec-WebSocket-Key
başlığını da göndermektedir. Sunucu ise Sec-WebSocket-Accept
başlığı ile anahtar değerinin özeti ile cevap vermektedir. Bu yöntem, önceki bir WebSocket trafiğinin tekrar oynatılmasını engellemeye çalışmaktadır ve herhangi bir kimlik doğrulama, gizlilik veya bütünlük kontrolü sağlamamaktadır. Özet fonksiyonu 258EAFA5-E914-47DA-95CA-C5AB0DC85B11
sabit değerini Sec-WebSocket-Key
başlığındaki (base64 kodlaması çözülmemiş) değere eklemekte, SHA-1 özet fonksiyonunu uygulamakta ve sonucu base64 kullanarak kodlamaktadır.
Bağlantı kurulduktan sonra, istemci ve sunucu WebSocket verisini tam çift yönlü modda gönderebilmektedir. Veri, payload tarafından takip edilen küçük bir başlık ile minimal bir şekilde çerçevelenmektedir. WebSocket iletişimi, tek bir mesajın birkaç veri çerçevesi içerisine dağılabileceği mesajlarla tanımlanmaktadır. Bu, verinin ilk kısmının bilindiği fakat mesajın toplam büyüklüğünün bilinmediği durumlarda, mesajların gönderilebilmesine izin vermektedir (FIN biti ile işaretlenip sona erişilene kadar veri çerçevelerini arka arkaya göndermektedir). Protokol üzerinde yapılan eklentilerle, farklı veri akışlarının eş zamanlı olarak çoklanması için de kullanılabilmektedir (örneğin bir soketin kullanımını tek bir büyük payload için tekelleştirilmesini önlemek için).
(Güvenlik açısından) Sunucu tarafında bağlantı kurulurken Origin başlığının doğrulanması, Siteler Arası WebSocket Çalma (Cross-Site WebSocket Hijacking) saldırılarına karşı koruma açısından önem taşımaktadır. Bu saldırı bağlantı çerezler veya HTTP kimlik doğrulaması ile doğrulandığında mümkün olabilmektedir. WebSocket üzerinden hassas veriler iletilirken, WebSocket bağlantısını doğrulamak için token veya benzer koruma mekanizmalarının kullanılması faydalı olacaktır.
Proxy geçişi
WebSocket protokolü istemci uygulamaları, web tarayıcısının hedef makine ve porta bağlanırken bir vekil sunucu kullanıp kullanmadığını tespit etmeye çalışmaktadır ve eğer kullanıyorsa, kalıcı bir tünel oluşturmak için HTTP CONNECT metodunu kullanmaktadır.
WebSocket protokolünün kendisi vekil sunucuların ve güvenlik duvarlarının farkında olmasa da, HTTP’ye uygun bir el sıkışmayı desteklemektedir ve böylece HTTP sunucularının varsayılan HTTP ve HTTPS portlarını (80 ve 443) bir WebSocket ağ geçidiyle veya sunucusuyla paylaşmasına izin vermektedir. WebSocket protokolü, WebSocket ve Güvenli WebSocket bağlantılarını belirtmek için ws:// ve wss:// öneklerini tanımlamaktadır. Her iki yöntemde, bağlantıyı WebSocket’a yükseltmek için bir HTTP yükseltme mekanizması kullanmaktadır. Bazı vekil sunucular şeffaftır ve WebSocket ile çalışabilmektedir; diğerleri ise WebSocket protokolünün çalışmasını engelleyecektir ve bağlantının sonlanmasına yol açacaktır. Bazı durumlarda, ilave vekil sunucu yapılandırması gerekebilmektedir ve bazı vekil sunucuların WebSocket protokolünü desteklemesi için yükseltilmesi gerekebilmektedir.
Eğer şifrelenmemiş WebSocket trafiği, WebSocket desteği olmayan bir şeffaf vekil sunucu üzerinden akıyorsa, bağlantı muhtemelen başarısız olacaktır.
Eğer şifreli WebSocket bağlantısı kullanılıyorsa, Güvenli WebSocket bağlantısında Transport Layer Security (TLS) kullanılması, tarayıcı bir vekil sunucu kullanacak şekilde yapılandırıldığında, HTTP CONNECT komutunun çalıştırılmasını sağlamaktadır. Bu, Güvenli WebSocket istemcisi ile WebSocket sunucusu arasında HTTP vekil sunucusu aracılığıyla düşük seviye birebir TCP iletişimini sağlayan bir tünel kurmaktadır. Şeffaf vekil sunucularda, tarayıcı vekil sunucunun varlığından habersizdir ve hiçbir HTTP CONNECT paketi yollanmamaktadır. Ancak, kablodaki trafik şifreli olduğu için, aradaki şeffaf vekil sunucular şifreli trafiğin geçmesine izin verebilmektedir. Bu yüzden, Güvenli WebSocket kullanıldığında, WebSocket bağlantısının başarılı olma ihtimali artmaktadır. Şifrelemenin olması kaynak kullanımı açısından bir miktar yük oluşturacaktır, fakat güvenli bir tünel üzerinden geçebileceği için daha yüksek bir başarı oranı sağlamaktadır.
2010 ortalarında verilen bir taslak (hixie-76 versiyonu) ters vekil sunucularla ve ağ geçitleriyle uyumluluğu, başlıklardan sonra 8 byte’dan oluşan bir anahtar eklediği ve bu anahtarı Content-Length: 8
başlığında belirtmediği için bozmuştur. Bu veri tüm aradaki cihazlar tarafından iletilmeyeceği için protokol başarısızlığına yol açabilmektedir. Bu yüzden, daha yeni taslaklar (örneğin hybi-09) bu problemi çözerek anahtar veriyiSec-WebSocket-Key
başlığına koymaktadır.
Ayrıca bakınız
Notlar
Kaynakça
- ^ Ian Fette; Alexey Melnikov (Aralık 2011), "1.7-Relationship to TCP and HTTP", RFC 6455 The WebSocket Protocol, , doi:10.17487/RFC6455, RFC 6455
- ^ "Glossary:WebSockets". Mozilla Developer Network. 2015. 14 Eylül 2016 tarihinde kaynağından . Erişim tarihi: 8 Nisan 2017.
- ^ . 1 Nisan 2021 tarihinde kaynağından arşivlendi. Erişim tarihi: 8 Nisan 2017.
- ^ Graham Klyne, (Ed.) (14 Kasım 2011). . Internet Assigned Numbers Authority. 25 Nisan 2013 tarihinde kaynağından arşivlendi. Erişim tarihi: 10 Aralık 2011.
- ^ Ian Fette; Alexey Melnikov (Aralık 2011), "3-WebSocket URIs", RFC 6455 The WebSocket Protocol, , doi:10.17487/RFC6455, RFC 6455
- ^ Wang, Vanessa; Salim, Frank; Moskovits, Peter (Şubat 2013). "APPENDIX A: WebSocket Frame Inspection with Google Chrome Developer Tools". . Apress. ISBN . 31 Aralık 2015 tarihinde kaynağından arşivlendi. Erişim tarihi: 7 Nisan 2013.
- ^ . www.w3.org. 16 Eylül 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 17 Nisan 2016.
- ^ . lists.w3.org. 27 Nisan 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 17 Nisan 2016.
- ^ . krijnhoetmer.nl. 21 Ağustos 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 18 Nisan 2016.
- ^ . 23 Nisan 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 17 Nisan 2016.
- ^ . Chromium Blog (İngilizce). 31 Mart 2017 tarihinde kaynağından arşivlendi. Erişim tarihi: 17 Nisan 2016.
- ^ <ian@hixie.ch>, Ian Hickson. "The WebSocket protocol". tools.ietf.org. 17 Mart 2017 tarihinde kaynağından . Erişim tarihi: 17 Nisan 2016.
- ^ <ian@hixie.ch>, Ian Hickson. "The WebSocket protocol". tools.ietf.org. 6 Mart 2017 tarihinde kaynağından . Erişim tarihi: 17 Nisan 2016.
- ^ Dirkjan Ochtman (27 Mayıs 2011). . Mozilla.org. 26 Mayıs 2012 tarihinde kaynağından arşivlendi. Erişim tarihi: 30 Haziran 2011.
- ^ . 4 Mart 2017 tarihinde kaynağından arşivlendi. Erişim tarihi: 3 Ağustos 2011.
- ^ "WebSockets (Windows)". Microsoft. 28 Eylül 2012. 25 Mart 2015 tarihinde kaynağından . Erişim tarihi: 7 Kasım 2012.
- ^ . Tavendo.de. 27 Ekim 2011. 22 Eylül 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 10 Aralık 2011.
- ^ Katie Marsal (23 Kasım 2010). . AppleInsider.com. 8 Kasım 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 9 Mayıs 2011.
- ^ . BlackBerry. 10 Haziran 2011 tarihinde kaynağından arşivlendi. Erişim tarihi: 8 Temmuz 2011.
- ^ Chris Heilmann (8 Aralık 2010). . Hacks.Mozilla.org. 6 Mart 2017 tarihinde kaynağından arşivlendi. Erişim tarihi: 9 Mayıs 2011.
- ^ Aleksander Aas (10 Aralık 2010). . My Opera Blog. 15 Aralık 2010 tarihinde kaynağından arşivlendi. Erişim tarihi: 9 Mayıs 2011.
- ^ Peter Beverloo. . peter.sh. 8 Nisan 2017 tarihinde kaynağından arşivlendi. Erişim tarihi: 10 Aralık 2011.
- ^ . developer.mozilla.org. Mozilla Foundation. 30 Eylül 2011. 26 Mayıs 2012 tarihinde kaynağından arşivlendi. Erişim tarihi: 10 Aralık 2011.
- ^ "Bug 640003 - WebSockets - upgrade to ietf-06". Mozilla Foundation. 8 Mart 2011. 1 Nisan 2021 tarihinde kaynağından . Erişim tarihi: 10 Aralık 2011.
- ^ . developer.mozilla.org. Mozilla Foundation. 30 Eylül 2011. 26 Mayıs 2012 tarihinde kaynağından arşivlendi. Erişim tarihi: 10 Aralık 2011.
- ^ "Bug 640003 - WebSockets - upgrade to ietf-07(comment 91)". Mozilla Foundation. 22 Temmuz 2011. 1 Nisan 2021 tarihinde kaynağından . Erişim tarihi: 8 Nisan 2017.
- ^ "Chromium bug 64470". code.google.com. Google. 25 Kasım 2010. 31 Aralık 2015 tarihinde kaynağından . Erişim tarihi: 10 Aralık 2011.
- ^ "WebSockets in Windows Consumer Preview". IE Engineering Team. Microsoft. 19 Mart 2012. 6 Eylül 2015 tarihinde kaynağından . Erişim tarihi: 23 Temmuz 2012.
- ^ "WebKit Changeset 97247: WebSocket: Update WebSocket protocol to hybi-17". trac.webkit.org. 5 Ocak 2012 tarihinde kaynağından . Erişim tarihi: 10 Aralık 2011.
- ^ . Opera Developer News. 3 Ağustos 2012. 5 Ağustos 2012 tarihinde kaynağından arşivlendi. Erişim tarihi: 3 Ağustos 2012.
- ^ Ian Fette; Alexey Melnikov (Aralık 2011), "1.2-Protocol Overview", RFC 6455 The WebSocket Protocol, , doi:10.17487/RFC6455, RFC 6455
- ^ . IETF. 22 Nisan 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 25 Temmuz 2015.
The computation [...] is meant to prevent a caching intermediary from providing a WS-client with an cached WS-server reply without actual interaction with the WS-server.
- ^ Ian Fette; Alexey Melnikov (Aralık 2011), "1.3-Opening Handshake", RFC 6455 The WebSocket Protocol, , p. 8, doi:10.17487/RFC6455, RFC 6455
- ^ Christian Schneider (31 Ağustos 2013). . Web Application Security Blog. 31 Aralık 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 8 Nisan 2017.
- ^ Peter Lubbers (16 Mart 2010). . C4Media Inc. 8 Mayıs 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 10 Aralık 2011.
- ^ Willy Tarreau (6 Temmuz 2010). "WebSocket -76 is incompatible with HTTP reverse proxies" (email). Internet Engineering Task Force. 17 Eylül 2016 tarihinde kaynağından . Erişim tarihi: 10 Aralık 2011.
- ^ Ian Fette (13 Haziran 2011).
Dış bağlantılar
- IETF Hypertext-Bidirectional (HyBi) çalışma grubu 15 Temmuz 2017 tarihinde Wayback Machine sitesinde .
- WebSocket protokolü - IETF HyBi Çalışma Grubu tarafından yayınlanan Önerilen Standart
- WebSocket protokolü1 Nisan 2020 tarihinde Wayback Machine sitesinde . - IETF HyBi Çalışma Grubu tarafından yayınlanan Internet Taslağı
- WebSocket protokolü 20 Mart 2017 tarihinde Wayback Machine sitesinde . - Ian Hickson tarafından verilen Asıl Protokol Önerisi
- WebSocket API7 Haziran 2015 tarihinde Wayback Machine sitesinde . - API'nin W3C Çalışma Taslağı tanımı
- WebSocket API 26 Nisan 2017 tarihinde Wayback Machine sitesinde . - API'nin W3C Aday Önerisi
- WebSocket.org16 Eylül 2018 tarihinde Wayback Machine sitesinde . WebSocket demoları, geridöngü testleri, genel bilgi ve topluluk
wikipedia, wiki, viki, vikipedia, oku, kitap, kütüphane, kütübhane, ara, ara bul, bul, herşey, ne arasanız burada,hikayeler, makale, kitaplar, öğren, wiki, bilgi, tarih, yukle, izle, telefon için, turk, türk, türkçe, turkce, nasıl yapılır, ne demek, nasıl, yapmak, yapılır, indir, ücretsiz, ücretsiz indir, bedava, bedava indir, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, resim, müzik, şarkı, film, film, oyun, oyunlar, mobil, cep telefonu, telefon, android, ios, apple, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, pc, web, computer, bilgisayar
WebSocket tek bir TCP baglantisi uzerinden tam cift yonlu iletisim kanali saglayan bir bilgisayar iletisim protokoludur WebSocket protokolu IETF tarafindan 2011 yilinda RFC 6455 ile standart hale getirilmis ve WebIDL icerisindeki WebSocket API W3C tarafindan standart hale getirilmektedir WebSocket WebSocket web tarayicilarinda ve web sunucularinda uygulanmak uzere tasarlanmistir fakat herhangi bir istemci veya sunucu uygulamasi tarafindan uygulanabilmektedir WebSocket protokolu TCP tabanli bagimsiz bir protokoldur HTTP ile tek iliskisi HTTP sunuculari tarafindan bir upgrade istegi olarak yorumlanmasidir WebSocket protokolu sunucuya ve sunucudan gercek zamanli veri aktarimini saglayarak tarayici ile web sunucusu arasinda etkilesimi saglamaktadir Bu sunucunun istemci istemeden tarayiciya icerik gonderebilecegi ve baglantiyi acik tutarak istedigi zaman mesaj alabilmesini veya gonderebilmesini saglayan standart bir yontem ile saglanmaktadir Bu sekilde tarayici ile sunucu arasinda iki yonlu devam eden bir iletisim gerceklesebilmektedir Iletisim TCP 80 portu veya TLS ile sifrelenmis baglantilarda 443 portu uzerinden gerceklesmektedir ve bu guvenlik duvari kullanarak Internet web trafigini engelleyen ortamlar icin bir avantaj olmaktadir Benzer iki yonlu sunucu tarayici iletisimi Comet gibi standart olmayan stopgap teknolojileri tarafindan saglanmaktaydi WebSocket protokolu Google Chrome Microsoft Edge Internet Explorer Firefox Safari ve Opera dahil pek cok tarayici tarafindan desteklenmektedir WebSocket ayrica sunucu uzerindeki web uygulamalarinin da destegini gerektirmektedir Genel bakisHTTP den farkli olarak WebSocket protokolu tam cift yonlu iletisim saglamaktadir Ilave olarak WebSocket TCP protokolunun uzerinde mesaj akisina imkan tanimaktadir TCP tek basina mesaj kavrami kullanmadan byte akisi ile ilgilenmektedir WebSocket protokolunden once 80 protokolu uzerinden tam cift yonlu iletisim Comet kanallari uzerinden yapilabilmekteydi fakat Comet uygulamasi cok yaygin degildir ve TCP el sikismasi ve HTTP basliklari yuzunden kucuk mesajlar icin verimsiz olmaktadir WebSocket protokolu webin guvenlik ilkelerini etkilemeksizin bu problemleri cozmeyi amaclamaktadir WebSocket protokolu tanimi sifreli ve sifresiz trafik icin kullanilan iki yeni uniform resource identifier URI formati olan ws ve wss ifadelerini tanimlamaktadir Sema adi ve fragment disinda desteklenmemektedir diger URI bilesenleri icin genel URI bicimini kullanacak sekilde tanimlanmistir Tarayicinin Gelistirici Araclarini kullanarak gelistiriciler WebSocket paketleri ile WebSocket el sikismasini inceleyebilmektedir TarihWebSocket HTML5 taniminda ilk olarak TCP tabanli soket API si yerine TCPConnection olarak anilmistir Haziran 2008 de Michael Carter tarafindan WebSocket olarak bilinen protokolun ilk versiyonu olan bir takim calisma gerceklestirilmistir Bunun uzerine kisa bir sure sonra Ian Hickson ve Michael Carter tarafindan whatwg IRC chat odasindaki isbirligi ile WebSocket ismi verilmistir ve sonrasinda Ian Hickson tarafindan HTML5 taniminda yer alacak sekilde yazilmistir ve Michael Carter tarafindan bir blog uzerinde duyurulmustur Aralik 2009 da varsayilan olarak WebSocket protokolu standartlarini tamamen uygulayan ilk tarayici Google Chrome 4 olmustur Sonrasinda Subat 2010 da WebSocket protokolunun gelistirilmesi W3C ve whatwg IRC grubundan IET ye gecmistir ve Ian Hickson gozetiminde iki degisime ugramistir Protokol tamamlandiktan ve birden cok tarayici tarafindan varsayilan olarak desteklendikten sonra Aralik 2011 de Ian Fette gozetiminde RFC tamamlanmistir Browser implementationWebSocket protokolunun guvenli bir versiyonu Firefox 6 Safari 6 Google Chrome 14 Opera 12 10 ve Internet Explorer 10 tarafindan uygulanmaktadir Detayli bir protokol test raporu bu tarayicilarin spesifik protokol ozelliklerine uyumlulugunu listelemektedir Protokolun daha eski ve daha az guvenli bir versiyonu Opera 11 Safari 5 ve iOS 4 2 de bulunan Safari mobil versiyonunda uygulanmistir iOS7 deki BlackBerry tarayicisi WebSocket protokolunu uygulamaktadir Acikliklar yuzunden Firefox 4 ve 5 ile Opera 11 uzerinde devre disi birakilmistir Ayrica SPDY uzerinde WebSocket protokolunun deneysel bir uygulamasina imkan taniyan Google Chrome icin enable websocket over spdy bulunmaktadir Desteklenme Durumu Protokol Taslak Tarihi Internet Explorer Firefox PC Firefox Android Chrome PC Mobile Safari Mac iOS Opera PC Mobile Android Browserhixie 7517 Mart 2017 tarihinde Wayback Machine sitesinde 4 Subat 2010 4 5 0 0hixie 76 20 Mart 2017 tarihinde Wayback Machine sitesinde hybi 00 20 Mart 2017 tarihinde Wayback Machine sitesinde 6 Mayis 2010 23 Mayis 2010 4 0 devre disi birakildi 6 5 0 1 11 00 disabled 7 hybi 07 20 Mart 2017 tarihinde Wayback Machine sitesinde 22 Nisan 2011 68 hybi 10 20 Mart 2017 tarihinde Wayback Machine sitesinde 11 Temmuz 2011 7 7 1413 RFC 6455 Aralik 2011 10 11 11 16 6 12 10 4 4Protokol El SikismasiBir WebSocket baglantisi kurmak icin istemci asagidaki ornekte gosterildigi gibi sucununun WebSocket el sikisma cevabi gonderdigi bir WebSocket el sikisma istegi gondermektedir Istemci istegi HTTP de oldugu gibi her bir satir r n ile bitmektedir ve sonda ilave bir bos satir bulunmak zorundadir GET chat HTTP 1 1 Host server example com Upgrade websocket Connection Upgrade Sec WebSocket Key x3JJHMbDL1EzLkh9GBhXDw Sec WebSocket Protocol chat superchat Sec WebSocket Version 13 Origin http example com Sunucunun cevabi HTTP 1 1 101 Switching Protocols Upgrade websocket Connection Upgrade Sec WebSocket Accept HSmrc0sMlYUkAGmm5OPpG2HaGWk Sec WebSocket Protocol chat El sikisma sunucularin ayni port uzerinden hem HTTP baglantilarini hem de WebSocket baglantilarini isleyebilmesi acisindan HTTP ye benzemektedir Baglanti kuruldugunda iletisim HTTP protokolune uymayan iki tarafli bir ikili protokole donusmektedir Upgrade basligina ek olarak istemci base64 ile kodlanmis rastgele bytelardan olusan bir Sec WebSocket Key basligini da gondermektedir Sunucu ise Sec WebSocket Accept basligi ile anahtar degerinin ozeti ile cevap vermektedir Bu yontem onceki bir WebSocket trafiginin tekrar oynatilmasini engellemeye calismaktadir ve herhangi bir kimlik dogrulama gizlilik veya butunluk kontrolu saglamamaktadir Ozet fonksiyonu 258EAFA5 E914 47DA 95CA C5AB0DC85B11 sabit degerini Sec WebSocket Key basligindaki base64 kodlamasi cozulmemis degere eklemekte SHA 1 ozet fonksiyonunu uygulamakta ve sonucu base64 kullanarak kodlamaktadir Baglanti kurulduktan sonra istemci ve sunucu WebSocket verisini tam cift yonlu modda gonderebilmektedir Veri payload tarafindan takip edilen kucuk bir baslik ile minimal bir sekilde cercevelenmektedir WebSocket iletisimi tek bir mesajin birkac veri cercevesi icerisine dagilabilecegi mesajlarla tanimlanmaktadir Bu verinin ilk kisminin bilindigi fakat mesajin toplam buyuklugunun bilinmedigi durumlarda mesajlarin gonderilebilmesine izin vermektedir FIN biti ile isaretlenip sona erisilene kadar veri cercevelerini arka arkaya gondermektedir Protokol uzerinde yapilan eklentilerle farkli veri akislarinin es zamanli olarak coklanmasi icin de kullanilabilmektedir ornegin bir soketin kullanimini tek bir buyuk payload icin tekellestirilmesini onlemek icin Guvenlik acisindan Sunucu tarafinda baglanti kurulurken Origin basliginin dogrulanmasi Siteler Arasi WebSocket Calma Cross Site WebSocket Hijacking saldirilarina karsi koruma acisindan onem tasimaktadir Bu saldiri baglanti cerezler veya HTTP kimlik dogrulamasi ile dogrulandiginda mumkun olabilmektedir WebSocket uzerinden hassas veriler iletilirken WebSocket baglantisini dogrulamak icin token veya benzer koruma mekanizmalarinin kullanilmasi faydali olacaktir Proxy gecisiWebSocket protokolu istemci uygulamalari web tarayicisinin hedef makine ve porta baglanirken bir vekil sunucu kullanip kullanmadigini tespit etmeye calismaktadir ve eger kullaniyorsa kalici bir tunel olusturmak icin HTTP CONNECT metodunu kullanmaktadir WebSocket protokolunun kendisi vekil sunucularin ve guvenlik duvarlarinin farkinda olmasa da HTTP ye uygun bir el sikismayi desteklemektedir ve boylece HTTP sunucularinin varsayilan HTTP ve HTTPS portlarini 80 ve 443 bir WebSocket ag gecidiyle veya sunucusuyla paylasmasina izin vermektedir WebSocket protokolu WebSocket ve Guvenli WebSocket baglantilarini belirtmek icin ws ve wss oneklerini tanimlamaktadir Her iki yontemde baglantiyi WebSocket a yukseltmek icin bir HTTP yukseltme mekanizmasi kullanmaktadir Bazi vekil sunucular seffaftir ve WebSocket ile calisabilmektedir digerleri ise WebSocket protokolunun calismasini engelleyecektir ve baglantinin sonlanmasina yol acacaktir Bazi durumlarda ilave vekil sunucu yapilandirmasi gerekebilmektedir ve bazi vekil sunucularin WebSocket protokolunu desteklemesi icin yukseltilmesi gerekebilmektedir Eger sifrelenmemis WebSocket trafigi WebSocket destegi olmayan bir seffaf vekil sunucu uzerinden akiyorsa baglanti muhtemelen basarisiz olacaktir Eger sifreli WebSocket baglantisi kullaniliyorsa Guvenli WebSocket baglantisinda Transport Layer Security TLS kullanilmasi tarayici bir vekil sunucu kullanacak sekilde yapilandirildiginda HTTP CONNECT komutunun calistirilmasini saglamaktadir Bu Guvenli WebSocket istemcisi ile WebSocket sunucusu arasinda HTTP vekil sunucusu araciligiyla dusuk seviye birebir TCP iletisimini saglayan bir tunel kurmaktadir Seffaf vekil sunucularda tarayici vekil sunucunun varligindan habersizdir ve hicbir HTTP CONNECT paketi yollanmamaktadir Ancak kablodaki trafik sifreli oldugu icin aradaki seffaf vekil sunucular sifreli trafigin gecmesine izin verebilmektedir Bu yuzden Guvenli WebSocket kullanildiginda WebSocket baglantisinin basarili olma ihtimali artmaktadir Sifrelemenin olmasi kaynak kullanimi acisindan bir miktar yuk olusturacaktir fakat guvenli bir tunel uzerinden gecebilecegi icin daha yuksek bir basari orani saglamaktadir 2010 ortalarinda verilen bir taslak hixie 76 versiyonu ters vekil sunucularla ve ag gecitleriyle uyumlulugu basliklardan sonra 8 byte dan olusan bir anahtar ekledigi ve bu anahtari Content Length 8 basliginda belirtmedigi icin bozmustur Bu veri tum aradaki cihazlar tarafindan iletilmeyecegi icin protokol basarisizligina yol acabilmektedir Bu yuzden daha yeni taslaklar ornegin hybi 09 bu problemi cozerek anahtar veriyiSec WebSocket Key basligina koymaktadir Ayrica bakinizNotlar a b Gecko based browsers versions 6 10 implement the WebSocket object as MozWebSocket requiring extra code to integrate with existing WebSocket enabled code Kaynakca Ian Fette Alexey Melnikov Aralik 2011 1 7 Relationship to TCP and HTTP RFC 6455 The WebSocket Protocol doi 10 17487 RFC6455 RFC 6455 Glossary WebSockets Mozilla Developer Network 2015 14 Eylul 2016 tarihinde kaynagindan Erisim tarihi 8 Nisan 2017 1 Nisan 2021 tarihinde kaynagindan arsivlendi Erisim tarihi 8 Nisan 2017 Graham Klyne Ed 14 Kasim 2011 Internet Assigned Numbers Authority 25 Nisan 2013 tarihinde kaynagindan arsivlendi Erisim tarihi 10 Aralik 2011 Ian Fette Alexey Melnikov Aralik 2011 3 WebSocket URIs RFC 6455 The WebSocket Protocol doi 10 17487 RFC6455 RFC 6455 Wang Vanessa Salim Frank Moskovits Peter Subat 2013 APPENDIX A WebSocket Frame Inspection with Google Chrome Developer Tools Apress ISBN 978 1 4302 4740 1 31 Aralik 2015 tarihinde kaynagindan arsivlendi Erisim tarihi 7 Nisan 2013 www w3 org 16 Eylul 2016 tarihinde kaynagindan arsivlendi Erisim tarihi 17 Nisan 2016 lists w3 org 27 Nisan 2016 tarihinde kaynagindan arsivlendi Erisim tarihi 17 Nisan 2016 krijnhoetmer nl 21 Agustos 2016 tarihinde kaynagindan arsivlendi Erisim tarihi 18 Nisan 2016 23 Nisan 2016 tarihinde kaynagindan arsivlendi Erisim tarihi 17 Nisan 2016 Chromium Blog Ingilizce 31 Mart 2017 tarihinde kaynagindan arsivlendi Erisim tarihi 17 Nisan 2016 lt ian hixie ch gt Ian Hickson The WebSocket protocol tools ietf org 17 Mart 2017 tarihinde kaynagindan Erisim tarihi 17 Nisan 2016 lt ian hixie ch gt Ian Hickson The WebSocket protocol tools ietf org 6 Mart 2017 tarihinde kaynagindan Erisim tarihi 17 Nisan 2016 Dirkjan Ochtman 27 Mayis 2011 Mozilla org 26 Mayis 2012 tarihinde kaynagindan arsivlendi Erisim tarihi 30 Haziran 2011 4 Mart 2017 tarihinde kaynagindan arsivlendi Erisim tarihi 3 Agustos 2011 WebSockets Windows Microsoft 28 Eylul 2012 25 Mart 2015 tarihinde kaynagindan Erisim tarihi 7 Kasim 2012 Tavendo de 27 Ekim 2011 22 Eylul 2016 tarihinde kaynagindan arsivlendi Erisim tarihi 10 Aralik 2011 Katie Marsal 23 Kasim 2010 AppleInsider com 8 Kasim 2016 tarihinde kaynagindan arsivlendi Erisim tarihi 9 Mayis 2011 BlackBerry 10 Haziran 2011 tarihinde kaynagindan arsivlendi Erisim tarihi 8 Temmuz 2011 Chris Heilmann 8 Aralik 2010 Hacks Mozilla org 6 Mart 2017 tarihinde kaynagindan arsivlendi Erisim tarihi 9 Mayis 2011 Aleksander Aas 10 Aralik 2010 My Opera Blog 15 Aralik 2010 tarihinde kaynagindan arsivlendi Erisim tarihi 9 Mayis 2011 Peter Beverloo peter sh 8 Nisan 2017 tarihinde kaynagindan arsivlendi Erisim tarihi 10 Aralik 2011 developer mozilla org Mozilla Foundation 30 Eylul 2011 26 Mayis 2012 tarihinde kaynagindan arsivlendi Erisim tarihi 10 Aralik 2011 Bug 640003 WebSockets upgrade to ietf 06 Mozilla Foundation 8 Mart 2011 1 Nisan 2021 tarihinde kaynagindan Erisim tarihi 10 Aralik 2011 developer mozilla org Mozilla Foundation 30 Eylul 2011 26 Mayis 2012 tarihinde kaynagindan arsivlendi Erisim tarihi 10 Aralik 2011 Bug 640003 WebSockets upgrade to ietf 07 comment 91 Mozilla Foundation 22 Temmuz 2011 1 Nisan 2021 tarihinde kaynagindan Erisim tarihi 8 Nisan 2017 Chromium bug 64470 code google com Google 25 Kasim 2010 31 Aralik 2015 tarihinde kaynagindan Erisim tarihi 10 Aralik 2011 WebSockets in Windows Consumer Preview IE Engineering Team Microsoft 19 Mart 2012 6 Eylul 2015 tarihinde kaynagindan Erisim tarihi 23 Temmuz 2012 WebKit Changeset 97247 WebSocket Update WebSocket protocol to hybi 17 trac webkit org 5 Ocak 2012 tarihinde kaynagindan Erisim tarihi 10 Aralik 2011 Opera Developer News 3 Agustos 2012 5 Agustos 2012 tarihinde kaynagindan arsivlendi Erisim tarihi 3 Agustos 2012 Ian Fette Alexey Melnikov Aralik 2011 1 2 Protocol Overview RFC 6455 The WebSocket Protocol doi 10 17487 RFC6455 RFC 6455 IETF 22 Nisan 2016 tarihinde kaynagindan arsivlendi Erisim tarihi 25 Temmuz 2015 The computation is meant to prevent a caching intermediary from providing a WS client with an cached WS server reply without actual interaction with the WS server Ian Fette Alexey Melnikov Aralik 2011 1 3 Opening Handshake RFC 6455 The WebSocket Protocol p 8 doi 10 17487 RFC6455 RFC 6455 Christian Schneider 31 Agustos 2013 Web Application Security Blog 31 Aralik 2016 tarihinde kaynagindan arsivlendi Erisim tarihi 8 Nisan 2017 Peter Lubbers 16 Mart 2010 C4Media Inc 8 Mayis 2016 tarihinde kaynagindan arsivlendi Erisim tarihi 10 Aralik 2011 Willy Tarreau 6 Temmuz 2010 WebSocket 76 is incompatible with HTTP reverse proxies email Internet Engineering Task Force 17 Eylul 2016 tarihinde kaynagindan Erisim tarihi 10 Aralik 2011 Ian Fette 13 Haziran 2011 Dis baglantilarIETF Hypertext Bidirectional HyBi calisma grubu 15 Temmuz 2017 tarihinde Wayback Machine sitesinde WebSocket protokolu IETF HyBi Calisma Grubu tarafindan yayinlanan Onerilen Standart WebSocket protokolu1 Nisan 2020 tarihinde Wayback Machine sitesinde IETF HyBi Calisma Grubu tarafindan yayinlanan Internet Taslagi WebSocket protokolu 20 Mart 2017 tarihinde Wayback Machine sitesinde Ian Hickson tarafindan verilen Asil Protokol Onerisi WebSocket API7 Haziran 2015 tarihinde Wayback Machine sitesinde API nin W3C Calisma Taslagi tanimi WebSocket API 26 Nisan 2017 tarihinde Wayback Machine sitesinde API nin W3C Aday Onerisi WebSocket org16 Eylul 2018 tarihinde Wayback Machine sitesinde WebSocket demolari geridongu testleri genel bilgi ve topluluk