Web sunucularından belge istemek için tarayıcılar HTTP protokolünü kullanır. Bu adı adres çubuğunuzdan biliyor olabilirsiniz (şimdi gizlenmiş olabilir, ancak adres çubuğunu tıklattığınızda, URL'yi kopyalayın ve bir metin düzenleyicisine yapıştırın http://
, başında göreceksiniz ). HTTP basit bir metin tabanlı protokoldür. Bu gibi çalışır:
İlk olarak, tarayıcınız web sitesinin sunucusuna bağlanır ve indirmek istediği belgenin bir URL'sini (web sayfaları da belgelerdir) ve tarayıcının kendisi ile ilgili bazı ayrıntıları ( Kullanıcı Aracısı vb.) Gönderir . Örneğin, ana sayfayı SuperUser sitesine yüklemek için http://superuser.com/
tarayıcım şuna benzeyen bir istek gönderir:
GET / HTTP/1.1
Host: superuser.com
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.0 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: pl-PL,pl;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: [removed for security]
DNT: 1
If-Modified-Since: Tue, 09 Jul 2013 07:14:17 GMT
İlk satır, sunucunun hangi belgeyi döndürmesi gerektiğini belirtir. Diğer satırlara başlık denir; şöyle gözüküyorlar:
Header name: Header value
Bu satırlar, sunucunun ne yapacağına karar vermesine yardımcı olan ek bilgiler gönderir.
Her şey yolundaysa, sunucu istenen belgeyi göndererek yanıt verir. Yanıt, bir durum mesajı ile başlar, ardından bazı başlıklar (belge hakkında ayrıntılı bilgi verilir) ve son olarak, her şey yolundaysa, belgenin içeriği ile başlar. SuperUser sunucusunun isteğime olan cevabı şöyle görünüyor:
HTTP/1.1 200 OK
Cache-Control: public, max-age=60
Content-Type: text/html; charset=utf-8
Expires: Tue, 09 Jul 2013 07:27:20 GMT
Last-Modified: Tue, 09 Jul 2013 07:26:20 GMT
Vary: *
X-Frame-Options: SAMEORIGIN
Date: Tue, 09 Jul 2013 07:26:19 GMT
Content-Length: 139672
<!DOCTYPE html>
<html>
[...snip...]
</html>
Son satırdan sonra, Süper Kullanıcı'nın sunucusu bağlantıyı kapatır.
İlk satır ( HTTP/1.1 200 OK
) cevap kodunu içerir, bu durumda 200 OK
. Sunucunun, istendiği gibi bir belgeyi iade edebileceğine karar verdiği ve izleyen içeriğin böyle bir belge olacağına söz verdiği anlamına gelir. Durum böyle değilse, kod başka bir şey olacaktır ve sunucunun sadece bir belgeyi yanıt olarak geri döndürmemesinin nedenini gösterecektir: örneğin, istenen belgeyi bulamazsa, geri göndermesi gerekir. 404 Not Found
ve söz konusu içeriğe erişme izniniz yoksa, geri göndermesi gerekiyor 403 Forbidden
.
Bu ilk durum satırından sonra, cevap başlıkları aşağıdaki gibidir; bunun gibi, iade edilen içerik hakkında daha fazla bilgi sağlarlar Content-type
.
Sırada boş bir satır var. Daha fazla yanıt başlığının takip etmeyeceği gerçeğinin bir göstergesidir. Bu satırın üstündeki her şey, istediği belgenin içeriğidir. Yani yukarıdaki örnekte, <!DOCTYPE html>
SuperUser ana sayfasının ilk satırı (bir HTML belgesi). İndirmek için bir belge talep ediyor olsaydım, muhtemelen bazı saçma karakterler olurdu, çünkü çoğu belge formatları önceden işlem görmeden okunamıyordu.
Başlıklara dön. Bizim için en ilginç olanı sonuncusu Content-Length
. Tarayıcıya, boş satırdan sonra kaç bayt veri beklemesi gerektiğini bildirir, bu nedenle temel olarak bayt olarak ifade edilen belge boyutudur. Bu başlık zorunlu değildir ve sunucu tarafından atlanabilir. Bazen belge boyutu tahmin edilemez (örneğin belge anında oluşturulduğunda), bazen tembel programcılar bunu içermez (sürücü indirme sitelerinde oldukça yaygındır), bazen web siteleri bilmeyenler tarafından oluşturulur böyle bir başlığın.
Neyse, sebebi ne olursa olsun, başlık eksik olabilir. Bu durumda, tarayıcı sunucunun ne kadar veri göndereceğini bilmez ve bu nedenle sunucunun bağlantıyı kapatmasını bekleyen belge boyutunu bilinmeyen olarak görüntüler . Bu da bilinmeyen belge boyutlarının nedeni.