Bugün, World Wide Web'in 30. doğum yıldönümü olan 12 Mart 2019. Bu nedenle, arama motoru devi Google, World Wide Web'in doğumunun 30. yıl dönümünü anmak için ana sayfadaki internette icat edilen logoyu değiştirdi.
Ayrıca bu sabah ünlü açık kaynak Web sunucusu satıcısı Nginx, F5 tarafından satın alındığını duyurdu. İnternetin tarihini bugün sizinle paylaşabileceğimi düşünüyorum.
Bugün internette yüzebilmemizin nedeni, İnternet'in babası Tim Berners Lee olarak bilinen İngiliz bilgisayar bilimcisi bir kişi sayesinde.
Haziran'dan Aralık 1980'e kadar Berners Lee, Cenevre'deki CERN'de (Avrupa Nükleer Araştırma Örgütü) bağımsız bir yüklenici olarak çalıştı. Bu süre zarfında, bir hiper metin sistemi oluşturmak için bir fikir buldu Projenin amacı, araştırmacıların bilgileri paylaşmalarını ve güncellemelerini kolaylaştırmaktır.
Info.cern.ch, dünyanın ilk web sitesi ve web sitesi sunucusudur. Web sitesi CERN'de bir NeXT bilgisayarda çalışmakta ve 6 Ağustos 1991'de yayına başlamıştır.
Berners Lee tarafından icat edilen Hypertext Transmission Control Protocol, bugün aşina olduğumuz HTTP protokolüdür. Şu anda, HTTP protokolünün en son sürümü, İnternet'in temel protokolü olan HTTP / 2'dir - HTTP protokolü olmadan bugün İnternet'in olmayacağı söylenebilir.
HTTP protokolü, tarayıcıdan sunucuya bir mimari olan BS mimarisini kullanır. İstemci, tarayıcı aracılığıyla sunucuya bir HTTP isteği gönderir ve sunucu, istemcinin isteğini ayrıştırır ve yanıtlar.
HTTP, TCP / IP protokolüne dayalı bir uygulama katmanı protokolüdür. OSI yedi katmanlı modelin en üst katmanında, paket iletimini içermez, esas olarak istemci ile sunucu arasındaki iletişim formatını belirtir ve varsayılan olarak bağlantı noktası 80 kullanılır.
HTTP protokolünün en eski sürümü 1991'de yayınlanan HTTP / 0.9'du. Bu sürümün yalnızca bir komutu vardır, GET. GET aracılığıyla, sunucunun kök dizinindeki index.html dosyasını istemek gibi sunucu kaynaklarını elde edebilirsiniz.
GET /index.htmlSunucu, index.html içeriğini istemciye döndürür ve istemci tarayıcısı aracılığıyla html etiketlerini işler ve ayrıştırır. Protokolün bu sürümü, sunucunun yalnızca HTML biçimindeki dizelere yanıt verebileceğini ve diğer biçimlere yanıt veremeyeceğini belirtir. Diğer bir deyişle, günümüzün görüntü ve videolar gibi multimedya kaynakları HTTP / 0.9 sürümünde aktarılamamaktadır.
< html > < vücut > Selam Dünya < /vücut > < / html >Mayıs 1996'da HTTP / 1.0 sürümü yayınlandı ve POST komutu ve tarayıcı ile sunucu arasındaki etkileşimi zenginleştiren HEAD komutu eklendi.
Bu sürüm, metin, resim, video ve dosyalar dahil olmak üzere herhangi bir formatta HTTP protokolü aracılığıyla gönderilebilir. Bu, İnternet'in büyük gelişiminin temelini attı.
HTTP / 1.0, istek yöntemini ve dosya gönderme desteğini artırmanın yanı sıra format değişiklikleri de ekler. Veri bölümüne ek olarak, her iletişim bazı meta verileri açıklamak için başlık bilgilerini (HTTP başlığı) içermelidir. Ayrıca durum kodu, çok karakterli set desteği, çok parçalı tip, yetkilendirme, önbellek, içerik kodlama ve daha fazlası eklenmiştir.
Normal bir HTTP isteği ve yanıtı, istenen URL'yi, istek yöntemini, durum kodunu, HTTP protokol sürümünü, istek başlığını ve yanıt başlığını içerir. Örneğin, aşağıdaki şekilde gösterildiği gibi, Google'ı istemek için HTTP mesaj başlığı aşağıdaki gibidir:
Karakter kodlaması açısından HTTP / 1.0 sürümü, başlık bilgisinin ASCII kodu olması gerektiğini ve aşağıdaki verilerin herhangi bir formatta olabileceğini şart koşmaktadır. Bu nedenle, sunucu yanıt verdiğinde, istemciye verinin hangi formatta olduğunu söylemelidir.Bu, Content-Type alanının amacıdır.
text / html text / css resim / jpeg resim / png resim / svg + xml ses / mp4 video / mp4 application / javascript uygulama / pdfBu veri türleri topluca MIME türleri olarak adlandırılır ve her değer, eğik çizgiyle ayrılmış bir birincil tür ve ikincil tür içerir.
Ek olarak, HTTP / 1.0 da verileri sıkıştırıp iletebildiğinden, aşağıda gösterildiği gibi, veri sıkıştırma yöntemi İçerik Kodlama alanı aracılığıyla açıklanır, bu da verileri sıkıştırmak için gzip kullanılması anlamına gelir:
İçerik Kodlama: gzipHTTP / 1.0 sürümü de mükemmel değildir.Başlıca dezavantajı, her TCP bağlantısı kurulduğunda yalnızca bir istek gönderilebilmesidir. Verileri gönderdikten sonra bağlantı kapatılır, başka kaynaklar talep etmek istiyorsanız yeni bir bağlantı oluşturmanız gerekir. Birden fazla istekte bulunulursa, sunucuya sık sık yapılan istekler kaçınılmaz olarak sunucuda daha fazla kaynak tüketimine neden olacaktır.
Bu sorunu çözmek için, bazı tarayıcılar istekte bulunurken standart olmayan bir Bağlantı alanı kullanır.
Bağlantı: canlı tutmaBu alan, sunucunun TCP bağlantısını kapatmamasını gerektirir, böylece diğer istekler yeniden kullanılabilir. Sunucu da bu alanla yanıt verir. Ancak bu birleşik bir standart değildir.
Ocak 1997'de HTTP / 1.1 sürümü yayınlandı, bu sürüm 1.0 sürümünden yalnızca yarım yıl sonraydı. HTTP protokolünü daha da geliştirdi, bu güne kadar kullanıldı ve hala en popüler versiyon.
Bu sürümdeki en büyük değişiklik, HTTP standardına kalıcı bağlantıların eklenmesidir, yani TCP bağlantıları varsayılan olarak kapatılmaz ve Bağlantı: canlı tutma bildirilmeden birden çok istek tarafından yeniden kullanılabilir. İstemci ve sunucu, karşı tarafın bir süre aktif olmadığını anlarsa bağlantıyı aktif olarak kapatabilir. Ancak, normatif yaklaşım, istemcinin son istekte Connection: close göndermesi ve sunucudan açıkça TCP bağlantısını kapatmasını istemesidir. Ek olarak, HTTP / 1.1 sürümü ayrıca PUT, PATCH, HEAD, OPTIONS, DELETE gibi birçok yeni yöntem ekledi. Ayrıca, istemci talebinin başlık bilgilerine Host alanı, Content-Length alanı ve pipeline mekanizması gibi yeni özellikler eklenmiştir.
HTTP1.1 sürümü, TCP bağlantılarının çoğullamasına izin verse de, aynı TCP bağlantısındaki tüm veri iletişimleri sırayla gerçekleştirilir. Yalnızca sunucu bir yanıtı işledikten sonra bir sonraki yanıta geçecektir. Önceki yanıt özellikle yavaşsa, sırada bekleyen birçok istek olacaktır. Buna satır başı sıkışması denir.
Bu sorunu çözmek için 2009 yılında Google, kendi geliştirdiği SPDY protokolünü yayınladı ve bu protokolün Chrome tarayıcısında uygulanabilirliği kanıtlandıktan sonra HTTP / 2 temeli olarak kullanıldı ve ana özellikler HTTP / 2'den miras alındı.
2015 yılında HTTP / 2 yayınlandı. Standartlar komitesi alt sürümleri yayınlamayı planlamadığından HTTP / 2.0 olarak adlandırılmaz. HTTP / 2, ikili çerçeveleme, çoklama, sunucu itme ve başlık sıkıştırma gibi özellikler ekler.
HTTP / 2, verileri iletmek için HTTP 1.x'in metin biçimi yerine ikili biçim kullanır ve ikili protokol ayrıştırmak için daha verimlidir. HTTP / 1 isteği ve yanıt mesajları bir başlangıç satırı, bir başlık ve bir varlık gövdesinden (isteğe bağlı) oluşur ve her bölüm bir metin satırı sonu ile ayrılır. HTTP / 2, istek ve yanıt verilerini daha küçük çerçevelere böler ve ikili kodlamayı kullanır.
Çoğullama, orijinal diziyi ve engelleme mekanizmasını değiştirme. Tüm istekler, bir TCP bağlantısı aracılığıyla eşzamanlı olarak tamamlanır. HTTP 1.x'te, aynı anda birden çok istek göndermek istiyorsanız, birden çok TCP bağlantısı kullanmanız gerekir ve kaynakları kontrol etmek için tarayıcının ayrıca tek bir etki alanı adı için 6-8 TCP bağlantı isteği sınırı vardır.
HTTP / 2'de ikili çerçeveleme ile HTTP / 2 artık çoklu akış paralelliği uygulamak için TCP bağlantılarına güvenmiyor. HTTP / 2'de:
Bu özellik, performansı büyük ölçüde artırır:
Sunucu, tarayıcının karşılık gelen konuma ayrıştırmasını beklemek yerine, HTML sayfasını gönderirken diğer kaynakları etkin bir şekilde itebilir, bir istek başlatabilir ve ardından yanıt verebilir. Örneğin, sunucu, istemcinin HTML ayrıştırırken bu istekleri göndermesine gerek kalmadan JS ve CSS dosyalarını istemciye etkin bir şekilde gönderebilir.
Sunucu aktif olarak itebilir ve istemcinin bunu alıp almayacağını seçme hakkı vardır. Sunucu tarafından itilen kaynak tarayıcı tarafından önbelleğe alınmışsa, tarayıcı bir RST_STREAM çerçevesi göndererek bunu reddedebilir. Aktif itme aynı zamanda aynı kaynak ilkesiyle uyumludur ve sunucu üçüncü taraf kaynaklarını istemciye rasgele itmeyecektir.
HTTP / 3, HTTP protokolünün gelecek üçüncü ana sürümüdür.
HTTP / 3'te, TCP protokolü terk edilecek ve bunun yerine UDP protokolüne dayalı QUIC protokol uygulaması kullanılacaktır. QUIC protokolü, Google tarafından geliştirilen bir dizi protokoldür ve IETF'deki QUIC çalışma grubu, QUIC aktarım protokolünü oluşturmayı taahhüt eder. QUIC, UDP'ye dayalı bir protokoldür ve TCP'nin yerini almak için kullanılır. QUIC protokolü başlangıçta Google tarafından başlatılan bir projeydi ve daha sonra HTTP / 2-UDP üzerinden şifrelenmiş protokol haline geldi.