http başlığı nedir? HTTP protokolü

  • 18.06.2019

HTTP üstbilgileri, istemci ile sunucu arasında hizmet bilgilerini değiş tokuş etmek için kullanılır. Bu bilgiler kullanıcılar tarafından görülmez, ancak onsuz tarayıcı düzgün çalışamaz. Sıradan kullanıcılar için bu ve http başlıklarının amacı oldukça karmaşık görünecek, ancak aslında zor bir dil içermiyorlar. Web kullanıcısının günlük olarak karşılaştığı şey budur.

manşetler?

“Köprü Metni Aktarım Protokolü” - bu şekilde çevrilir Varlığı nedeniyle “istemci-sunucu” iletişimi mümkündür. Basit bir ifadeyle, tarayıcı kullanıcısı, sunucuya bir bağlantı başlatan bir istek gönderir. İkincisi, varsayılan olarak, müşteriden bir istek bekler, onu işler ve nihai bilgiyi veya yanıtı geri gönderir. Arama çubuğunda, kullanıcı sitenin http:// ile başlayan adresini "girer" ve sonucu açılan bir sayfa şeklinde alır.

İlgili satıra site adresi yazıldığında, tarayıcı gerekli sunucuyu DNS kullanarak bulur. Sunucu, istemcinin kendisine gönderdiği http başlığını (bir veya daha fazla) tanır ve ardından gerekli başlığı verir. Gerekli küme, önceden var olan ve bulunmayan başlıklardan oluşur.

Genel olarak, http başlıkları oldukça etkilidir. HTML kodlamasında görünmezler, istenen bilgilerden önce gönderilirler. Birçok başlık, sunucu tarafından otomatik olarak gönderilir. PHP'de göndermek için başlık işlevini kullanın.

Tarayıcı-site etkileşimi

Tarayıcı ve site arasındaki etkileşim şeması oldukça basittir. Böylece, http başlığı daha sonra sunucuya gönderilen sorgu dizesini başlatır. Yanıt olarak, müşterinin ihtiyaç duyduğu bilgiler gelir. Bu arada, http protokolü on yedi yıldır internette en çok kullanılan protokol olmuştur. Basit, güvenilir, hızlı ve esnektir. Http'nin ana görevi, bir web sunucusundan bilgi istemektir. İstemci bir tarayıcıdır ve sunucu ligthttp, apache, nginx'tir. Aralarındaki bağlantı başarılı olursa, sunucu isteğe yanıt olarak gerekli bilgileri alır. http bilgisi metin, ses dosyaları, video içerir.

Bir protokol başkaları için bir aktarım olabilir. İstemci talebi üç bölümden oluşur:

  • başlangıç ​​satırı (mesaj türü);
  • başlıklar (mesaj parametreleri);
  • bilgi gövdesi (boş bir satırla ayrılmış bir mesaj).

Başlangıç ​​dizesi, http başlık alanı isteğinin gerekli bir öğesidir. Kullanıcı istek yapısı üç ana bölümden oluşur:

  1. Yöntem. İsteğin türünü belirtir.
  2. Yol (yol). Bu, etki alanını izleyen URL dizesidir.
  3. Kullanılan protokol. Protokol ve http versiyonundan oluşur.

Modern tarayıcılar sürüm 1.1'i kullanır. Başlıklar "Ad:değer" biçiminde takip edilir.

HTTP önbelleğe alma

Sonuç olarak, önbelleğe alma, HTML sayfalarının ve diğer dosyaların önbellekte (işletim belleğinde, bilgisayarın sabit sürücüsünde bir yer) depolanmasını sağlar. Bu, bunlara yeniden erişimi hızlandırmak ve trafiği kurtarmak için gereklidir.

Önbelleğin bir istemci tarayıcısı, bir ara ağ geçidi ve bir proxy sunucusu vardır. URL'ye bir mesaj göndermeden önce, tarayıcı nesnenin önbellekte olup olmadığını kontrol edecektir. Hiçbir nesne yoksa istek, nginx sunucusunda http başlığının önbelleğe alınmasını kontrol ettiği bir sonraki sunucuya iletilir. Ağ geçitleri ve proxy'ler farklı kullanıcılar tarafından kullanılır, bu nedenle önbellek paylaşılır.

HTTP önbelleğe alma, yalnızca siteyi önemli ölçüde hızlandırmakla kalmaz, aynı zamanda sayfanın eski bir sürümünü de sağlar. Yardım ile, yanıta üstbilgiler gönderilir. Ancak, HTTPS protokolü aracılığıyla istenen bilgiler önbelleğe alınamaz.

http başlıklarının açıklaması

En önemli önbellek mekanizmalarından biri, http başlıklarının süresinin dolmasıdır. Bu başlıklar, yanıtta sağlanan bilgilerin son kullanma tarihini bildirir. Önbelleğin geçersiz sayılacağı tarih ve saati belirtirler. Örneğin, böyle bir başlık şuna benzer: Sona erme tarihi: Çarşamba, 30 Kasım 2016 13:45:00 GMT. Bu yapı, sayfaları ve resimleri önbelleğe almak da dahil olmak üzere hemen hemen her yerde kullanılır. Kullanıcı daha eski bir tarih seçerse bilgiler önbelleğe alınmaz.

http proxy başlıkları, başlık bağlantısı olarak kategorize edilir. Varsayılan olarak önbelleğe alınmazlar. Önbelleğin düzgün çalışması için her URL'nin bir içerik değişkeniyle eşleşmesi gerekir. Sayfa iki dilliyse, her sürümün kendi URL'si olmalıdır. Değişken başlığı, önbelleğe istek başlıklarının adlarını söyler. Örneğin, bir isteğin işlenmesi tarayıcıya bağlıysa, sunucunun da bir başlık göndermesi gerekir. Böylece, farklı istek çeşitleri ve belge türleri önbellekte saklanır. accept TTP başlığı, kullanılan kaynağın kabul edilebilir biçimlerini listelemek için gereklidir ve gereksiz olanları filtrelediği için üzerinde çalışmak oldukça kolaydır.

Toplamda, hizmet bilgilerini ileten dört başlık grubu vardır. Bunlar ana başlıklardır - herhangi bir sunucu ve istemcide, istek ve yanıtta ve varlık mesajında ​​bulunurlar. İkincisi, istemciden ve sunucudan gelen herhangi bir mesajın içeriğini tanımlar.

Yetkilendirme HTTP başlığı isteğe bağlı kabul edilir. Bir web sayfası istemciden yetkilendirme istediğinde, tarayıcı kullanıcı adı ve parola girmek için alanları olan özel bir pencere görüntüler. Kullanıcı verilerini girdikten sonra, tarayıcı bir http isteği gönderir. "Yetkilendirme" başlığını içerir.

Başlıkları nasıl görebilirim?

http üstbilgisini görmek için tarayıcı eklentileri yüklemeniz gerekir, örneğin, firefox:

  • kundakçı. Başlıkları, tümünün (tümü) seçildiği ağ sekmesinde (ağ) görüntüleyebilirsiniz. Bu eklenti, bir web geliştiricisi için faydalı olacak özelliklere sahiptir.
  • canlı http başlıkları. Http başlıklarını görüntülemek için basit bir eklenti. Bununla manuel olarak bir istek oluşturabilirsiniz.
  • Grome kullanıcıları, ayarlar düğmesine tıklarlarsa, geliştirici araçlarını (networks) seçerlerse başlıkları kolayca görebilirler.

Eklentiler yüklendikten sonra, onları ve tarayıcınızı başlatın.

Talep Yöntemleri

HTTP'de kullanılan yöntemler, sunucuya mesaj olarak gönderilen talimatlara benzer. Bu, İngilizce'de özel bir kelimedir.

  • GET yöntemi. Bir kaynaktan bilgi istemek için kullanılır. Tüm eylemler ondan başlar.
  • İLETİ. Veri göndermek için kullanılır. Örneğin, bir sosyal ağdaki bir mesaj veya bir yorum, tarayıcı POST isteğini gövdesine yerleştirir ve sunucuya gönderir.
  • KAFA. Yöntem, birincisiyle benzerlikler taşıyor, ancak kolay bir işlevi yerine getiriyor. Mesajı yanıttan hariç tutarak yalnızca meta verileri ister. Dosyaları indirmeden bilgi almak istiyorlarsa yöntem kullanılır. Sunucudaki bağlantıların sağlığını kontrol etmek isterlerse kullanılır.
  • KOY. Verileri bir URL'ye yükler. Büyük miktarda veri aktarır.
  • SEÇENEKLER. Sunucu yapılandırmalarıyla çalışır.
  • URI. Bir kaynağı tanımlar ve bir URL içerir.

http yanıt yapısı

Sunucu, istemci isteklerine uzun mesajlarla yanıt verir. Yanıt, protokolün sürümünü, sunucu durum kodunu (200) gösteren birkaç satırdan oluşur. Gelen isteğin işlenmesi sırasında sunucuda nelerin değiştiğinden bahsediyor:

  1. Durum "iki yüz", bilgilerin başarılı bir şekilde işlendiğini gösterir. Sunucu daha sonra belgeyi istemciye gönderir. Sorgunun geri kalan satırları, iletilen bilgilerle ilgili diğer bilgileri gösterir.
  2. Dosya bulunamazsa veya yoksa, sunucu istemciye hata olarak da adlandırılan bir 404 kodu gönderir.
  3. Kod 206, bir süre sonra devam ettirilebilen kısmi bir dosya indirme işlemini belirtir.
  4. Kod 401, yetkilendirmenin reddedildiğini gösterir. Bu, istenen sayfanın, oturum açmayı onaylamak için girilmesi gereken bir parola ile korunduğu anlamına gelir.
  5. Engellenen erişim hakkında, kod 403 konuşuyor.İnternette dosya veya video görüntüleme, indirme yasakları yaygın bir yanıttır.
  6. Kodların başka sürümleri de vardır: istenen dosyanın geçici olarak yeniden konumlandırılması, dahili sunucu hatası, kalıcı olarak yeniden konumlandırılması. Bu durumda, kullanıcı yönlendirilecektir. 500 kodu görünürse, bu, sunucuda arızalar yaşandığı anlamına gelir.

URL - nedir bu?

URL, istemci ile sunucu arasındaki web iletişiminin kalbidir. İstek genellikle bir URL - Tekdüzen Kaynak Bulucu aracılığıyla gönderilir. URL istek yapısı çok basittir. Birkaç öğeden oluşur: http protokolü (başlık), hoot (site adresi), bağlantı noktası, kaynak yolu ve sorgu.

Protokol, güvenli https bağlantısı ve bilgi alışverişi için de mevcuttur. URL, belirli bir sitenin İnternet üzerindeki konumu hakkında bilgi içerir. Adres, alan adını, sayfanın yolunu ve başlığını içerir.

URL'lerle çalışmanın ana dezavantajı, Latin alfabesinin yanı sıra sayılar ve simgelerle uygunsuz bir etkileşimdir. SEO optimizasyonu önemli bir rol oynar.

Aktif bilgisayar kullanıcıları ve geliştiricileri, bu alandaki uzmanların verdiği bazı profesyonel tavsiyelerle tanışmak için uygun değildir:

  • Güncellemeleri dikkate alarak dosya ve belgelerin son kullanma tarihlerini belirleyin. İstatistiksel bilgiler büyük maksimum yaş değerlerinde verilir.
  • Tek bir belgeye yalnızca bir URL'den erişilebilir olmalıdır.
  • Kullanıcı tarafından indirilecek bir dosyayı güncelliyorsanız, adını ve bağlantısını değiştirin. Bu, eski bir belgenin değil, yeni bir belgenin indirilmesini sağlar.
  • Last-Modified başlıkları, içeriğin en son değiştirildiği mevcut tarihe karşılık gelmelidir. Değiştirmediğiniz sürece sayfaları ve belgeleri kaydetmemelisiniz.
  • POST isteklerini yalnızca gerektiğinde kullanın. SSL ile işinizi minimuma indirin.
  • Başlıklar, sunucu tarafından gönderilmeden önce REDbot eklentisi tarafından kontrol edilmelidir.

1. HTTP protokolü. giriiş

Sadece küçük bir şeyi açıklığa kavuşturmak istiyorum. Korkunç protokol kelimesi, birçok insanın bir anlaşmasından başka bir şey değildir, tam bir anda insanlar karar verdi: "Bunu bu şekilde yapalım, sonra her şey yoluna girecek." Korkacak bir şey yok, her şey çok çirkin ve şimdi bu rezaleti açacağız. Peki HTTP protokolü nedir ve ne ile yenir?

1.1 İstemci ve sunucu

Dünyada ve hatta programlama ve İnternet dünyasında mucize yoktur! Bunu sarsılmaz bir gerçek olarak kabul edin. Ve program çalışmıyorsa veya istediğiniz gibi çalışmıyorsa, büyük olasılıkla ya doğru yazılmamış ya da hatalar içeriyor. Peki, tarayıcı sunucudan herhangi bir şey göndermesini nasıl ister? Evet, çok kolay! Sadece biraz rahatlamanız ve sürecin tadını çıkarmaya başlamanız gerekiyor :-)

1.2. İlk HTTP isteğimizi yazıyoruz

Her şeyin çok karmaşık olduğunu düşünüyorsanız, yanılıyorsunuz. Bir kişi, karmaşık bir şey yaratamayacak şekilde düzenlenmiştir, aksi takdirde bu konuda kafası karışacaktır :-) Yani, bir tarayıcı var ve bir Web sunucusu var. Veri alışverişini başlatan her zaman tarayıcıdır. Web sunucusu, tarayıcıya bir şey göndermesi için asla kimseye bir şey göndermez - tarayıcının bunu istemesi gerekir. En basit HTTP isteği şöyle görünebilir:


http://www.php.net/ HTTP/1.0rnrn ALIN


* GET (İngilizce'den çevrilmiştir, "al" anlamına gelir) - istek türü, istek türü farklı olabilir, örneğin POST, HEAD, PUT, DELETE (bazılarını aşağıda ele alacağız).
* http://www.php.net/ - En azından biraz bilgi almak istediğimiz URI (adres) (elbette bir HTML sayfası öğrenmeyi umuyoruz).
* HTTP/1.0 - sunucu ile iletişim sürecinde kullanacağımız protokolün türü ve sürümü.
* rn - iki kez tekrarlanması gereken satırın sonu, neden biraz sonra netleşecek.

Bu talebi çok kolay bir şekilde yapabilirsiniz. Telnet.exe programını çalıştırın, ana bilgisayar olarak www.php.net girin, bağlantı noktası 80'i belirtin ve rnrn olarak Enter tuşuna iki kez basarak bu isteği yazın. Yanıt olarak, www.php.net sitesinin ana sayfasının HTML kodunu alacaksınız.

1.3 Talep yapısı

Bir HTTP isteğinin nelerden oluştuğuna bakalım. Her şey oldukça basit. Bir HTTP isteğinin tamamen anlamlı bir metin olduğu gerçeğiyle başlayalım. Genel durumda nelerden oluşur? HTTP 1.0 protokolünü ele alacağız. Yani :


İstek - Satır [ Genel - Başlık | Talep - Başlık | Varlık - Başlık ] rn [ Varlık - Gövde ]


* İstek Hattı - istek satırı
*

Biçim : "Yöntem İstek-URI HTTP Sürümü"
*Yöntem-
İstek-URI kaynağının işleneceği yöntem GET, POST, PUT, DELETE veya HEAD olabilir.
* İstek-URI - bir dizi parametreye sahip bir sayfaya göreli veya mutlak bağlantı, örneğin /index.html veya http://www.myhost.ru/index.html veya /index.html?a=1&b=qq . İkinci durumda, karşılık gelen değerlere sahip a ve b değişkenleri kümesiyle sunucuya bir istek gönderilir ve "&" ve işareti, parametreler arasında bir ayırıcı görevi görür.
* HTTP Sürümü - HTTP protokol sürümü, bizim durumumuzda "HTTP/1.0".

GET ve POST işleme yöntemleriyle son derece ilgileniyoruz. GET yöntemiyle komut dosyasına basitçe parametreleri iletebilir ve POST yöntemiyle gönderme formlarını taklit edebilirsiniz.

Bir GET yöntemi için, İstek URI'si şöyle görünebilir: "/index.html?param1=1¶m2=2".

* Genel Başlık - başlığın ana kısmı.
Biçim:
Yalnızca iki parametre olabilir: Tarih veya Pragma. Tarih - "Haftanın günü, Gün Ay Yıl SS:DD:SS GMT" biçimindeki GMT tarihi, örneğin, "Salı, 15 Kasım 1994 08:12:31 GMT" - isteğin oluşturulduğu tarih. Pragma, sayfa önbelleğe almayı devre dışı bırakan bir önbelleksiz değere sahip olabilir.

* İstek Başlığı - isteği açıklayan başlığın bir parçası.

İstek Başlığı aşağıdaki parametrelere sahip olabilir : İzin Ver, Yetkilendirme, Kimden, Değiştirildiyse-Başlangıçtan, Yönlendiren, Kullanıcı Aracısı.
Genellikle ihtiyaç duyulmayan özel kaynaklara erişmek için kullanıldığından, bu bölümde Yetkilendirme parametresini ele almayacağız. www.w3c.org adresinden kendi başınıza yetkili erişim için nasıl başlık oluşturacağınızı öğrenebilirsiniz.

* İzin ver - izin verilen işleme yöntemlerini ayarlar.
Biçim: "İzin ver: GET | HEADn".
İstek Satırında POST işleme yöntemi belirtilirken parametre yoksayılır. Geçerli istek işleme yöntemlerini belirtir. Sunucu proxy'leri, Allow parametresini değiştirmez ve sunucuya değişmeden ulaşır.

* Kimden - isteği gönderenin e-posta adresi.
Biçim: "Kimden: adderssrn".
Örneğin, "Gönderen: [e-posta korumalı]".

* If-Modified-Since - İsteğin şu veya bu zamandan beri değiştirilmediğini gösterir.
Biçim: "Değiştirildiyse-Başlangıç: datern"
Yalnızca GET işleyici yöntemi için kullanılır. Tarih, General-Header'daki Date parametresiyle aynı formatta GMT'de belirtilir.

* Yönlendiren - talebin başlatıldığı sayfaya mutlak bir bağlantı, yani kullanıcının bizimkine gittiği sayfaya bir bağlantı.
Biçim: "Yönlendiren: urln".
Örnek: "Yönlendiren: www.host.ru/index.htmln".
* Kullanıcı Aracısı - tarayıcı türü.
Örneğin: "User-Agent: Mozilla/4.0n"

* Entity-Header - Entity-Body verilerini açıklayan başlığın bir parçası.
İsteğin bu bölümünde, sayfanın gövdesini tanımlayan parametreler ayarlanır. Varlık Başlığı şu parametreleri içerebilir: Allow, Content-Encoding, Content-Length, Content-Type, Expires, Last-Modified, extension-header.

* İzin Ver - General-Header'dan Allow'a benzer bir parametre.

* Content-Encoding - Entity-Body veri kodlama tipi.
Biçim: "İçerik Kodlama: x-gzip | x-compress | diğer türler".
Örnek: "İçerik Kodlama: x-gzipn". Sembol "|" "veya" kelimesi anlamına gelir, yani şu veya bu veya bu vb.
Başka bir tür, örneğin POST yöntemi için verilerin nasıl kodlandığını gösterebilir: "Content-Encoding: application/x-www-form-urlencodedn".

* İçerik Uzunluğu - Varlık Gövdesine gönderilen bayt sayısı. Content-Length değeri, MIME biçiminde gönderilen veriler için tamamen farklı bir anlama sahiptir ve burada verilerin "external/entity-body" kısmını tanımlayan bir parametre görevi görür. Geçerli tamsayılar sıfır veya daha fazladır.
Örnek: "İçerik Uzunluğu: 26457n".

* Content-Type - iletilen veri türü.
Örneğin: "İçerik Türü: metin/htmln".

* Süre Sonu - Sayfanın tarayıcının önbelleğinden kaldırılması gereken zaman.
Biçim: "Son kullanma tarihi: tarih". Tarih formatı, General-Header'daki Date parametresinin tarih formatına benzer.

* Last-Modified - gönderilen verilerin son değiştirilme zamanı.
Biçim: "Son Değiştirme Tarihi: tarih". Tarih formatı, General-Header'daki Date parametresinin tarih formatına benzer.

* Uzantı başlığı - örneğin tarayıcı veya belgeyi kabul eden başka bir program tarafından işlenmesi amaçlanan başlığın bir parçası. Bu kısımda parametrelerinizi "ParametreAdı:parametredeğeri" formatında tanımlayabilirsiniz. İstemci programı bunları nasıl kullanacağını bilmiyorsa, bu parametreler göz ardı edilecektir.
Örneğin: "Çerez: r=1rn" - sayfa için iyi bilinen çerezleri ayarlar.

Ve şimdi, bu kadar korkunç sözlerden sonra, biraz sakinleşmeye ve neye ihtiyacımız olduğunu anlamaya çalışalım mı? Doğal olarak örneklerle anlayacağız.

Çerezleri (Çerezler) geçirerek siteden bir sayfa almamız gerektiğini düşünelim, aksi takdirde davetsiz misafir olarak gönderiliriz ve ayrıca bu sayfaya yalnızca siz ana sayfasını ziyaret ettikten sonra izin verildiği bilinmektedir. alan.

2 GET Yöntemi

Talebimizi yazalım.


http'yi ALIN:
ev sahibi: www. alan. koş

Çerez: gelir = 1rn
rn


Bu istek bize http://www.site.ru/news.html adresindeki sayfanın içeriğini GET yöntemini kullanarak almak istediğimizi söyler. Ana Bilgisayar alanı, bu sayfanın www.site.ru sunucusunda bulunduğunu, Yönlendiren alanı sitenin ana sayfasından haber almak için geldiğimizi ve Çerez alanı, şu veya bu çerezin atandığını gösterir. biz. Host, Referer ve Cookie alanları neden bu kadar önemli? Çünkü dinamik siteler oluştururken, normal programcılar betiklerde (PHP dahil) görünen bu alanları değişkenler biçiminde kontrol eder. Bu ne için? Örneğin, sitenin soyulmasını önlemek için, yani. otomatik indirme için veya siteye gelen bir kişinin siteye her zaman yalnızca ana sayfadan ulaşması vb. için bir program ayarlamadılar.

Şimdi sayfadaki form alanlarını doldurup formdan bir istek göndermemiz gerektiğini düşünelim, bu formun iki alanı olsun: login ve password (login ve password) ve tabii ki kullanıcı adı ve şifreyi biliyoruz .


http'yi ALIN: //www.site.ru/news.html?login=Petya%20Vasechkin&password=qq HTTP/1.0rn
ev sahibi: www. alan. koş
Yönlendiren : http : //www.site.ru/index.htmlrn
Çerez: gelir = 1rn
rn


Giriş bilgimiz "Petya Vasechkin" Neden Petya%20Vasechkin yazmalıyız? Bunun nedeni, özel karakterlerin sunucu tarafından yeni bir parametrenin işaretleri veya bir isteğin sonu vb. olarak tanınabilmesidir. Bu nedenle, istekte oshbokovnyh durumlarından kaçınmak için parametre adlarını ve değerlerini kodlamak için bir algoritma vardır. Bu algoritmanın tam açıklaması burada bulunabilir ve PHP, sırasıyla kodlama ve kod çözme için rawurlencode ve rawurldecode işlevlerine sahiptir. İstekte kodlanmış parametreler iletilirse, PHP'nin kod çözme işlemini kendisinin yaptığını belirtmek isterim. Bunun üzerine, HTTP protokolünü tanımanın ilk bölümünü bitireceğim. Bir sonraki bölümde, çok daha ilginç olacak olan POST isteklerini (İngilizce'den çevrilmiştir - "gönder") oluşturmaya bakacağız çünkü. Bu tür istek, HTML formlarından veri gönderirken kullanılır.

3. POST yöntemi.

Bir HTTP POST isteği durumunda, alanları HTML formlarından geçirmek için iki seçenek vardır, yani application/x-www-form-urlencoded ve multipart/form-data algoritmasını kullanmak. Bu algoritmalar arasındaki farklar çok önemlidir. Gerçek şu ki, ilk türün algoritması uzun zaman önce, HTML dili henüz HTML formları aracılığıyla dosya aktarma olasılığını sağlamadığında oluşturuldu. Şimdi bu algoritmaları örneklerle inceleyelim.

3.1 İçerik Türü: application/x-www-form-urlencoded.

Önceki bölümde tartışılan kullanıcı adı ve şifreyi aktarmak için GET talebimize benzer bir talep yazıyoruz:


GÖNDERİ http: //www.site.ru/news.html HTTP/1.0rn
ev sahibi: www. alan. koş
Yönlendiren : http : //www.site.ru/index.htmlrn
Çerez: gelir = 1rn
İçerik - Tür : uygulama / x - www - form - urlencodedrn
İçerik - Uzunluk : 35 dakika
rn


Burada Content-Type ve Content-Length başlık alanlarının kullanımına ilişkin bir örnek görüyoruz. Content-Length, başlıktan başka bir satırsonu ile ayrılan veri alanının kaç bayt kaplayacağını söyler. Ancak daha önce bir GET isteği için İstek URI'sine yerleştirilen parametreler artık Varlık Gövdesindedir. Görüldüğü gibi birebir aynı şekilde oluşturulmuşlar, başlıktan sonra yazmanız yeterli. Bir önemli noktaya daha dikkat çekmek istiyorum, Varlık Gövdesindeki parametre kümesiyle eşzamanlı olarak İstek URI'sine başka adlara sahip parametreler koymayı hiçbir şey engellemez, örneğin:


GÖNDERİ http: //www.site.ru/news.html?type=kullanıcı HTTP/1.0rn
.....
rn
giriş = Petya % 20Vasechkin & şifre = qq


3.2 İçerik Tipi: çok parçalı/form verisi

İnternet dünyası, dosyaları formlar aracılığıyla göndermenin iyi olacağını anlayınca, W3C konsorsiyumu POST istek formatının revizyonunu üstlendi. O zamana kadar, MIME formatı (Çok Amaçlı İnternet Posta Uzantıları - Posta mesajları oluşturmak için çok amaçlı protokol uzantıları) zaten yaygın olarak kullanılıyordu, bu nedenle, tekerleği yeniden icat etmemek için, bu mesaj formatının bir kısmını POST oluşturmak için kullanmaya karar verdik. HTTP protokolündeki istekler.

Bu biçim ile application/x-www-form-urlencoded türü arasındaki temel farklar nelerdir?

Ana fark, Varlık-Gövde'nin artık sınırlarla (sınır) ayrılmış bölümlere ayrılabilmesidir. En ilginç olanı, her bölümün içinde depolanan verileri açıklamak için kendi başlığına sahip olabilmesidir, yani. tek bir istekte, çeşitli türlerdeki verileri aktarabilirsiniz (Posta mektubunda olduğu gibi, metinle birlikte dosyaları da aktarabilirsiniz).

Öyleyse başlayalım. Oturum açma adı ve parola aktarımıyla aynı örneği tekrar düşünün, ancak şimdi yeni bir biçimde.


GÖNDERİ http: //www.site.ru/news.html HTTP/1.0rn
ev sahibi: www. alan. koş
Yönlendiren : http : //www.site.ru/index.htmlrn
Çerez: gelir = 1rn

İçerik - Uzunluk : 209rn
rn
-- 1BEF0A57BE110FD467Arn
İçerik Eğilimi: biçim verisi; isim = "giriş"
rn
Petya Vasechkinrn
-- 1BEF0A57BE110FD467Arn
İçerik Eğilimi: biçim verisi; isim="şifre"rn
rn
qqrn
-- 1BEF0A57BE110FD467A -- rn


Şimdi ne yazıldığını anlayalım. :-) Bazı rn karakterlerini özellikle kalın yazdım, böylece verilerle karışmazlar. Yakından baktığınızda, İçerik Türü'nden sonra sınır alanını görebilirsiniz. Bu alan, bölüm ayırıcıyı - sınırı belirtir. Kenarlık olarak, Latin harfleri ve sayılarından oluşan bir dize ve diğer bazı karakterler (maalesef hangileri olduğunu hatırlamıyorum) kullanılabilir. İstek gövdesinde, sınırın başına "--" eklenir ve istek, sonuna "--" karakterlerinin de eklendiği bir sınırla biter. Talebimiz iki bölümden oluşuyor, ilki giriş alanını, ikincisi ise şifre alanını açıklıyor. Content-Disposition (bölümdeki veri türü), bunun formdan veri olacağını söyler ve alan adı, alan adına ayarlanır. Bu, bölüm başlığını sonlandırır ve ardından alan değerini içeren bölüm veri alanı gelir (değerin kodlanması gerekli değildir!).

Bölüm başlıklarında Content-Length kullanmanıza gerek olmadığına, ancak request başlığında ihtiyacınız olduğuna ve değerinin, İçeriği izleyen ikinci rn'den sonraki tüm Entity-Body'nin boyutu olduğuna dikkatinizi çekmek istiyorum. -Uzunluk: 209 dakika. Şunlar. Entity-Body, başlıktan ek bir yeni satırla ayrılır (bölümlerde de görülebilir).

Şimdi dosyayı aktarmak için bir istek yazalım.


GÖNDERİ http: //www.site.ru/postnews.html HTTP/1.0rn
ev sahibi: www. alan. koş
Yönlendiren: http://www.site.ru/news.htmlrn
Çerez: gelir = 1rn
İçerik - Tür : çok parçalı / form - veri ; sınır = 1BEF0A57BE110FD467Arn
İçerik - Uzunluk : 491rn
rn
-- 1BEF0A57BE110FD467Arn
İçerik Eğilimi: biçim verisi; isim = "haber_başlığı" rn
rn
haber örneği
-- 1BEF0A57BE110FD467Arn
İçerik Eğilimi: biçim verisi; isim = "haber_dosyası"; dosyaadı="haber.txt" rn
İçerik - Tür: uygulama / sekizli - streamrn
İçerik - Aktarım - Kodlama : binaryrn
rn
Ve işte haberler, hangi haber dosyasında. txtrn
-- 1BEF0A57BE110FD467A -- rn


Bu örnekte, ilk bölüm haberin başlığını, ikinci bölüm ise news.txt dosyasını gönderir. Dikkatli olan ikinci bölümde filename ve Content-Type alanlarını görecektir. Dosya adı alanı, karşıya yüklenen dosyanın adını, İçerik Türü alanı ise dosyanın türünü belirtir. Application/octet-stream, bunun standart bir veri akışı olduğunu belirtir ve Content-Transfer-Encoding: binary, bunun hiçbir şeyde kodlanmamış ikili veri olduğunu belirtir.

Çok önemli bir nokta. CGI betiklerinin çoğu akıllı insanlar tarafından yazılır, bu nedenle gelen dosyanın Content-Type'taki türünü kontrol etmeyi severler. Ne için? Çoğu zaman, sitelerde dosya indirmek, bir ziyaretçiden resim almak için kullanılır. Bu nedenle, tarayıcının kendisi, ziyaretçinin ne tür bir dosya göndermek istediğini belirlemeye çalışır ve uygun İçerik Türünü isteğe ekler. Komut dosyası, alındıktan sonra onu kontrol eder ve örneğin, bir gif veya jpeg değilse, bu dosyayı yok sayar. Bu nedenle, bir isteği "manuel olarak" oluştururken, Content-Type değerinin aktarılmakta olan dosyanın biçimine en yakın olacak şekilde olmasına dikkat edin.

gif için resim/gif
jpeg'ler için resim/jpeg
png için resim/png
tiff için image/tiff (nadiren kullanılır, çok geniş bir biçimdir)

Örneğimizde, bir metin dosyasının iletildiği bir talep oluşturulmuştur. Benzer şekilde, bir ikili dosyayı aktarmak için bir istek oluşturulur.

4. Son yazı.

Sunucuya istek göndermekten ayrıntılı olarak bahsetmeye değmeyeceğini düşünüyorum. Bu tamamen bir PHP teknolojisi meselesi :-). Resmi PHP belgelerinde soket işlevleri veya CURL modülünün işlevleri ile ilgili bölümü dikkatlice okumak yeterlidir.

Yukarıdakilerden, umarım sorunun neden şu olduğu açıktır: "Başlık işlevini kullanarak bir POST isteğini nasıl oluştururum?" - anlamsız. header(string) işlevi, istek gövdesine değil, yalnızca istek başlığına bir girdi ekler.

Geri

HTTP, dağıtılmış sistemler arasında bir köprü metni aktarım protokolüdür. Aslında http, modern Web'in temel bir öğesidir. Kendine saygı duyan web geliştiricileri olarak, bu konuda mümkün olduğunca çok şey bilmeliyiz.

Bu protokole mesleğimizin merceğinden bakalım. İlk bölümde, temelleri gözden geçireceğiz, isteklere / yanıtlara bakacağız. Bir sonraki makalede, önbelleğe alma, bağlantı yönetimi ve kimlik doğrulama gibi daha ayrıntılı çipleri analiz edeceğiz.

Ayrıca bu yazıda esas olarak RFC 2616: Köprü Metni Aktarım Protokolü -- HTTP/1.1'e değineceğim.

HTTP Temelleri

HTTP, birden çok ana bilgisayar ve istemci arasında iletişim sağlar ve bir dizi ağ ayarını destekler.

Temel olarak, iletişim için TCP / IP kullanılır, ancak bu tek olası seçenek değildir. Varsayılan olarak, TCP/IP 80 numaralı bağlantı noktasını kullanır, ancak diğerleri de kullanılabilir.

Ana bilgisayar ve müşteri arasındaki iletişim iki aşamada gerçekleşir: bir istek ve bir yanıt. İstemci, sunucunun bir yanıt (mesaj) verdiği yanıt olarak bir HTTP isteği oluşturur. Biraz sonra, bu çalışma şemasını daha ayrıntılı olarak ele alacağız.

HTTP protokolünün mevcut sürümü, bazı yeni özellikler getiren 1.1'dir. Bana göre en önemlileri: sürekli açık bağlantı desteği, veri aktarımı için yeni bir mekanizma, parçalı aktarım kodlaması, önbelleğe alma için yeni başlıklar. Bunlardan bazılarını bu makalenin ikinci bölümünde ele alacağız.

URL

Web iletişiminin kalbi, Tekdüzen Kaynak Bulucu (URL) aracılığıyla gönderilen istektir. Bir URL'nin ne olduğunu zaten bildiğinize eminim, ancak bütünlüğü sağlamak için yine de birkaç kelime söylemeye karar verdim. URL yapısı çok basittir ve aşağıdaki bileşenlerden oluşur:

Protokol, normal bağlantılar için http veya daha güvenli veri alışverişi için https olabilir. Varsayılan bağlantı noktası 80'dir. Bunu, sunucudaki kaynağa giden yol ve bir parametre zinciri izler.

Yöntemler

URL'yi kullanarak, iletişim kurmak istediğimiz ana bilgisayarın tam adını belirtiriz, ancak gerçekleştirmemiz gereken eylem yalnızca HTTP yöntemi kullanılarak iletilebilir. Tabii ki, alabileceğimiz birkaç tür eylem var. HTTP, çoğu uygulamanın gereksinimlerine uygun en gerekli olanı uygular.

Mevcut yöntemler:

ALMAK: Mevcut bir kaynağa erişin. URL, sunucunun istenen kaynağı bulabilmesi ve yanıt olarak geri gönderebilmesi için gerekli tüm bilgileri listeler.

İLETİ: yeni bir kaynak oluşturmak için kullanılır. Bir POST isteği genellikle yeni bir kaynak oluşturmak için gereken tüm bilgileri içerir.

KOY: Geçerli kaynağı güncelleyin. PUT isteği, güncellenen verileri içerir.

SİLMEK: Mevcut bir kaynağı silmek için kullanılır.

Bu yöntemler, çeşitli araçlar ve çerçeveler tarafından en popüler ve en sık kullanılan yöntemlerdir. Bazı durumlarda, PUT ve DELETE istekleri, içeriği kaynakla gerçekleştirilecek eylemi belirten bir POST gönderilerek gönderilir: oluştur, güncelle veya sil.

HTTP ayrıca diğer yöntemleri de destekler:

KAFA: GET'e benzer. Aradaki fark, bu tür bir talepte hiçbir mesajın iletilmemesidir. Sunucu yalnızca başlıkları alır. Örneğin, bir kaynağın değiştirilip değiştirilmediğini belirlemek için kullanılır.

İZ: iletim sırasında istek, her biri kendi bilgilerine katkıda bulunan birçok erişim noktasından ve proxy sunucusundan geçer: IP, DNS. Bu yöntemle tüm ara bilgileri görebilirsiniz.

SEÇENEKLER: Belirli bir kaynak için sunucunun yeteneklerini, seçeneklerini ve yapılandırmasını belirlemek için kullanılır.

Durum kodları

İstemciden gelen bir talebe yanıt olarak sunucu, diğer şeylerin yanı sıra bir durum kodu içeren bir yanıt gönderir. Bu kodun, müşterinin yanıtı nasıl yorumlayacağını açıkça anlayabilmesi için özel bir anlamı vardır:

1xx: Bilgi mesajları

Bu kodlardan oluşan bir dizi HTTP/1.1'de tanıtıldı. Sunucu şu şekilde bir istek gönderebilir: Bekle: 100-devam, bu da istemcinin isteğin geri kalanını göndermeye devam ettiği anlamına gelir. HTTP/1.0 istemcileri bu başlıkları yok sayar.

2xx: Başarı mesajları

İstemci 2xx serisinden bir kod aldıysa istek başarılı olmuştur. En yaygın seçenek 200 OK'dir. Bir GET isteği ile sunucu, mesajın gövdesinde bir yanıt gönderir. Başka olası cevaplar da vardır:

  • 202Kabul edildi: İstek kabul edildi, ancak yanıtta kaynak bulunmayabilir. Bu, eşzamansız sunucu tarafı istekleri için kullanışlıdır. Kaynağın gönderilip gönderilmeyeceğine sunucu karar verir.
  • 204 içerik yok: Yanıtın gövdesinde mesaj yok.
  • 205 İçeriği sıfırla: Sunucuya belge görünümünü sıfırlama talimatı verin.
  • 206 Kısmi içerik: Yanıt, içeriğin yalnızca bir bölümünü içerir. Ek başlıklar, içeriğin toplam uzunluğunu ve diğer bilgileri tanımlar.

3xx: Yönlendirme

Müşteriye bir işlem daha gerçekleştirme ihtiyacı hakkında bir tür mesaj. En yaygın kullanım durumu, istemciyi başka bir adrese yönlendirmektir.

  • 301 Kalıcı Olarak Taşındı: Kaynak artık farklı bir URL'de bulunabilir.
  • 303 Diğerlerini Gör: Kaynak geçici olarak farklı bir URL'de bulunabilir. Konum başlığı geçici bir URL içerir.
  • 304 Değiştirilmemiş: Sunucu, kaynağın değiştirilmediğini ve istemcinin yanıtın önbelleğe alınmış sürümünü kullanması gerektiğini belirler. Bilginin kimliğini kontrol etmek için ETag kullanılır (Entity Tag hash);

4xx: İstemci hataları

Bu mesaj sınıfı, isteğin yanlışlıkla gönderildiğine karar verirse sunucu tarafından kullanılır. En yaygın kod 404 Bulunamadı. Bu, kaynağın sunucuda bulunmadığı anlamına gelir. Diğer olası kodlar:

  • 400 Hatalı İstek: Soru yanlış oluşturulmuştur.
  • 401 Yetkisiz: Bir istekte bulunmak için kimlik doğrulama gereklidir. Bilgi, Yetkilendirme başlığından geçirilir.
  • 403 yasak: Sunucu, kaynağı kullanılabilir hale getirmedi.
  • 405 Yönteme İzin Verilmiyor: Kaynağa erişmek için geçersiz bir HTTP yöntemi kullanıldı.
  • 409 Çatışma: Sunucu isteği tamamen işleyemiyor çünkü kaynağın daha yeni bir sürümünü değiştirmeye çalışır. Bu genellikle PUT isteklerinde olur.

5xx: Sunucu hataları

Bir isteği işlerken bir sunucu hatasını algılamak için kullanılan bir dizi kod. En yaygın olanı: 500 Dahili Sunucu Hatası. Diğer seçenekler:

  • 501 Uygulanmadı: Sunucu istenen işlevselliği desteklemiyor.
  • 503 Hizmet Kullanılamıyor: Bu, sunucuda bir hata varsa veya aşırı yüklenmişse olabilir. Genellikle bu durumda sunucu yanıt vermez ve yanıt için verilen süre sona erer.

İstek/Yanıt Mesajı Biçimleri

Aşağıdaki görüntüde, istemci tarafından bir istek gönderme, sunucu tarafından bir yanıt işleme ve gönderme sürecinin bir şemasını görebilirsiniz.

HTTP yoluyla iletilen mesajın yapısına bakalım:

Mesaj = *()CRLF[ ] = Talep Hattı | Durum satırı = Alan Adı ":" Alan Değeri

Mesajın başlığı ile gövdesi arasında boş bir satır olmalıdır. Birkaç başlık olabilir:

Karşılık gelen özellik etkinleştirildiyse (Transfer-Kodlama: yığın halinde), yanıt gövdesi bilgilerin tamamını veya bir kısmını içerebilir. HTTP/1.1, Transfer-Encoding başlığını da destekler.

Genel başlıklar

Hem isteklerde hem de yanıtlarda kullanılan çeşitli başlık türleri vardır:

Genel başlık = Önbellek Kontrolü | bağlantı | tarih | pragma | römork | transfer kodlama | yükseltme | aracılığıyla | Uyarı

Bu yazıda zaten bir şeyi ele aldık, ikinci bölümde bir şeye daha ayrıntılı olarak değineceğiz.

Via başlığı bir TRACE isteğinde kullanılır ve tüm proxy'ler tarafından güncellenir.

Pragma başlığı, özel başlıkları numaralandırmak için kullanılır. Örneğin Pragma: no-cache, Cache-Control: no-cache ile aynıdır. İkinci bölümde bunun hakkında daha fazla konuşacağız.

Date başlığı, istek/yanıtın tarihini ve saatini saklamak için kullanılır.

Yükseltme başlığı, protokolü değiştirmek için kullanılır.

Transfer-Encoding, Transfer-Encoding: chunked kullanarak yanıtı birden çok parçaya bölmeyi amaçlar. Bu, HTTP/1.1'de yenidir.

Varlık başlıkları

Varlık başlıkları, içerik meta bilgilerini iletir:

Varlık başlığı = İzin ver | İçerik Kodlama | içerik dili | içerik uzunluğu | İçerik Konumu | İçerik-MD5 | içerik aralığı | içerik türü | sona eriyor | Son düzenleme

Ön eki İçerik olan tüm başlıklar, mesaj gövdesinin yapısı, kodlaması ve boyutu hakkında bilgi sağlar.

Expires başlığı, varlığın sona erdiği saati ve tarihi içerir. "Asla sona ermez" değeri, geçerli andan itibaren süre + 1 kod anlamına gelir. Last-Modified, varlığın son değiştirildiği saati ve tarihi içerir.

Bu başlıkları kullanarak, görevleriniz için ihtiyaç duyduğunuz bilgileri belirtebilirsiniz.

Talep Formatı

İstek şuna benzer:

İstek Satırı = Yöntem SP URI SP HTTP Sürümü CRLF Yöntemi = "SEÇENEKLER" | "KAFA" | "GET" | "GÖNDERİ" | "KOYUN" | "SİL" | İZ

SP, belirteçler arasındaki ayırıcıdır. HTTP sürümü, HTTP Sürümü'nde belirtilir. Gerçek istek şöyle görünür:

GET /articles/http-basics HTTP/1.1 Ana Bilgisayar: www.articles.com Bağlantı: canlı tutma Önbellek Kontrolü: önbellek yok Pragma: önbellek yok Kabul et: text/html,application/xhtml+xml,application/xml; q=0,9,*/*;q=0,8

Olası istek başlıklarının listesi:

İstek başlığı = Kabul Et | karakter kümesini kabul et | kabul kodlama | Kabul Dili | yetkilendirme | beklemek | Kimden | ev sahibi | eşleşirse | If-Modified-Since | Eğer-Hiçbiri-Eşleşme | eğer aralık | If-Değiştirilmemiş-Başlangıç ​​| Maksimum Forvet | Vekil Yetkilendirme | aralığı | yönlendiren | TE | kullanıcı aracısı

Kabul başlığı, desteklenen mim türlerini, dili ve karakter kodlamasını tanımlar. From, Host, Referer ve User-Agent başlıkları, istemci hakkında bilgi içerir. If- önekleri koşul oluşturmak içindir. Koşul başarısız olursa, 304 Not Modified hatası oluşur.

Yanıt formatı

Yanıt formatı yalnızca durum ve birkaç başlık açısından farklılık gösterir. Durum şöyle görünür:

Durum Satırı = HTTP Sürümü SP Durum Kodu SP Neden Cümlesi CRLF

  • HTTP sürümü
  • Durum kodu
  • Okunabilir durum mesajı

Tipik bir durum şuna benzer:

HTTP/1.1 200 Tamam

Yanıt başlıkları şunlar olabilir:

Yanıt başlığı = Kabul Aralıkları | yaş | ET etiketi | konum | Proxy Kimlik Doğrulaması | Sonra Tekrar Dene | sunucu | çeşit | WWW-Kimlik Doğrulaması

  • Mesajın sunucuda oluşturulduğu saniye cinsinden yaş süresi.
  • Yanıttaki değişiklikleri ve düzenlemeleri kontrol etmek için ETag MD5 varlıkları.
  • Yönlendirme için konum kullanılır ve yeni URL'yi içerir.
  • Sunucu, yanıtın üretildiği sunucuyu belirtir.

Sanırım bugünlük bu kadar teori yeter. Şimdi HTTP mesajlarını izlemek için kullanabileceğimiz araçlara bir göz atalım.

HTTP trafiğini algılamak için araçlar

HTTP trafiğini izlemek için birçok araç vardır. İşte bunlardan birkaçı:

En sık kullanılan Chrome Geliştirici Araçlarıdır:

Bir hata ayıklayıcıdan bahsetmişken, Fiddler'ı kullanabilirsiniz:

HTTP trafiğini izlemek için curl, tcpdump ve tshark'a ihtiyacınız var.

HTTP Kitaplıkları - jQuery AJAX

jQuery çok popüler olduğundan, AJAX isteklerinden HTTP yanıtlarını işlemek için bir araç setine de sahiptir. jQuery.ajax(settings) hakkında bilgiler resmi sitede bulunabilir.

settings nesnesini geçirerek ve beforeSend callback işlevini kullanarak, setRequestHeader() yöntemini kullanarak istek başlıklarını ayarlayabiliriz.

$.ajax(( url: "http://www.articles.com/latest", şunu yazın: "GET", önceGönder: işlev (jqXHR) ( jqXHR.setRequestHeader("Dil Kabul Ediyor", "en-US,en) "); ) ));

Bir isteğin durumunu işlemek istiyorsanız, bunu şu şekilde yapabilirsiniz:

$.ajax(( statusCode: ( 404: function() ( alert("sayfa bulunamadı"); ) ) ));

Sonuç

İşte HTTP protokolünün temelleri hakkında bir tur. İkinci bölümde daha da ilginç gerçekler ve örnekler olacak.

90'ların başından günümüze tarayıcınızın web sayfalarını indirmesine izin veren bir ağ protokolü olan HTTP protokolünün ana yönlerinin açıklamasına dikkatinizi davet ediyoruz. Bu makale, bilgisayar ağlarıyla çalışmaya ve ağ uygulamaları geliştirmeye yeni başlayanlar ve resmi özellikleri kendi başlarına okumanın hala zor olduğu kişiler için yazılmıştır.

HTTP- başlangıçta köprü metni belgelerinin (yani, diğer belgelere geçişi düzenlemenize izin veren bağlantılar içerebilen belgeler) aktarımı için tasarlanmış, yaygın olarak kullanılan bir veri aktarım protokolü.

HTTP kısaltmasının açılımı Üstmetin transfer protokolü, "Üstmetin transfer protokolü". OSI spesifikasyonuna göre HTTP, bir uygulama (üst, 7.) katman protokolüdür. Protokolün geçerli sürümü olan HTTP 1.1, RFC 2616 belirtiminde açıklanmıştır.

HTTP protokolü, bir istemci-sunucu veri aktarım yapısının kullanıldığını varsayar. İstemci uygulaması bir istek oluşturur ve bunu sunucuya gönderir, ardından sunucu yazılımı bu isteği işler, bir yanıt oluşturur ve istemciye geri gönderir. Bundan sonra, istemci uygulaması aynı şekilde işlenecek olan diğer istekleri göndermeye devam edebilir.

Geleneksel olarak HTTP protokolü kullanılarak çözülen görev, web kaynaklarına erişen bir kullanıcı uygulaması (genellikle bir web tarayıcısı) ile bir web sunucusu arasındaki veri alışverişidir. Şu anda, HTTP protokolü sayesinde World Wide Web'in çalışması sağlanmaktadır.

HTTP ayrıca SOAP, XML-RPC ve WebDAV gibi diğer uygulama katmanı protokolleri için iletişim protokolü olarak da kullanılır. Böyle bir durumda HTTP protokolünün bir "taşıma" olarak kullanıldığı söylenir.

Birçok yazılım ürününün API'si, veri aktarımı için HTTP kullanımını da ima eder - verilerin kendisi, örneğin XML veya JSON gibi herhangi bir biçimde olabilir.

Kural olarak, HTTP protokolü aracılığıyla veri iletimi, TCP / IP bağlantıları üzerinden gerçekleştirilir. Sunucu yazılımı genellikle TCP bağlantı noktası 80'i kullanır (ve bağlantı noktası açıkça belirtilmemişse, istemci yazılımı genellikle HTTP bağlantılarını açmak için varsayılan olarak bağlantı noktası 80'i kullanır), ancak başka herhangi bir bağlantı noktası da kullanılabilir.

HTTP isteği nasıl gönderilir?

HTTP protokolüyle başa çıkmanın en kolay yolu, bazı web kaynaklarına manuel olarak erişmeye çalışmaktır. Bir tarayıcı olduğunuzu ve Anatoly Alizar'ın makalelerini gerçekten okumak isteyen bir kullanıcınız olduğunu hayal edin.

Diyelim ki adres çubuğuna şunu girdi:

http://alizar.site/

Buna göre artık web tarayıcısı olarak alizar.site adresindeki web sunucusuna bağlanmanız gerekiyor.

Bunu yapmak için herhangi bir uygun komut satırı yardımcı programını kullanabilirsiniz. Örneğin telnet:

Telnet alizar.site 80

Hemen açıklığa kavuşturmak için, aniden fikrinizi değiştirirseniz, Ctrl + "]" tuşlarına basın ve ardından girin - bu, HTTP bağlantısını kapatmanıza izin verecektir. Telnet'e ek olarak, tatmak için nc (veya ncat) - deneyebilirsiniz.

Sunucuya bağlandıktan sonra bir HTTP isteği göndermeniz gerekir. Bu arada, bu çok kolaydır - HTTP istekleri yalnızca iki satırdan oluşabilir.

Bir HTTP isteği oluşturmak için, bir başlangıç ​​satırı oluşturmanız ve ayrıca en az bir başlık ayarlamanız gerekir - bu, zorunlu olan ve her istekte bulunması gereken Ana Bilgisayar başlığıdır. Gerçek şu ki, bir alan adının bir IP adresine dönüştürülmesi istemci tarafında gerçekleştirilir ve buna göre, bir TCP bağlantısı açtığınızda, uzak sunucunun bağlantı için hangi adresin kullanıldığı hakkında herhangi bir bilgisi yoktur: örneğin olabilir , adres alizar..ru veya m.. Ancak, aslında, ağ bağlantısı her durumda 212.24.43.44 düğümü ile açılır ve başlangıçta bağlantıyı açarken bu IP adresi değil. belirtildi, ancak bazıları hiçbir şekilde bilgilendirilmedi - bu yüzden bu adresin Host başlığında iletilmesi gerekiyor.

HTTP 1.1 için başlangıç ​​(başlangıç) sorgu dizesi şu şekilde oluşur:

Örneğin (böyle bir başlangıç ​​satırı, sitenin ana sayfasının istendiğini gösterebilir):

Ve elbette, gerçekten kullanmaya başladığınızda herhangi bir teknolojinin çok daha basit ve daha net hale geldiğini unutmayın.

İyi şanslar ve mutlu öğrenmeler!

Etiketler:

  • http
  • alizar
  • spdy
Etiket ekle

Bir HTTP isteği veya mesajı üç bölümden oluşur: bir sorgu dizesi ve bir HTTP mesaj gövdesi.

Sorgu dizisi veya başlangıç ​​dizesi: sunucuya yapılan bir istekte, istek türünü (yöntem), istenen sayfanın URI'sini ve sürümünü (örneğin, HTTP/1.1) içeren bir dize. Sunucudan gelen yanıtta bu dize, HTTP protokol sürümünü ve yanıt kodunu içerir. Yanıt kodu üç basamaklı bir tamsayıdır. Genellikle kodu açıklayan boşlukla ayrılmış açıklayıcı bir ifade gelir, örneğin: 200 Tamam veya 404 Bulunamadı.

HTTP isteğinin yöntemleri (türleri): AL, POST, PUT, PATCH, HEAD, SİL, İZLE. Çoğu zaman, HTTP isteği GET yöntemini kullanır veya POST: GET, belirtilen URI'de bir web sayfasının içeriğini istemek için kullanılır. URI, belirtilmeden sayfanın adresidir, örneğin site/internet/chto-takoe-http-zapros-soobshhenie/ yerine /internet/chto-takoe-http-zapros-soobshhenie/. Tarayıcı, URI'deki "? ': GET /index.php?param1=değer1¶m2=değer2. Her zamanki GET yöntemine ek olarak, koşullu bir GET ve kısmi bir GET de vardır. Koşullu GET istekleri, If-Modified-Since , If-Match , If-Range ve benzeri başlıkları içerir.

POST - bilgileri göndermek için kullanılır. POST yöntemini kullanarak veri gönderirken, GET yöntemini kullanarak veri iletirken yapıldığı gibi, tarayıcıdaki adres giriş satırında değil, HTTP mesajının gövdesinde belirtilirler. Örneğin yazının altında yer alan form aracılığıyla yorum gönderilirken bilgi POST yöntemi kullanılarak sunucuya iletilir. Ayrıca POST yöntemi kullanılarak dosyalar sunucuya yüklenir.

web sayfasını düzgün bir şekilde oluşturmak için kullanılan çeşitli parametreleri içeren isteğin parçasıdır.

HTTP mesaj gövdesi- sunucudan alınan verileri, örneğin HTML kodu biçiminde oluşturulmuş bir web sayfasını veya örneğin bir resim gibi bir kaynağı içerir.

HTTP mesajı örneği:

Sunucuya HTTP isteği:

GET /internet/chto-takoe-http-zapros-soobshhenie/ HTTP/1..9,image/webp,*/*;q=0.8 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 ( KHTML, Gecko gibi) Chrome/40.0.2150.0 Kabul-Kodlama: gzip, deflate, sdch Kabul-Dil: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4 Çerez: wp- ayarlar-1=hidetb%3D; wp-settings-time-1=1424958215; wordpress_test_cookie=WP+Çerez;

Sunucu cevabı:

HTTP/1.1 200 Tamam - yanıt başlangıç ​​çizgisi: Sunucu: nginx/1.6.2 Tarih: 19 Nisan 2015 Paz 00:22:50 GMT İçerik Türü: text/html; charset=UTF-8 Content-Length: 9431 Bağlantı: keep-alive Keep-Alive: timeout=30 X-Powered-By: PHP/5.5.22 Son kullanma tarihi: Çar, 11 Ocak 1984 05:00:00 GMT Cache-Control: no-cache, must-revalidate, max-age=0 Pragma: no-cache Vary: Accept-Encoding Content-Encoding: gzip Ardından yanıt gövdesi (HTML sayfası) gelir.




bilgisayar yardım sitesi

© telif hakkı 2022,
rzdoro.ru - Bilgisayar yardım sitesi

  • Kategoriler
  • Ütü
  • Windows 10
  • Tarama
  • Windows 7
  • Ütü
  • Windows 10
  • Tarama
  • Windows 7