HTTP/2
HTTP/2 (orijinal ismi HTTP/2.0) Dünya Çapında Ağ Birliği (Wold Wide Web ) tarafından kullanılan HTTP ağ protokolünün ikinci ana sürümüdür. SPDY tabanlıdır.[1] HTTP/2,[2] İnternet Mühendisliği Çalışma Kolu’nun (Internet Engineering Task Force) Hiper Metin İletim Protokolü çalışma grubu( httpbis, bis burada “tekrar” veya “iki defa” anlamına gelmektedir.) tarafından geliştirilmiştir.[3] HTTP/2, 1997’de RFC 2068 bünyesinde standart haline getirilen HTTP 1.1’den beri gelen ilk yeni HTTP sürümüdür. Çalışma grubu HTTP/2’yi IESG’ye (Internet Engineering Steering Group – İnternet Mühendisliği Yürütme Grubu ) önerilen standart olarak incelenmesi için 2014 Aralık ayında sunmuştur[4][5] ve IESG 17 Şubat 2015’de bunun önerilen standart olarak yayınlanmasını onaylamıştır.[6][7] HTTP/2 belirtimi 2015 Mayıs ayında RFC 7540 olarak yayınlanmıştır.[8]
Standartlaştırma çabası Chrome, Opera, Firefox, Internet Explorer 11, Safari, Amazon Silk ve Edge tarayıcıları tarafından desteklenmiştir.[9] Çoğu ana tarayıcı 2015 sonuna kadar HTTP/2 desteğini sağlamıştır.
W3Techs‘e göre, 2015 Kasım ayı gibi en iyi 10 milyon web sitesinin %2,3’ü HTTP/2’yi destekleyecektir. [10]
Amaçlar
Çalışma grubu tüzüğü çeşitli amaç ve endişe verici sorunlardan bahseder:[3]
- İstemci ve sunuculara HTTP1.1, 2.0 ve potansiyel HTTP olmayan protokolleri seçmeye izin veren uzlaşma mekanizması.
- HTTP 1.1 ile yüksek seviyede uyumluluğu sürdürmek ( örneğin talep metotları, durum kodları, tekdüzen kaynak tanımlayıcıları - URI ve diğer başlık alanları-header field ile uyumluluk)
- Aşağıdakiler göz önünde tutularak web tarayıcılarındaki sayfa yüklenme hızını yükseltmek için gecikme süresini azaltmak:
- HTTP başlıklarının veri sıkıştırması
- Sunucu itme (push) teknolojileri
- Taleplerin Boru hattı
- HTTP 1'deki satır başı engelleme sorununu(head-of-line blocking) çözmek
- Tekil bir TCP(İletim Kontrol Protokolü) bağlantısı üzerindeki birden fazla talebi çoklama
- Masaüstü web tarayıcıları, mobil web tarayıcıları, web API'leri (Uygulama programlama arayüzü), çeşitli ölçekteki web sunucuları, güvenlik duvarları ve içerik dağıtım ağları (CDN) gibi yaygın kullanımı olan HTTP örneklerini desteklemek
HTTP 1.1'den Farkları
Amaçlanan değişiklikler, mevcut web uygulamalarının çalışma şeklinde herhangi bir değişimi gerektirmez ama yeni uygulamalar artırılmış hız avantajını kullanabilirler.[11]
HTTP/2; talep metotları, durum kodları ve tekdüzen kaynak tanımlayıcıları- URI gibi HTTP 1.1'in yüksek seviyeli söz dizimlerinin çoğunu olduğu gibi bırakmaktadır. Değiştirilen unsur ise verinin sunucu ve istemci arasında çerçevelenme ve taşınma şeklidir.[11]
Yüksek verimli web siteleri, resim ve yazı betikleri gibi kaynakları minifying (kodun işlevinde bir kayba neden olmadan, kod miktarını azaltmak ve kod demetine giren kodları daha küçük boyutlarda paketlemek) yaparak tüm bir sayfayı oluşturmak için gereken talep sayısını en düşük seviyeye çeker. Fakat minifying yöntemi ne gerektiği kadar elverişlidir ne de verimli ve hala sayfaya ve minify edilmiş kaynaklara ulaşmak için ayrı HTTP bağlantısı talep edebilir. HTTP/2, sunucuya istemcinin talep ettiğinden daha fazla sorgu için veri ile cevap vermek adına olan itici içeriğe izin vermektedir. Bu ilk yanıtı incelemek adına tarayıcıyı beklemeksizin ve fazladan bir talep çevriminin ek yükü olmaksızın sunucuya bir web tarayıcısının bir web sayfasını oluşturmak için ihtiyaç duyacağını bilen veriyi sağlamaya izin verir.[12]
HTTP/2'nin ilk taslağında (SPDY'nin bir kopyası idi) yer alan ek performans gelişimleri, HTTP 1( HTTP Boru hattı kullanılmış olsa bile ) başlık sıkıştırma ve taleplerin önceliklerindeki başlık satırı engelleme sorunundan kaçınmak için talep ve yanıtları çoklamaktan gelmektedir. .[13]
SPDY'den başlangıçtaki ve sonraki farklılıklar
SPDY ( "speedy" olarak telaffuz edilir) Google tarafından öncülük edilen bir araştırma projesi ile geliştirilen önceki bir HTTP yenileme protokolüdür.[14] SPDY esasen gecikme süresini azaltmaya odaklanır. SPDY aynı TCP borusunu kullanır ama gecikmeyi azaltmak için farklı protokol kullanır. SPDY'yi oluşturmak için HTTP 1.1'e yapılan temel değişiklikler: "FIFO sınırlamaları olmaksızın doğru talep boru hatlanması, sunucu ve istemci gelişimini basitleştirmek için ileti çevreleme mekanizması, zorunlu sıkıştırma (başlıklar dahil), öncelikli zamanlama ve hatta çift yönlü iletişim".[15]
httpbis çalışma grubu Google'ın SPDY protokolünü, Microsoft'un HTTP Speed+Mobility önerisini (SPDY tabanlıdır),[14] ve Ağ Uyumlu HTTP Yükseltilmesini inceledi.[16] 2012 Temmuz ayında Facebook her bir öneri için geri bildirim sağladı ve SPDY tabanlı HTTP/2'yi önerdi.[17] HTTP/2'nin ilk taslağı 2012 Kasım ayında yayınlandı ve SPDY'nin doğrudan bir kopyasına dayanıyordu.[18]
HTTP/1.1 ve SPDY arasındaki en büyük fark SPDY'de her bir kullanıcı hareketine kullanıcıdan sunucuya tekil bir TCP kanalı bağlantısı olduğu manasına gelen bir akış kimlik numarası verilmesidir. SPDY talepleri ya kontrole ya da "ikili protokolü iki tür çerçeve ile bölmesi kolay"[15] olan veriye böler. SPDY yeni sayfa yüklenme hızında %11.81'den %47.7'e kadar uzanan artış ile HTTP'ye göre belirgin gelişim göstermiştir.[19]
SPDY kullanan HTTP/2 gelişimi bir başlangıç noktası gibidir. Protokol arasında birçok detaylı farklılığın içinde en göze çarpıcı olanı HTTP/2'nin SPDY'nin dinamik akım tabanlı sıkıştırma yerine sabit bir Huffman kodu tabanlı başlık sıkıştırma algoritması kullanmasıdır. Bu CRIME saldırıları gibi protokol üzerindeki sıkıştırmayı kullanan saldırıların(compression oracle attacks) olasılığını düşürmekte faydalı olur.
9 Şubat 2015'de, Google HTTP/2'ye destek amacıyla Chrome 40 ile başlayarak 2016'dan önce Chome bünyesinde SPDY desteğini kaldırmayı planladığını belirtti.[20]
Şifreleme
HTTP/2, HTTP URI'leri (başka bir deyişle şifrelemesiz) ve HTTPS URI'lerinin (TLS üzerinde, TLS 1.2 veya daha yenisi gerektiği yerlerde) ikisi için de tanımlanmıştır.[21]
Standart kendi başına şifreleme kullanımı gerektirmemesine rağmen,[22] çoğu istemci uygulamaları (Firefox,[23] Chrome, Safari, Opera, IE, Edge) fiilen şifrelemeyi zorunlu hale getiren sadece TLS üzerindeki HTTP/2 desteğini sağlayacaklarını belirttiler.[24]
Eleştiriler
HTTP/2'nin gelişim süreci ve protokolün kendisi eleştiri ile karşılaşmıştır.
FreeBSD ve Varnish (bir çeşit HTTP hızlandırıcı) geliştiricisi Poul-Henning Kamp standartın gerçekçi olmayan bir zaman diliminde hazırlandığını, yeni HTTP/2 için SPDY protokolü haricinde herhangi bir temelin göz ardı edildiğini ve geliştirmeler için diğer olanakların kaçırıldığını iddia etti.[25] Kamp protokolün kendisinin tutarsız, lüzumsuz ve bunaltıcı şekilde karmaşık olmasını eleştirdi.[25] O ayrıca protokolün, protokol katmanlandırma prensiplerini örneğin iletim katmanı (TCP) ile akım kontrolünü kopyalayarak ihlal ettiğini belirtti.[25] Bununla birlikte kaygıların çoğu, şifreleme sorunları ile ilgiliydi.
Şifreleme
İlk olarak çalışma grubunun bazı üyeleri protokole bir şifrelemenin gerekliliği konusunda baskı oluşturmaya çalıştı. Bu eleştiri ile karşılaştı.
Eleştirmenler şifrelemenin göz ardı edilemez hesaplama maliyetleri olduğunu (mevcut veri tersini gösterse bile[26]), birçok HTTP uygulamasının gerçekte şifrelemeye ihtiyacı olmadığını ve onların sağlayıcılarının şifreleme için ayrı bir kaynak harcamaya dair isteklerinin olmadığını belirttiler.Varnish hızlandırıcısının öncü geliştiricisi ve kıdemli FreeBSD çekirdek geliştiricisi Poul-Henning Kamp, IETF'yi HTTP/2 hakkında özel bir politik gündem izlediği için eleştirdi.[25][27][28] Mevcut sertifika sistemi içinde zorunlu şifreleme gündemi eleştirileri ne yeni değil, ne de açık kaynak topluluğu için tek örnek değil – bir Cisco çalışanı 2013 yılı içinde mevcut sertifika modelinin yönlendirici gibi küçük aygıtlar için uyumlu olmadığını, çünkü mevcut modelin sadece yıllık başvuru ve her bir sertifika için önemsiz olmayan katkı payı indirimini gerektirmediğini, ama sürekli olarak bir yıllık temel düzeyde tekrar etmesi gerektiğini belirtti.[29] Şifrelemeyi fiili bir gereklilik haline getiren çoğu istemci uygulamasının onu talep etmesine rağmen, çalışma grubu son durumda zorunlu şifreleme üzerinde bir fikir birliğine ulaşamadı[22] .
HTTP/2 protokolü ayrıca SMTP gibi diğer internet protokollerinde uzun süre elverişli olmuş STARTTLS mekanizmasına benzer pasif izleme karşısında bir önlem olan opportunistic encryption (oportünist şifreleme) desteği sunmaması nedeniyle eleştiri ile karşılaştı. Eleştirmenler HTTP/2 önerisinin IETF'in kendinin ve En İyi Mevcut Uygulama(Best Current Practise, mühendislik ve bilgi teknolojilerinde filli bir performans seviyesi) 188 statüsüne sahip olan [rfc:7258 RFC7258 "Pervasive Monitoring Is an Attack"](Saldırıcı olan nüfuz eden izleme) standardına ihlal yaptığını belirtti.[30] RFC7258/BCP188 pasif izlemenin bir saldırı olarak izlenmesini ve IETF tarafından tasarlanan protokollerin pasif izleme karşısında korunma için girişimde bulunmasını (örneğin, oportünist şifrelemenin kullanılması yolu ile) şart koşar. Çalışma grubunun resmi bir çalışma kalemi draft-ietf-httpbis-http2-encryption-01 olan oportünist şifreleme için birtakım şartname onaylandı.[31][32][33]
Gelişim Aşamaları
Durum | Tarih | Aşama[3] |
---|---|---|
Yapıldı | 20 Aralık 2007[34][35] | İlk HTTP 1.1 Revizyon İnternet Taslağı |
Yapıldı | 23 Ocak 2008[36] | İlk HTTP Güvenlik Özellikleri İnternet Taslağı |
Yapıldı | 2012 Öncesi [37] | HTTP 2.0 Öneri Çağrısı |
Yapıldı | 14 Ekim - 25 Kasım 2012[38][39] | HTTP 1.1 Revisyonu için son Çalışma Grubu çağrısı |
Yapıldı | 28 Kasım 2012[40][41] | HTTP 2.0'ın draft-mbelshe-httpbis-spdy-00'a dayalı ilk Ç.G. taslağı |
Beklemede/
Elenmiş |
---- | HTTP Güvenlik Özellikleri için Çalışma Grubu Son Çağrısı |
Yapıldı | Eylül 2013[42][43] | IESG'ye HTTP1.1 Revizyonu'un Standart Önerisi olarak kayıtı |
Yapıldı | 12 Şubat 2014[44] | IESG approved HTTP 1.1 Revizyonunu Standart Önerisi olarak yayınlanmasını onayı |
Yapıldı | 6 Haziran 2014[34][45] | HTTP 1.1 Revizyonun yayını, şunlar olarak: RFC [rfc:7230 7230], [rfc:7231 7231], [rfc:7232 7232], [rfc:7233 7233], [rfc:7234 7234], [rfc:7235 7235] |
Yapıldı | 1 Ağustos 2014 - 1 Eylül 2014[5][46] | HTTP/2 için Çalışma Grubu Son Çağrısı |
Yapıldı | 16 Aralık 2014[4] | HTTP/2'nin IESG'ye Standart Önerisi olarak kayıtı |
Yapıldı | 31 Aralık 2014 – 14 Ocak 2015[47] | IETF 'nin HTTP/2 için Son Çağrısı |
Yapıldı | 22 Ocak 2015[48] | HTTP/2'nin Standart Önerisi olarak incelenmesi için IESG telekonferansı |
Yapıldı | 17 Şubat 2015[6] | IESG'nin HTTP/2'yi Standart Önerisi olarak yayınlaması |
Yapıldı | 14 Mayıs 2015[49] | HTTP/2'nin RFC 7540 olarak yayınlanması |
HTTP/HTTPS sunucular
- Akamai Edge Servers HTTP/2'yi destekler. http2.akamai.com Akamai'nin HTTP/2 uygulamasını vitrine sunar.
- Apache 2.4.12 mod_h2 modülü vasıtası ile HTTP/2'yi destekler,[50] sunucunun o modülü desteklemesi için uygun paketlerin sunucunun kaynak kodlarına uygulanması gerekliliğine rağmen. Apache 2.4.17'nin tüm paketleri Apache kaynak ağacında yer alır, modülün kendi mod_http2 olarak yeniden adlandırılmasına rağmen.[51] SPDY'nin eski sürümleri mod_spdy vasıtasıyla desteklenirdi,[52] bununla birlikte modülün gelişimi durdu.[53]
- Apache Traffic Server HTTP/2'yi destekler.[54]
- CDN77 - Content Delivery Network (İçerik İletim Ağı) NGINX kullanan HTTP/2'yi destekler (20 Ağustos 2015). http2demo.io CDN77'nin HTTP/2 uygulamasının bir gösterimidir.
- Citrix NetScaler 11.x HTTP/2'yi destekler.[55]
- Sucuri HTTP/2'yi destekler.[56]
- CloudFlare HTTP/2'yi destekler.[57]
- F5 BIG-IP Local Traffic Manager 11.6 (Yerel Trafik Yöneticisi)HTTP/2'yi destekler.[58]
- h2o her yönüyle HTTP/2 desteği için oluşturulmuştur.[59]
- Imperva Incapsula CDN HTTP/2'yi destekler.[60] http2.incapsula.com Incapsula'nın HTTP/2 uygulama gösterimidir. Uygulama WAF ve DDoS hafifletme özelliklerini için de destek içerir.
- Jetty 9.3 HTTP/2'yi destekler.[61]
- KeyCDN NGINX kullanan HTTP/2'yi destekler ( 6 Ekim 2015). HTTP/2 Test eğer sunucunuzun HTTP/2 desteğini teyit için test sayfasıdır.
- LiteSpeed Web Server 5.0 HTTP/2'yi destekler.[62]
- Microsoft IIS HTTP/2'yi destekler, Windows 10[63] ve Windows Server 2016 bünyesinde.
- nginx 1.9.5 HTTP/2'yi destekler.[64]
- OpenLiteSpeed 1.3.11 ve 1.4.8 HTTP/2'yi destekler.[65]
- Proxygen HTTP/2'yi destekler.
- Radware Alteon NG TTP/2'yi destekler.[66]
- Warp (Haskell web sunucu, Yesod'da varsayılan olarak kullanım) HTTP/2'yi destekler.
- Wildfly 9 HTTP/2'yi destekler.
- Planlanmamış
- lighttpd planlanmış 1.x. sürümlerinde SPDY veya HTTP/2 için desteğe sahip değildir..[67]
- Uygulamalar
- Diğer uygulamalar şurada toplanılmaktadır: GitHub HTTP/2 wiki.
Şunlara da bakabilirsiniz
- HTTP pipelining
- QUIC
- SPDY
- WebSocket
- Comparison of web browsers#Protocol support
Referanslar
- ↑ Bright, Peter (Feb 18, 2015).
- ↑ Thomson, M. (ed.
- 1 2 3 "Hypertext Transfer Protocol Bis (httpbis) - Charter".
- 1 2 "History for draft-ietf-httpbis-http2-16".
- 1 2 Raymor, Brian (August 7, 2014).
- 1 2 The IESG (February 17, 2015).
- ↑ Mark Nottingham (February 18, 2015).
- ↑ "RFC 7540 - Hypertext Transfer Protocol Version 2 (HTTP/2)".
- ↑ "Can the rise of SPDY threaten HTTP?". blog.restlet.com.
- ↑ "Usage of HTTP/2 for websites".
- 1 2 Ilya Grigorik.
- ↑ Pratt, Michael.
- ↑ Dio Synodinos (November 2012).
- 1 2 Sebastian Anthony (March 28, 2012).
- 1 2 Grigorik, Ilya.
- ↑ Willy Tarreau; Amos Jeffries; Adrien de Croy; Poul-Henning Kamp (March 29, 2012).
- ↑ Doug Beaver (July 15, 2012).
- ↑ Dio Synodinos (2012-11-30).
- ↑ "SPDY: An experimental protocol for a faster web".
- ↑ Chris Bentzel; Bence Béky (2015-02-09).
- ↑ Belshe, M.; Peon, R.; Thomson, M. "Hypertext Transfer Protocol Version 2, Use of TLS Features".
- 1 2 "HTTP/2 Frequently Asked Questions".
- ↑ "Networking/http2".
- ↑ "mnot’s blog: HTTP/2 Implementation Status".
- 1 2 3 4 Kamp, Poul-Henning (2015-01-06).
- ↑ https://istlsfastyet.com/
- ↑ Kamp, P. H. (2015).
- ↑ Kamp, Poul-Henning (2015-01-07).
- ↑ Lear, Eliot (2013-08-25).
- ↑ Murenin, Constantine A. (2015-01-09).
- ↑ Paul Hoffman. "draft-hoffman-httpbis-minimal-unauth-enc-01 - Minimal Unauthenticated Encryption (MUE) for HTTP-2".
- ↑ Mark Nottingham; Martin Thomson. "draft-nottingham-http2-encryption-03 - Opportunistic Encryption for HTTP URIs".
- ↑ Mark Nottingham; Martin Thomson. "draft-ietf-httpbis-http2-encryption-01 - Opportunistic Security for HTTP".
- 1 2 Nottingham, Mark (June 7, 2014).
- ↑ "HTTP/1.1, part 1: URIs, Connections, and Message Parsing - draft-ietf-httpbis-p1-messaging-00".
- ↑ "Security Requirements for HTTP - draft-ietf-httpbis-security-properties-00.txt".
- ↑ Nottingham, Mark (January 24, 2012).
- ↑ Nottingham, Mark (October 14, 2012).
- ↑ Nottingham, Mark (October 23, 2012).
- ↑ "SPDY Protocol - draft-ietf-httpbis-http2-00".
- ↑ Nottingham, Mark (November 30, 2012).
- ↑ "Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing".
- ↑ "Last Call: <draft-ietf-httpbis-p1-messaging-24.txt> (Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing) to Proposed Standard".
- ↑ The IESG (February 12, 2014).
- ↑ The RFC Editor Team (June 6, 2014).
- ↑ Nottingham, Mark (August 1, 2014).
- ↑ "Last Call: <draft-ietf-httpbis-http2-16.txt> (Hypertext Transfer Protocol version 2) to Proposed Standard from The IESG on 2014-12-31".
- ↑ "IESG Agenda: 2015-01-22".
- ↑ The RFC Editor Team (May 14, 2015).
- ↑ "http/2 module for apache httpd".
- ↑ "Apache 2.4.17 release changelog".
- ↑ Matthew Steele (June 19, 2014). "mod_spdy is now an Apache project".
- ↑ "Log of /httpd/mod_spdy". svn.apache.org.
- ↑ "Apache Traffic Server Downloads". trafficserver.apache.org. 2015-09-21.
- ↑ "3 Simple Steps to Bring HTTP/2 Performance to Legacy Web Applications".
- ↑ "Sucuri += HTTP/2 — Announcing HTTP/2 Support".
- ↑ "HTTP/2 is here!
- ↑ Robert Haynes.
- ↑ "H2O".
- ↑ "HTTP/2 is here: What You Need to Know".
- ↑ "Jetty change log".
- ↑ "LSWS 5.0 Is Out – Support for HTTP/2, ESI, LiteMage Cache".
- ↑ Rob Trace; David Walp (October 8, 2014).
- ↑ "nginx changelog". www.nginx.com. 2015-09-22.
- ↑ "OpenLiteSpeed 1.4.5 change log".
- ↑ "Radware Combines an Integrated HTTP/2 Gateway with its Leading Fastview Technology to Provide Web Server Platforms Increased Acceleration".
- ↑ stbuehler. "lighttpd Feature #2322 - Support for SPDY protocol".
Dış Bağlantılar
- Resmi Web Site
- RFC 7540 – Hipermetin İletim Protokolü sürüm 2 (HTTP/2)
- RFC 7541 – HPACK: HTTP/2 için Başlık Sıkıştırma
- SPDY Protocol (draft-mbelshe-httpbis-spdy-00)
- HTTP Hız + Hareketlilik (draft-montenegro-httpbis-speed-mobility-01)
- Ağ Uyumlu HTTP İyileştirmesi için Öneri (draft-tarreau-httpbis-network-friendly-00)