Http parametreleri alır. Gönder, GET: Birbirlerinden gelen talepler arasındaki fark nedir?

  • 29.05.2019

Şimdi en yaygın kullanılan iki HTTP yöntemi: GET ve POST. Ancak, bu iki "çam" web geliştiricisi arasında bile kaybetmeyi başardığı ortaya çıktı. Bu bir açıklamadır: her iki yöntem de aynı sonucu elde etmek için kullanılabilir. Ancak, yöntemlerden herhangi birinin hızlı kullanımının, kanal ve güvenlik delikleri üzerindeki büyük yüklerin olduğu, mevduatlara yol açabileceği unutulmamalıdır.

Bunu yeterince önlemek için, bu yöntemlerin randevularını ve farklılıklarını anlamak daha ayrıntılıdır.

Yöntemlerin adlarının değerine girerseniz, zaten çok daha net olacaktır. (İngilizce'den almak için), yani Veri isteğine uygulanmalıdır. POST (C İngilizce. Posta ile gönder) - Sunucuya veri göndermek için geçerlidir. Her şey son derece basit ve anlaşılabilir görünüyor. Ancak, kimler bir geri bildirim biçimiyle iş kartı sitesi tarafından daha da karmaşık bir şekilde geliştirmek isteyenler, soruyu daha yakın tanımak daha iyidir.

Güvenli ve güvensiz HTTP istekleri

HTTP 1.1 şartnamesi iki konsepte girer: güvenli ve güvenli olmayan bir istek veya daha doğru ise, yöntem.

Güvenli - Bunlar yalnızca bilgi talep edebilecek yöntemlerdir. İstenen kaynağı değiştiremezler, kullanıcı, diğer bireyler veya sunucu için istenmeyen sonuçlara yol açamazlar. Örnekler güvenlidir. Web sayfasının veya görüntünün bir HTML isteği vardır. Güvenli, kafa ve yöntemleri bulun.

Not

Gerçekte, el sanatları zanaatkarları zarar verebilir ve sorgular alabilir. Örneğin, istekleri odaklamak.

Güvensiz istekleri, önceden tahmin edildiği gibi, onları yeniden kullanırlarsa, potansiyel olarak kötü sonuçlara yol açabilir. Bu tür talepler, temyiz ettikleri kaynağın içeriğini değiştirebilir. Bu tür taleplerin örnekleri: mesaj gönderme, kayıt, çevrimiçi ödeme. Güvensizliğin gönderilmesi, koyun, yöntemleri silin.

İDEMPotent (IDEMPotent) yöntemleri

İDMPotans - Çok sayıda returoring ile, bilginin modası geçmiş olması dışında, aynı sonucu geri getirecek yöntemlerin bir özelliği. Bu, aynı URL'ye erişerken, tüm kullanıcıların birini ve en sıkı web sayfasını, görüntü, video vb. Göreceği anlamına gelir. Bu özellik kazandı, koydu, yöntemleri silin.

Ve şimdi alma ve gönderme yöntemleri hakkında daha fazla bilgi: Her kısa "özeti" yapın.

Almak.

  • sunucudan veri almak için tasarlanmıştır;
  • talebin gövdesi boş;
  • sunucu tarafında işlenmiş, talebin boş kuruluşlarından dolayı sunucu kaynaklarının daha hızlı ve daha küçük tüketimi;
  • değişkenlerin iletimi, adres çubuğunda meydana gelir (bu, kullanıcıyı da görür, teknik veriler sorgu hattında şımartır) ve bu nedenle değişkenler ve değerleri hakkında bilgi (veriler korunmaz);
  • sunucuya az miktarda veriyi aktarabilir: tarayıcıya bağlı olan URL uzunluğunda sınırlamalar vardır, örneğin, IE6 \u003d 2KB. Bu, geliştiricilerin gezinmeleri Yahoo !;
  • sadece ASCII karakterlerini iletebilir;
  • böyle bir istek kopyalanabilir, kaydeder (örneğin, yer imlerinde);
  • İstek önbelleğe alınabilir (bu kontrol edilebilir);
  • kanal ve sunucudaki yükü daha da azaltmak için ve kısmi talepler mevcuttur;
  • hTTP bağlantısını kırmaz (Sunucuda KeepAlive etkinleştirildiğinde).

İLETİ.

  • sunucuya veri göndermek için tasarlanmıştır;
  • veri aktarımı sorgu gövdesinde gerçekleşir;
  • sunucunun yan tarafındaki işleme daha yavaş ve "daha zor", çünkü başlıklara ek olarak, sorgu gövdesini analiz etmeniz gerekir;
  • Çok miktarda veri iletebilme;
  • dosyaları aktarabilir;
  • gönderilen post sayfası yer imlerine kaydedilemez;
  • hTTP bağlantısını kırar;
  • Çok az miktarda bilgiyi bile aktarmak için, çoğu tarayıcı minimum iki TCP paketini gönderir: başlık ve ardından talebin gövdesi.

Bu iki yöntemin bu kadar benzer olmadığı ortaya çıkıyor. Bir veya başkasının kullanımı görevden dolayı olmalıdır, ancak almanın varsayılan olarak kullanılması gerçeği değil, bununla birlikte çalışmak daha kolaydır. Elbette, çoğu durumda, özellikle hızlı Ajax oluştururken, ancak eksikliklerini unutmayın. Kendim için, yöntem seçiminde basit bir algoritma notu yaptım.

Bu gönderi, iki ana yöntemin yardımıyla İnternetteki veri transferinin ilkelerini açıklamayı amaçlamaktadır: GET ve POST. Detaylar için neredeyse ilginç olanlar için değiştirilebilir bir çalışma programının jeneratörü için talimatlara ek olarak yazdım.

Aşağıdaki adrese gidin (bu görsel bir açıklama içindir): http://calendarin.net/calendar.php?year\u003d2016 Lütfen tarayıcının adres çubuğunu not edin: calendarin.net/calendar.php ? Yıl \u003d 2016 Ana dosyaya, ardından "2016" değeri olan bir soru işareti (?) Ve "Yıl" parametresini takip eder. Öyleyse, bir soru işaretini izleyen her şey, bu bir istek. Her şey basit. Bir parametreyi değil, birkaç dakika, daha sonra, AMPERSAND (& )'yı bölmek gerekir. Örnek: calendarin.net/calendar.php. ? Yıl \u003d 2016 ve DISPLAY \u003d Çalışma günleri-ve-gün-kapalı

Ana dosya da denir, ardından "2016" değeri olan "Yıl" parametresi, ardından "Yıl" parametresi, ardından "çalışma günleri-ve" -Days "parametresi -off.

GET-parametreler doğrudan tarayıcı adres çubuğunda değişebilir. Örneğin, "2016" değerini "2017" e değiştirir ve tuşa basarak, 2017 için takvime gideceksiniz.

Bu veri iletimi gizli bir şekilde (sayfa adresi değişmez); Yani, neyin bulaştığını görmek için, yalnızca programı kullanabilirsiniz (komut dosyası). Örneğin, aşağıdaki araçta metinde karakterleri hesaplamak için, ilk veriler posta yöntemi ile iletilir: http://usefulonlinetools.com/free/Character-counter.php

Sorularınız, yorumlarınız ve e-postamız varsa hizmetinizdadır.

Önceki notada incelediğimiz GET yöntemine ek olarak, HTTP protokolünde bir sorgu gönderme yöntemi var. Posta yöntemi de pratikte çok sık kullanılır.

Eğer, GET yöntemine atıfta bulunmak için, talebi URL'ye yazmamız yeterli, daha sonra her şey başka bir prensipte posta yönteminde çalışır.

Bu tür bir istek yürütmek için, Web sayfasında bulunan Type \u003d "Gönder Özniteliği" ile düğmeye tıklamamız gerekir. Lütfen bu düğmenin öğede bulunduğunu unutmayın.

Metod niteliğinde posta değeri ile.

Bu HTML kodunu düşünün:

Metni girin:


Kullanıcı metin alanına bir metne girerse ve "Gönder" düğmesini tıklatırsa, metin değişkeni, kullanıcının girdiği içeriğin içeriğiyle sunucuya gönderilecektir.

Basit kelimelerle gönderin ve istekleri alın

Bu değişken posta yöntemi tarafından gönderilecektir.

Formda yazarsanız:

Bu veriler get yöntemiyle gönderilecektir.

Eğer bir talep isteği durumunda, iletebileceğimiz veri miktarı tarayıcı uzunluğu uzunluğu ile sınırlıdır, daha sonra posta isteğinin durumunda, böyle bir kısıtlama yoktur ve önemli miktarda bilgi iletebiliriz.

POST yönteminin bir diğer farkı, posta yönteminin, kendilerine iletilen tüm değişkenleri ve vücudundaki değerlerini (varlık gövdesi) gizler. GET yöntemi durumunda, sorgu dizesinde (Request-URI) saklandılar.

İşte posta yöntemi tarafından yapılan bir talebe örneği:

/ Http / 1.0 \\ r \\ n
Ana Bilgisayar: www.site.ru \\ r \\ n
Referans: http://www.site.ru/index.html\\r\\n.
Çerez: Gelir \u003d 1 \\ r \\ n
İçerik türü: Uygulama / x-www-form-urlencoded \\ r \\ n
İçerik boyu: 35 \\ r \\ n
\\ r \\ n
Giriş \u003d Dima & Password \u003d 12345

Böylece, verileri posta yöntemiyle geçerken, saldırganı engellemek için çok daha zor olacaktır, çünkü Doğrudan görüntülemeden gizlenirler, bu nedenle verileri sonrası yöntemle iletme yöntemi daha güvenli olduğu düşünülmektedir.

Ek olarak, posta yöntemi sadece metin değil, aynı zamanda multimedya verileri (resim, ses, video) da iletilebilir. İletilecek bilgilerin türünü tanımlayan özel bir içerik türü parametresi vardır.

Ve son olarak, bu yöntemle iletilen verileri elde etmek için, sonrası değişkeni kullanılır.

İşte PHP'de işleme örneği:

echo $ _post ['metin'];
?>

Son notta, tarayıcının (istemcinin) istekleri HTTP sunucusuna gönderdiğini ve sunucunun HTTP istemcisine bir HTTP yanıtı gönderdiğine karar verdik. Bu talepler ve cevaplar belirli kurallara göre verilir. Sekizin yazılacağı gibi sözdizimi gibi bir şey var. Kesinlikle tanımlanmış bir yapı olmalıdır.

HTTP protokolünde istek ve cevaplar oluşturan bu yapıyı daha ayrıntılı olarak düşünelim.

HTTP talebi, aşağıda listelenen sırayla giren üç ana bölümden oluşur. Mesajın başlıkları ve gövdesi arasında boş bir çizgi var (ayırıcı olarak), bir dize çeviri sembolüdür.

Boş Dize (Ayırıcı)

Gönder ve istek alın, aralarındaki fark nedir ve daha iyi ve hangi amaçlar için?

mesaj gövdesi (varlık kuruluşu) - İsteğe bağlı parametre

Satır isteği - Transfer yöntemini gösterir, HTTP protokolünün erişimin sağlanması gereken URL adresi.

Başlıklar - Mesaj gövdesini tanımlayın, farklı parametreler ve diğer bilgileri ve bilgileri iletin.

mesaj gövdesi - Bu, istek üzerine iletilen verilerdir. Mesaj gövdesi isteğe bağlı bir parametredir ve eksik olmayabilir.

Sunucudan bir cevap aldığımızda, mesaj gövdesi en sık bir web sayfasının içeriğidir. Ancak, sunucuya sorgular ne zaman, örneğin, geri bildirim formunda doldurulmuş verileri sunucuya iletirken, bazen de mevcut olabilir.

Daha ayrıntılı olarak, her sorgu öğesi, aşağıdaki notlara bakacağız.

Örneğin, sunucuya bir gerçek isteği düşünelim. Sorgunun her bir kısmını rengimle vurguladım: bir sorgu hattı - yeşil, başlıklar - turuncu, vücut mesajı mavidir.

Tarayıcıdan istek:

Ev sahibi: webgyry.info.

Çerez: WP ayarları

Bağlantı: Keep-canlı

Aşağıdaki örnekte zaten bir mesaj gövdesi var.

Sunucu Cevap:

İçerik türü: Metin / HTML; Charset \u003d UTF-8

Transfer kodlaması: parçalanmış

Bağlantı: Keep-canlı

Keep-canlı: zaman aşımı \u003d 5

X-pingback: //webgyry.info/xmlrpc.php

Belge Başlıksız

İşte istemcinin ve HTTP sunucusunun mesajları.

Bu arada, Sitenizdeki bazı ürünlerde, Yandex Metrics ve Google Analytics'in "Hedefleri" kullanarak mantıklı olup olmadığını bilmek ister misiniz?

Neyi işe yaramadığını, neyin işe yaradığını ve gelirinizi iki katına çıkarın.

Yandex Metrics'in hedeflerini belirleme dersi ..

Google Analytics Gol Kurulum Kursu ..

HTTP istemcisi, sunucuya aşağıdaki formata sahip olan bir istek isteği biçiminde bir istek gönderir:

  • Sorgu Satırı (Zorunlu Öğe)
  • Başlık (isteğe bağlı öğe)
  • Boş Dize (Zorunlu Eleman)
  • Mesaj gövdesi (isteğe bağlı öğe)

Bu elemanların her birini ayrı ayrı düşünün.

Satır isteği

Sorgu dizesi, URI sorgusu ve protokol sürümünün ardından bir yöntem belirteci ile başlar. Elementler birbirinden dağılmıştır:

Bu öğeyi daha ayrıntılı olarak düşünün

İstek yöntemi

Bu eleman, sunucu tarafında belirtilen URI inferticusuna çağrılması gereken bir yöntemi gösterir.

HTTP'de sekiz yöntem var:

  • Kafa.
    Durum dizesini ve başlığını URI sunucusundan almak için kullanılır. Verileri değiştirmez.
  • Almak.
    Sunucudan belirtilen URI'ye veri almak için kullanılır. Verileri değiştirmez.
  • İLETİ.
    HTML formlarını kullanarak sunucuya (örneğin, geliştirici, vb. Bilgiler) veri göndermek için kullanılır.
  • Koymak.
    Kaynak yeni indirilen verilerdeki tüm önceki tüm verileri değiştirir.
  • Silmek.
    Tüm güncel verileri URI tarafından tanımlanan bir kaynak üzerine kaldırır.
  • Bağlan.
    Tünel bağlantısını sunucuya belirtilen URI'ye göre ayarlar.
  • Seçenekler.
    Belirtilen kaynağın bağlantı özelliklerini açıklar.
  • İz bırakmak
    URI'de belirtilen kaynağın geri dönüş izini içeren bir mesaj sağlar.

URI Talebi

URI (Tekdüzen Kaynak Tanımlayıcısı), sorgunun gönderildiği bir kaynak tanımlayıcısıdır. Aşağıdaki en yaygın URI formatıdır:

‘*’ Bir HTTP isteği belirli bir kaynağa, ancak sunucuya uygulanmadığında kullanılır. Yalnızca yöntemin kaynağa başvurmak için gerekli olmadığı durumlarda kullanılır. Örneğin,

absoluteuri. Bir proxy üzerinde bir HTTP isteği gerçekleştirildiğinde kullanılır. Proxy, uygun bir önbellekten bir sorgu iletmesi istenir ve cevabı döndürür. Örneğin:

Asbutivated_put | bir kaynaken Chatso kullanılmıştır.

GET ve GÖNDERİN İSTİYORUM İLE ÇALIŞMAYIN

Belirli bir sunucunun belirli bir kaynağı istenmektedir. Örneğin, istemci, sunucudan 80. bağlantı noktası üzerinden bir kaynak almak istiyor. Kaynak adresi "www.proselyte.net" ve aşağıdaki talebi gönderir:

Başlık Alanları İste

Başlık alanları, müşterinin istek hakkında ve kendileri hakkında sunucuya ek bilgi aktarmasını sağlar. Bu alanlar sorgu değiştiricileri olarak işlev görür.

Aşağıda kullanılabilecek en önemli başlık alanlarının kesişimidir:

  • KABUL EDİLMESİ.
  • Kabul etme
  • Kabul-dil.
  • yetki
  • Beklemek
  • Eğer maç
  • Eğer değiştirilmiş
  • İf-hiçbir maç
  • Eğer aralık.
  • Eğer değiştirilmemiş
  • Aralık.
  • Referans.
  • Kullanıcı aracısı

Kendi müşterinizi ve kendi web sunucunuzu uygulamaya karar verirsek, o zaman kendi başlık alanlarınızı oluşturabiliriz.

HTTP isteğine bir örnek

Bu konuda HTTP isteklerini öğrenmeyi tamamlıyoruz.
Bir sonraki makalede, HTTP cevaplarına bakacağız.

HTTP ile sunucuya bir istek göndermenin bir yolu, GET yöntemini istemektir. Bu yöntem en yaygın olanıdır ve sunucunun kullanımı ile en sık gerçekleşir.

Bir get sorgusu oluşturmanın en kolay yolu, URL'yi tarayıcının adres çubuğuna yazmak için kullanılabilir.

Tarayıcı, sunucuyu yaklaşık olarak aşağıdaki bilgiler için gönderir:

Al / http / 1.1
Ev sahibi: webgyry.info.
Kullanıcı Aracısı: Mozilla / 5.0 (Windows NT 6.1; RV: 18.0) Gecko / 20100101 Firefox / 18.0
Kabul Et: Metin / HTML, Uygulama / XHTML + XML, Uygulama / XML; Q \u003d 0.9, * / *; Q \u003d 0.8
Kabul etme Dili: RU-TR, RU; Q \u003d 0.8, EN-US; Q \u003d 0.5, EN; Q \u003d 0.3
Kabul etme kodlaması: GZIP, Deflate
Çerez: WP ayarları
Bağlantı: Keep-canlı

İstek iki bölümden oluşur:

1. İstek satırı (istek çizgisi)

2. Başlıklar (Mesaj Başlıkları)

Lütfen GET sorgunun bir mesaj gövdesi olmadığını unutmayın. Ancak, bu onunla birlikte, herhangi bir bilgiyi sunucuya aktaramadığımız anlamına gelmez.

GET ve POST YÖNTEMLERİ arasındaki fark

Bu, özel alma parametreleri yardımı ile yapılabilir.

Talep etmek için parametreleri elde etmek için, URL adresinin sonunda bir işaret "?" Ve ardından aşağıdaki kuralda ayarlamaya başladıktan sonra:

parametre_name1 \u003d değer parametreleri1 ve parametre adı2 \u003d değer parametreleri2 & ...

Parametreler arasındaki ayırıcı "&" işaretidir.

Örneğin, iki değeri geçmek istiyorsak, kullanıcı adı ve yaşı, bu bir sonraki satır yapılabilir:

http://site.ru/page.php?name\u003ddima&age\u003d27

Bu sorgu yürütüldüğünde, veri, Web Programlama Sunucusunu kullanarak sunucuda elde edilebilecekleri Query_string ortam değişkenine düşer.

İşte PHP'de yapılabileceği gibi bir örnek.

"Adınız:" exo. $ _GET ["İsim"]. "
»;
"Yaşınız:" exho. $ _GET ["Age"]. "
»;
?>

$ _Get tasarım ["parametre adı"], iletilen parametrenin değerini görüntülemenizi sağlar.

Bu kodun yürütülmesinin bir sonucu olarak tarayıcıda görüntülenecektir:

İsminiz: Dima
Yaşınız: 27

ayrıca, GET sunucusuna bir istek de gerçekleştiriyoruz.

HTTP - HyperText Transport Protokolü, TCP / IP yığın protokollerinden biri. Başlangıçta, Protokol HTML sayfalarını aktarmak ve almak için oluşturuldu, ancak şimdi dağıtılmış bilgi sistemleri için mükemmel bir şekilde kullanılır. Bu, World Wide Web'deki en çok kullanılan protokollerden biridir.

Resim 1

Sorgu / yanıt şemasına göre. Müşteri sunucuya bir istek gönderdiğinde, 3 tür istek kullanarak yapabilir: Al, koy ve gönderin.

HTTP Protokolü İsteğini Alın

Almak. - Bu bir müşteri istek bilgisidir. Müşterinin web tarayıcısı, ondan sayfa almak için bir mesaj gönderir. Sorgunun iki kısmı var:

  • satır isteği
  • başlıklar

Bir sorgunun veri gövdesi yoktur, ancak bu, herhangi bir veriyi sunucuya iletemediği anlamına gelmez. URL'deki özel parametrelerin yardımıyla, veri sunucusu sunucuya iletilebilir. İşaret ? URL'deki etki alanından sonra, parametrelerin devam edeceği anlamına gelir. Şekil 2'de, tarayıcı sunucusunu ne tür bir bilginin ilettiğini görebilir.

Şekil 2.

Gönderin ve http protokol isteğini belirtin

Bu iki yöntem, Web sunucusuna bilgi göndermek için uygulanır. Örneğin, özel web formlarının yardımı ile, bunları doldurun, post yöntemini kullanarak bunları sunucuya göndeririz. Ayrıca Web sunucusundaki kaynakları veya verileri indirin (resim, video).

HTTP güvenli bir protokol değildir ve post mesajları, şifrelenmemiş olarak ele geçirilebilir ve okunabilir. POST yöntemini kullanarak veri güvenliği için HTTPS protokolü kullanır. Verileri şifreler ve kimlik doğrulayabilir. Ayrıca, taşıma ve uygulamalı seviyeler arasındaki bilgi için ek gereklilikleri uygular.

Gönderme ve alma yöntemleri arasındaki temel farklılıklar Tablo 1'de gösterilmiştir.

Şekil 3, sunucunuzdaki çalışmayı uygulamak için GET veya POST yöntemini seçerken takip etmesi gereken temel kuralları göstermektedir.

Bu yazı, yorumlarda belirtilen sorunun cevabını makalelerimden birine.

Makalede, HTTP yöntemlerinin ne yapıldığını / posta / takma / delete ve diğerlerini, icat edildikleri ve diğerlerinin gerisini nasıl kullanacağını söylemek istiyorum.

Http.

Peki, ana internet protokollerinden biri nedir? Pedantlar RFC2616'ya gönderilir ve gerisi insanca hakkında söyleyecektir :)

Bu protokol, iki bilgisayar (istemci ve sunucu) arasındaki etkileşimi, istek olarak adlandırılan, istek çağrısında bulunur) ve yanıt (yanıt) açıklanmaktadır. Her mesaj üç bölümden oluşur: başlangıç \u200b\u200bçizgisi, başlıklar ve vücut. Bu durumda, sadece başlangıç \u200b\u200bçizgisi zorunludur.

Talep ve yanıt için başlangıç \u200b\u200bçizgileri farklı bir formata sahip - biz sadece bu gibi görünen sorgunun başlangıç \u200b\u200bçizgisi ile ilgileniyoruz:

Yöntem URI Http / Sürüm. ,

Bu yöntem sadece HTTP sorgu yöntemidir, URI kaynak tanımlayıcısıdır, sürüm Protokolün sürümüdür (şu anda güncellenmiş sürüm 1.1).

Başlıklar, kolonla ayrılmış bir çift ad ismidir. Başlıklarda, çeşitli servis bilgileri iletilir: Mesaj kodlaması, tarayıcının adı ve sürümü, müşterinin geldiği adres (yönlendirici) vb.

Mesaj gövdesi aslında, iletilen verilerdir. Tahmin edilen veriler, bir kural olarak, tarayıcının istediğiniz HTML sayfası ve örneğin Mesaj gövdesinde, sunucuya indirilen dosyaların içeriği iletilir. Ancak bir kural olarak, sorgudaki mesaj gövdesi genellikle yoktur.

HTTP etkileşimi örneği

Bir örnek düşünün.

Soruşturma:
/ 1dex.php http / 1.1 ana bilgisayar: example.com Kullanıcı Aracısı: Mozilla / 5.0 (X11; U; Linux I686; RU; RV: 1.9B5) Gecko / 2008050509 Firefox / 3.0B5 Kabul: Metin / HTML Bağlantısı: Kapat
İlk satır sorgu dizesidir, gerisi başlıklardır; Vücut mesajı yok

Cevap:
HTTP / 1.0 200 OK Sunucu: Nginx / 0.6.31 İçerik-Dil: RU İçerik türü: Metin / HTML; Charset \u003d UTF-8 İçerik Boyu: 1234 Bağlantı: Kapat ... HTML Sayfa ...

Kaynaklar ve Yöntemler

Talebin başlangıç \u200b\u200bçizgisine geri dönelim ve bu tür bir parametreyi URI olarak sunduğunu hatırlayalım. Bu, tekdüze kaynak tanımlayıcısı - tek tip bir kaynak tanımlayıcısı olarak şifresi çözülür. Kaynak, bir kural olarak, sunucudaki dosya (bu durumda URI örneği "" /styles.css "), ancak hiç, herhangi bir soyut nesne olabilir (" / bloglar / WebDev / "olabilir - Belirli bir dosyada değil, "Web Geliştirme" bloğu).

HTTP sorgu türü (ayrıca HTTP yöntemi olarak da bilinir), sunucuyu bir kaynakla üretmek istediğimizi gösterir. Başlangıçta (90'lı yılların başlarında), müşterinin yalnızca birinin kaynağından almasını isteyebileceği varsayılmıştır - onu almak için, ancak şimdi, HTTP protokolü tarafından, gönderiler oluşturabilirsiniz, profili düzenleyebilir, mesajları silebilir, mesajları silebilirsiniz. Ve bu eylemlerin "makbuz" terimini birleştirmek zordur.

HTTP yöntem seviyesindeki kaynaklarla eylemi sınırlandırmak ve aşağıdaki seçenekler icat edildi:

  • Almak - bir kaynak almak
  • Kaynak Oluşturma Sonrası
  • Koyu - Kaynak Güncellemesi
  • Sil - Kaynak Sil
HTTP spesifikasyonunun tüm yöntemleri (aslında 4'ten fazla) anlamak için sunucuyu mecburiyet etmemesi gerçeğine dikkat edin - sadece bir istek alırken yapılması gereken sunucuyu göstermez. bir veya başka bir yöntem. Ve bu, Sil / 1Index.php isteğine cevap olarak sunucunun HTTP / 1.1 olduğu anlamına gelir. zorunlu değil Sunucudaki index.php sayfasını silin ve /index.php http / 1.1 isteğini almak için zorunlu değil Dizin.php sayfasını size döndür, örneğin silebilir, örneğin :)

Dinlenme oyuna girer

Dinlenme (Temsilci Devlet Transferi), 2000 yılında HTTP protokolünün geliştiricilerinden biri olan Roem Fiem Fiem (Roy Fielding) tarafından tanıtıldı. Web Sitesi İnşaat İlkeleri grubunun adı olarak. Genel olarak, gerisi, daha geniş bir alanı HTTP'den kaplar - diğer protokollerle diğer ağlarda uygulanabilir. Dinlenme, "kaynak" ve "fiil" kavramlarına dayanarak, müşterinin etkileşimi ve sunucusunun ilkelerini açıklar (bunları her ikisine de konu olarak anlayabilirsiniz). HTTP durumunda, kaynak URI ile belirlenir ve fiil bir HTTP yöntemidir.

Dinlenme, farklı kaynaklar için aynı URI'yi kullanmayı reddetmeyi önerir (yani, /index.php?article_id\u003d10 ve /index.php?article_id\u003d20 gibi iki farklı makalenin adresleri, dinlenme yolunda değildir) ve farklı kullanır. Farklı eylemler için HTTP yöntemleri. Yani, dinlenme yaklaşımını kullanarak yazılan bir web uygulaması bir kaynağı silecek (tabii ki, bu, elbette, bu, her şeyi ve her şeyi kaldırma fırsatını vermek için gerekli olduğu anlamına gelmez, ancak hiç Uygulamada silme talebi, HTTP-Sil yöntemini kullanmalıdır).

Dinlenme, programcılara standartlaştırılmış ve biraz daha güzel web uygulamalarını öncekinden daha fazla yazabilir. Gerisini kullanarak, yeni bir kullanıcı eklemek için URI, /user.php?action\u003dCreate (get / posta yöntemi) ve basitçe /user.php (sıkı posta yöntemi) olmayacaktır.

Sonuç olarak, mevcut şartname HTTP ve geri kalanı yaklaşımı nihayetinde çeşitli HTTP yöntemlerinin anlamını kazanır. GET - Kaynağı döndürür, gönderin - Mevcut, Sil - Silleri oluşturan yeni, Put - Güncellemeleri oluşturur.

Sorunlar?

Evet, istirahatin pratikte kullanılmasıyla ilgili küçük bir sorun var. Bu sorunun HTML denir.

Koy / Sil Talepler, Kılavuz Sunucuya (Curl veya hatta Telnet üzerinden bile) atıfta bulunarak XMLHTTpRequest üzerinden gönderilebilir, ancak tam teşekküllü bir Put / Sil isteği gönderen bir HTML formu yapamazsınız.

Gerçek şu ki, HTML spesifikasyonu, almak veya posta yoluyla farklı veri gönderen formlar oluşturmanıza izin vermez. Bu nedenle, normal çalışma için diğer yöntemlerle, yapay olarak taklit etmek zorundalar. Örneğin, rafta (Ruby'nin web sunucusuyla etkileşime girdiği bir mekanizma; raf, raylar, merb ve diğer yakut çerçeveleriyle yapılır) formda "_method" adı verilen gizli bir alan ekleyebilirsiniz. Değer Yöntemin adını belirtin (örneğin "" Put ") - Bu durumda, bir başvuru sonrası gönderilecektir, ancak rafta bulunduğum takas yapabilecek gibi davranabilecektir.

PHP'de alma ve posta yöntemlerinin kullanımı, bu yöntemler neredeyse her sitede bulunduğundan, abartılması zordur. Aşağıdaki tarif edilen materyali incelemeden önce, HTML etiketiyle tanışmanızı tavsiye ederim. . Bu yöntemlerin her birini ayrıntılara göre düşünün.

Yöntem almak

GET yöntemi, verileri iletmek için URL dizesini kullanır. Belki de uzun ve anlaşılmaz URL'lere dikkat ettiniz. Örneğin: fonksiyonu.php? Login \u003d Alex & E-posta \u003d Dezyakin. Bu durumda, veriler İşlev.php'de işlenir. Soru işareti "?" Sonrası, iletilen parametreleri numaralandırın (parametre "&" işareti tarafından paylaşılır) değerler: Giriş parametresi Alex değerine ve E-posta Değişkeni Dizyakin'e atanmıştır. Veriler SuperGlobal Array $ _get'te saklanacaktır. Aşağıdaki GET yöntemini kullanmanın bir örneğini verelim:

Oturum aç: E-posta: SuperGlobal Array $ _get kullanarak, atanan değerleri türetiyoruz:* / Eko "
login \u003d ". $ _get [" Giriş "]; echo"
e-posta \u003d ". $ _GET [" e-posta "];?\u003e

SuperGlobal Array $ _get'tan gelen değerleri nasıl okuduğumuza dikkat edin: $ _GET ["interface_name"]. Örneğimize göre, değişkenlerin isimleri formda ilan edildi (ad \u003d giriş ve isim \u003d e-posta).

Konsey:
Elde edilen değerleri işlemeden önce, işlevler aracılığıyla varoluş için onları kontrol etmenizi tavsiye ederim. İssas (name_name) veya boş (name_name) - Bu fonksiyonlar önceki ders 2'de göz önünde bulunduruldu: PHP'deki değişkenler. Örneğin:

iSSET ile Yürütme Kontrolü: ISSET ($ _GET ["login"]) giriş işleme operatörleri ... } //veya boş kullanarak varlığını kontrol edin: Eğer boşsa ($ _GET ["e-posta"]) ( e-posta işleme operatörleri ... } ?>

Formda, iletilen değerleri işleme koyacak dosyanın adını belirleyebilirsiniz. Bu, bu dosyanın adresini atayabileceğiniz eylem formu özniteliği kullanılarak yapılır. Varsayılan olarak, bu dosya geçerli dosyaya atanır (yani, formun bulunduğu dosyada işleniyor). Formdan gelen verilerin işlemden Srcipt.php dosyasına iletildiği bir örnek verelim:

Oturum aç: E-posta:

Script.php dosyasında, bir tür bilgi işleyicisi bulunmalıdır, aksi takdirde bilgiler boşalacak şekilde aktarılacaktır.

GET yöntemi bir dizi kusur vardır:

  • Kullanıcı, iletilen parametrelerin değerlerini görür;
  • Kullanıcı, iletilen parametreleri kolayca taklit edebilir;
  • İkili Bilginin Rahatsız Buluşu (bir metin biçiminde kodlamanız gerekir);
  • İletilen veri miktarı sınırlıdır - 8 KB;

Yukarıdaki kusurlar nedeniyle, GET yöntemi yalnızca az miktarda veri aktarmanız gereken durumlarda uygulanır ve bu veriler sınıflandırılmamıştır.

Posta yöntemi

Mesaj yöntemi, verilerin kapalı bir formda iletildiğinden farklıdır. Verilerin aşağıdaki gibi okunabileceği bir SuperGlobal Array $ _post vardır: $ _POST ["PRIEST_NAME"]. Örneğin:

Oturum aç: "\u003e E-posta: ">
SuperGlobal Dizisi $ _POST yardımıyla, atanan değerleri görüntüleriz:* / Eko "
login \u003d ". $ _POST [" Giriş "]; echo"
e-posta \u003d ". $ _POST [" e-posta "];?\u003e

Açıklanan kodun üzerindeki yürütmenin sonucu aşağıdaki şekilde gösterilmiştir:

URL'nin herhangi bir siciliniz olmadığını gördüğünüz gibi, ancak veriler elde edildi ve kaldırıldı.

Not:
1) Posta yöntemi ile iletilen değerlerin miktarı sınırlıdır ve 8 MB'a eşittir. Bu değeri büyütmek için Php.ini'deki Post_Max_Size Direktifini değiştirmeniz gerekir.

2) Superglobal dizilerinin kısa isimleri yerine PHP'nin önceki sürümlerinde $ _GET ve $ _POST, daha uzun adlar kullanıldı: $ http_get_vars ve $ http_post_vars. Varsayılan olarak, PHP 5'te kapatılırlar, ancak Register_Long_Arrays parametresini kullanarak PHP.INI Configuration dosyasında bunları etkinleştirebilirsiniz. PHP 6 versiyonlarında, bu uzun isimler kullanılamaz.

3) Değişkenleri $ _POST'tan işlemeden önce, varlıkları için değişkenleri kontrol etmenizi ve GET yöntemiyle yapıldığını bildiririm.