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:
- Yöntem. İsteğin türünü belirtir.
- Yol (yol). Bu, etki alanını izleyen URL dizesidir.
- 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:
- 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.
- Dosya bulunamazsa veya yoksa, sunucu istemciye hata olarak da adlandırılan bir 404 kodu gönderir.
- Kod 206, bir süre sonra devam ettirilebilen kısmi bir dosya indirme işlemini belirtir.
- 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.
- 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.
- 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 |
Bir dizüstü bilgisayarda Skype'ı nasıl geri yükleyeceğimizi düşünüyoruz.
Fixies ustaları tam sürüm Fixies oyunu tam sürüm bilgisayarınıza indirin
Net framework 3 hatalarını yükleme veya güncelleme, düzeltme
Dünyadaki sanal para birimleri ve sanal borsalar
Altın Numaralar Güzel bir telefon numarası nasıl satılır