Menü
Bedava
kayıt
ev  /  Multimedya/ Get yöntemiyle veri aktarımı nedir? Eylem Özelliği ve Yöntemi

Get yöntemi veri aktarımı nedir. Eylem Özelliği ve Yöntemi

Hemen hemen tüm programlarda ortak olan iki kavram vardır - girdi verilerinin işlenmesi ve sonuçların çıktılanması. Bu sayfada, CGI programlarının girişini ele almaya odaklanacağız. Birincisi, girdi nereden geliyor ve ikincisi, girdi sunucuya nasıl iletiliyor. Etkili CGI programları yazmak için bu şeyleri net bir şekilde anlamanız gerekir.

HTTP hakkında biraz

Sunucu üç tür isteği kabul eder: GET, POST ve HEAD. Web sunucusuna program isteği şöyle görünür:

GET /index.html HTTP / 1.0

İlk kısım, bu durumda GET, istek yöntemidir, ikincisi, index.html, istenen URL'dir ve üçüncü kısım, HTTP / 1.0, istemci tarafından kullanılan protokoldür.

İki ana istek yöntemi GET ve POST'tur. Bunlar, form oluştururken kullanabileceğiniz yöntemlerle aynıdır. HEAD yöntemi tarayıcı tarafından nadiren kullanılır çünkü yalnızca yanıt üstbilgisini ister ve bu durumda yanıt gövdesi gönderilmez. Örneğin, sayfanın değişip değişmediğini kontrol etmek için tarayıcı bir başlık isteyebilir, ancak bu tam bir veri alışverişi oluşturmaz.

GET yöntemi

Varsayılan olarak, istek GET yöntemini kullanır. POST yöntemi yalnızca form isteğinde açıkça belirtildiğinde kullanılır. Bir CGI programcısı için, bir GET isteği yapıldığında, form verilerinin URL ile birlikte sunucuya gönderildiğini anlaması çok önemlidir. CGI'yi destekleyen web sunucuları bu verileri şuraya kopyalar: Çevre değişkeni QUERY_STRING adlı. Bundan sonra, CGI programı, ortam değişkeninden verileri almaktan ve işlemekten sorumludur.

Sorgu dizesini içeren URL şuna benzer:

Http://www.domen-name.com/login.pl?nick=maks&psw=parol

İmza? sorgu dizesini kaynağın gerçek URL'sinden ayırır; nick ve psw sunucuya iletilen değişkenlerdir, sırasıyla maks ve parol değerleridir.

POST yöntemi

POST yöntemi, formun YÖNTEM özniteliğinde açıkça belirtildiğinde kullanılır. GET yönteminden farklı olarak POST, verileri URL'ye değil, isteğin gövdesine yerleştirir. POST isteği, HTTP yanıtına çok benzer. İlk satır, POST yöntemini belirten standart bir HTTP isteğidir. İstek gövdesinden boş bir satırla ayrılmış gerekli ek başlıkları içerebilir.

POST yöntemini kullanırken, istek gövdesi programa standart girdi olarak iletilir.

GET ve POST arasında seçim yapmak

Açıktır ki, bir CGI programcısı, form geliştirirken bu yöntemlerden hangisini kullanacağı sorusuyla karşı karşıya kalacaktır. Çoğu durumda, her iki yöntem de işe yarar ve her ikisi de iyi sonuç verir. Bununla birlikte, bir yöntemin veya diğerinin kullanılmasının belirli avantajlar sağladığı durumlar vardır.

GET veya POST yöntemini tercih etmenin mantıklı olduğu birkaç duruma bakalım.

  • Programınızın referans olarak çağrılmasını istiyorsanız GET yöntemi tercih edilmelidir.
  • Programınıza iletilen argümanların sunucu günlük dosyasına yazılmasını istemiyorsanız, POST yöntemini kullanın. Örneğin, bir form bir kullanıcı adı ve parola gerektiriyorsa, muhtemelen adların ve parolaların rapor dosyasına kaydedilmesini istemezsiniz. Ayrıca, şifreyi URL'nin bir parçası olarak iletmek akıllıca değildir.
  • Formunuz önemli boyutlara sahipse, örneğin notlar ve yorumlar içeren metin kutuları varsa, POST yöntemini kullanmalısınız. Genel olarak konuşursak, bu durumda da GET yöntemini kullanabilirsiniz, ancak daha sonra farklı URL boyutu kısıtlamaları ile karşılaşabilirsiniz. işletim sistemleri ve tarayıcılar (ortam değişkenlerinin boyutuyla sınırlıdır). POST yöntemini kullanmak daha kolaydır.
  • Formunuz bir dosya alanı içeriyorsa, POST yöntemini kullanın. Ayrıca bu durumda ENCTYPE özniteliğinin değerini multipart/form-data olarak ayarlamanız gerekir.

GET yöntemleri ve POST'tan HTTP'ye ve HTTPS, HTTP (Köprü Metni Aktarım Protokolü) protokolünü kullanarak bir istemciden bir sunucuya veri aktarmak için kullanılan en popüler yöntemlerden ikisidir. Hem GET hem de POST, istek göndermek ve yanıt almak için kullanılabilir, ancak ikisi arasında önemli bir fark vardır.

HTTP veya HTTPS'deki GET ve POST istekleri arasındaki fark, her web programlama röportajında ​​popüler bir sorudur. HTML, Java, ASP veya PHP gibi web sunucusu teknolojisinden bağımsız olduğundan ve HTTP, İnternet alanındaki ana protokol olduğundan, GET ve POST yöntemlerini anlamanın önemi açıkça göz ardı edilemez. Bu yazıda, HTTP GET yönteminin ne olduğuna, HTTP POST yönteminin ne olduğuna, belirli bir isteğin ne zaman kullanılacağına ve aralarındaki farkın ne olduğuna bakacağız. Her kavramı ayrı ayrı analiz edelim.

HTML nedir?

HTML, web sayfaları oluşturmak için kullanılan dildir. Köprü metni, bir HTML sayfasının içerebileceği köprüleri ifade eder. İşaretleme dili, sayfanın düzenini ve sayfadaki öğeleri tanımlamak için etiketlerin kullanılma şeklini ifade eder.
Aşağıda HTML örneği bir başlık ve bir paragraf metin içeren temel bir web sayfasını tanımlamak için kullanılır:



<Голова>
<Название>TechTerms.com

<Тело>

Bu, HTML'de bir paragraf örneğidir.

İlk satır, belgede bulunan içeriğin türünü tanımlar., ve hepsi yukarıdaki örneğe dahil edilmiştir. Sayfa başlığı, meta veriler ve bağlantı dosyası bağlantıları arasına yerleştirilir Gerçek sayfa içeriği etiketler arasındadır .

Web, son birkaç on yılda birçok değişiklik geçirdi, ancak HTML her zaman web sayfalarını geliştirmek için kullanılan birincil dil olmuştur. İlginç bir şekilde, web siteleri daha gelişmiş ve etkileşimli hale gelirken HTML daha basit hale geldi. Bir HTML5 sayfasının kaynağını HTML 4.01 veya XHTML 1.0'da yazılmış benzer bir sayfayla karşılaştırırsanız, HTML5 sayfasında daha az kod olacaktır. Bunun nedeni, modern HTML'nin bir sayfadaki hemen hemen tüm öğeleri biçimlendirmek için Basamaklı Stil Sayfalarına veya JavaScript'e dayanmasıdır.

Birçok dinamik web sitesi, PHP veya ASP gibi bir sunucu tarafı betik dili kullanarak anında web sayfaları oluşturur. Ancak, dinamik sayfalar bile HTML kullanılarak biçimlendirilmelidir. Bu nedenle, komut dosyası dilleri genellikle web tarayıcısına gönderilen HTML'yi oluşturur.

Köprü Metni Aktarım Protokolü (HTTP), istemciler ve sunucular arasındaki iletişim için tasarlanmıştır ve bir istek-yanıt protokolü gibi çalışır.

Web tarayıcısı istemci olabilir ve web sitesini barındıran bilgisayardaki uygulama sunucu olabilir.

İstemci (tarayıcı) sunucuya bir HTTP isteği gönderir, sunucu, isteğin durumu hakkında bilgi içeren bir yanıt döndürür ve ayrıca istenen içeriği de içerebilir.

GET ve POST olmak üzere iki istek yöntemi

İstemci ve sunucu arasında istek-yanıt için yaygın olarak kullanılan iki yöntem:

    GET - belirtilen kaynaktan veri ister;

    POST - İşlenecek verileri belirtilen kaynağa gönderir.

GET ve POST'u çevirmek, kelimenin tam anlamıyla alma ve işleme sonrası anlamına gelir.

HTTP hakkında daha fazla bilgi

HTTP, İnternet üzerinden veri aktarmak için kullanılan protokoldür. İnternet Protokolü paketinin bir parçasıdır ve bir web sayfasına veri aktarmak için kullanılan komutları ve hizmetleri tanımlar.

HTTP, sunucu-istemci modelini kullanır. İstemci bir ev bilgisayarı, dizüstü bilgisayar veya mobil cihaz... HTTP sunucusu genellikle şu özelliklere sahip bir web barındırıcısıdır: yazılım Apache veya IIS gibi bir web sunucusu. Bir kullanıcı bir web sitesine eriştiğinde, tarayıcı uygun web sunucusuna bir istek gönderir ve bir HTTP durum koduyla yanıt verir. URL geçerliyse ve bağlantı sağlanırsa, sunucu web sayfasını ve ilgili dosyaları tarayıcıya gönderir.

Ortak HTTP durum kodları şunları içerir:

    200 - başarılı istek (web sayfası var);

    301 - sürekli hareket eder (genellikle yeni bir url'ye yönlendirir);

    401 - yetkisiz istek (yetkilendirme gerekli);

    500 — İç hata sunucu (genellikle yanlış yapılandırma sunucu).

HTTP'de POST ve GET

HTTP, web sitelerinde form gönderimlerini işlemek için kullanılan GET ve POST komutlarını tanımlar. CONNECT komutu, SSL kullanılarak şifrelenmiş güvenli bir bağlantıyı kolaylaştırmak için kullanılır. Şifreli HTTP bağlantıları, güvenli veri aktarımları için tasarlanmış bir HTTP uzantısı olan HTTPS üzerinden gerçekleşir.

"http://" ile başlayan URL'lere standart köprü metni aktarım protokolleri aracılığıyla erişilebilir ve varsayılan olarak 80 numaralı bağlantı noktasını kullanır. "https://" ile başlayan URL'lere güvenli bağlantı yoluyla erişilebilir HTTPS bağlantısı ve genellikle 443 numaralı bağlantı noktasını kullanın.

İLETİ

POST bir seridir sistem kontrolleri açıldıklarında bilgisayarlar ve diğer elektronik cihazlar tarafından yürütülür. Test sonuçları ekranda görüntülenebilir, yanıp sönen LED'ler aracılığıyla görüntülenebilir veya yalnızca dahili olarak kaydedilebilir. V bilgisayar sistemleri POST işlemi, önyükleme sırasının başında gerçekleştirilir. Tüm testler başarılı olursa, başlatma işleminin geri kalanı otomatik olarak devam eder.

Mac ve Windows işletim sistemleri, bilgisayar her başlatıldığında veya yeniden başlatıldığında POST çalıştırır. Tarama kontrolleri Donanım ve işlemci, RAM ve depolama aygıtlarının düzgün çalışmasını sağlar. POST sırasında bir hata oluşursa, başlatma işlemi duraklayabilir veya tamamen durabilir ve monitör, BIOS bilgi ekranında genellikle POST hatalarının görüntülendiğini belirten bir mesaj görüntüleyebilir. "08" gibi kripto kodları olarak veya "Osette sistem belleği hatası" gibi bir sistem mesajı olarak çıkarılabilirler. Mac'te, POST hataları genellikle hiçbir önyükleme aygıtı bulunamadığını gösteren bozuk klasör simgesi gibi basit grafiklerle gösterilir.

Fiziksel belirtiler

Bazı durumlarda, bilgisayar ekranı POST hatalarından önce açılmayabilir. Bu olursa, yanıp sönen LED'ler aracılığıyla hata kodları görüntülenebilir veya ses sinyalleri... Örneğin, elma iMac'i art arda üç ton çalacak, beş saniye duraklayacak ve ardından başlatma sırasında bozuk RAM algılandığında tonları tekrarlayacaktır. Her üretici kendi kodlarını kullansa da çoğu bilgisayar POST hataları algılandığında bip sesi çıkarır.

POST, yalnızca kullanıcılar tarafından kullanılan oldukça teknik bir terimdir. bilgisayar teknisyenleri düzenli bir şekilde. Ancak bu, bilgisayarlarda veya diğer cihazlarda görüntülenebilecek hata mesajlarının daha iyi anlaşılmasına yardımcı olduğu için iyi bir kısaltmadır. elektronik aletler... Bilgisayarınız bir POST hatası nedeniyle başlamazsa, üreticinin web sitesinden hatanın anlamını ve nedenini bulmak için farklı bir cihaz kullanabilirsiniz. Ardından uygun eylemi gerçekleştirebilirsiniz - bellek modülünü çıkarın veya video kartını yeniden takın ve ardından ekipmanı yeniden başlatın.

ELDE ETMEK

POST aynı zamanda değişkenleri geçirme yöntemidir. HTML formları adres çubuğunda görüntülemeden bir web sayfasından diğerine. Alternatif bir yöntem, URL'ye değerler ekleyen GET'dir. HTTP POST istekleri, mesajın gövdesinde istemciden (tarayıcı) sunucuya ek veriler sağlar. Buna karşılık, GET istekleri, URL'deki tüm gerekli verileri içerir. HTML'deki formlar, öğede method = POST veya method = GET (varsayılan) belirterek herhangi bir yöntemi kullanabilir.

... Belirtilen yöntem, form verilerinin sunucuya nasıl gönderileceğini belirler. GET yöntemi kullanıldığında, tüm form verileri, sorgu dizesi parametreleri olarak kodlanmış URL'dir. POST ile form verileri HTTP istek mesajının gövdesinde görünür.

Form gönderimindeki farklılıklar

POST istek yöntemi, web sunucusundan istek mesajının gövdesinde yer alan verileri kabul etmesini ve saklamasını ister. Genellikle bir dosya yüklerken veya tamamlanmış bir web formu gönderirken kullanılır.

HTTP GET istek yöntemi, sunucudan bilgi alır. Bir GET isteğinin parçası olarak, arama terimlerini, tarih aralıklarını veya isteği tanımlayan diğer bilgileri belirterek URL'nin sorgu dizesinde bazı veriler iletilebilir.

Bir POST isteğinin parçası olarak, istek mesajının gövdesinde sunucuya herhangi bir türden rastgele miktarda veri gönderilebilir. Bir POST isteğindeki başlık alanı genellikle mesaj gövdesinin internet medya türünü belirtir.

GET ve POST istekleri arasındaki temel fark, HTTP spesifikasyonlarında tanımlandığı gibi farklı HTTP isteklerine karşılık gelmeleridir. Her iki yöntemi de gönderme işlemi aynı şekilde başlar: form veri kümesi tarayıcı tarafından oluşturulur ve ardından enctype özniteliği tarafından belirtilen şekilde kodlanır. METHOD = "POST için, enctype niteliği çok parçalı / form-data veya application / x-www-form-urlencoded olabilir, oysa METHOD =" GET " için yalnızca application / x-www-form-urlencoded ile tetiklenir. Bu form veriler ayarlanır ve ardından sunucuya iletilir.

METHOD = "GET" kullanarak bir form göndermek için tarayıcı, action niteliğinin değerini alarak ve buna application / x-www-form-urlencoding içerik türü kullanılarak kodlanmış form veri kümesini ekleyerek bir URL oluşturur). Tarayıcı daha sonra bu URL'yi bir bağlantıya atıfta bulunuyormuş gibi (veya kullanıcı URL'yi manuel olarak yazmış gibi) değerlendirir. Tarayıcı, URL'yi parçalara ayırır ve ana bilgisayarı tanır, ardından URL'nin geri kalanıyla birlikte bir argüman olarak bu ana bilgisayara bir GET isteği gönderir. Bu işlemin form verilerinin ASCII kodlarıyla sınırlı olduğu anlamına geldiğini belirtmek önemlidir. ASCII formatında bir URL aracılığıyla iletildiklerinde diğer karakter tiplerini kodlamak ve kodunu çözmek için özel dikkat gösterilmelidir.

METHOD = "POST" ile bir form gönderimi, action özniteliğinin değeri kullanılarak bir POST isteğinin gönderilmesine ve enctype özniteliği tarafından belirtilen içerik türüne göre oluşturulan mesaja neden olur.

PHP

PHP HTML'ye gömülüdür. Bu, PHP kodunun bir HTML sayfasına eklenebileceği anlamına gelir. PHP kodu, sayfayı barındıran sunucu tarafından okunur veya ayrıştırılır. PHP'deki GET ve POST işlevlerinin bir sayfadaki çıktısı genellikle tarayıcı tarafından okunabilen HTML olarak döndürülür. PHP kodu, sayfa yüklenmeden önce HTML'ye dönüştürüldüğünden, kullanıcılar sayfadaki PHP kodunu görüntüleyemez. Bu, PHP sayfalarını veritabanlarına ve diğer korunan bilgilere erişmek için yeterli kılar.

Çoğu PHP sözdizimi C, Java ve Perl gibi diğer dillerden ödünç alınmıştır. Bununla birlikte, PHP'nin bir dizi benzersiz özelliği ve özel özelliği vardır. Bu dilin amacı, web geliştiricilerinin dinamik olarak oluşturulmuş sayfaları hızlı ve kolay bir şekilde yazabilmelerini sağlamaktır.

Wordpress

WordPress ücretsiz sistem Web siteleri oluşturmak ve sürdürmek için kullanılan içerik yönetimi. Kullanım kolaylığı ve benzersiz blog özellikleri, onu internetteki en popüler blog aracı haline getirdi.

WordPress arayüzü, web geliştirme deneyimi olmayan herkesin bir web sitesi oluşturmasına ve yayınlamasına olanak tanır. Yerleşik blog oluşturma araçları, bireysel gönderileri, ziyaretçileri ve kullanıcı yorumlarını takip etmenin kolay bir yolunu sunar.

Binlerce mevcut olmasına rağmen WordPress şablonları ve eklentiler, WordPress'teki POST GET sisteminin hala sınırlamaları var. Bu şablon tabanlı bir hizmet olduğundan, kullanıcı sıfırdan sayfalar oluşturmak yerine önceden oluşturulmuş bir web sitesiyle başlamalıdır. Ayrıca, özel bir web sitesinin sunduğu kontrol düzeyiyle aynı düzeyde komut dosyaları yerleştirmenin veya bir veritabanını korumanın bir yolu yoktur.

POST_GET_ID () aracı, benzersiz bir tanımlayıcıya sahip olduğundan öğeyi kontrol etmek için komut dosyalarını kullanmanıza izin verir ve bu yöntemlerle bir form olarak gönderdiğinizde, açılır menü ile birlikte gönderilir. benzersiz tanımlayıcı bu, betiğin hangi yayının çalıştığını fark etmesini sağlar. Alternatif olarak, komut dosyasının hangi gönderinin görünüme ait olduğunu görmesine izin verecek gizli bir değişken gönderilebilir.

Bu gönderi, iki ana yöntem kullanılarak İnternette veri aktarma ilkelerini açıklamayı amaçlamaktadır: GET ve POST. Detaylarla pek ilgilenmeyenler için vardiyalı çalışma jeneratörü talimatına ek olarak yazdım ☺.

Aşağıdaki URL'ye gidin (bu görsel açıklama içindir): http://calendarin.net/calendar.php?year=2016 Not adres çubuğu tarayıcı: Calendarin.net/calendar.php yıl = 2016 Ana dosyanın adı, ardından bir soru işareti (?) ve "2016" değerinde bir "yıl" parametresi gelir. Yani, soru işaretinden sonraki tek şey bir GET isteğidir. Basit. Birden fazla, ancak birkaç parametre iletmek için, bunların bir ve işareti (&) ile ayrılması gerekir. Örnek: Calendarin.net/calendar.php ? yıl = 2016 ve gösterim = iş günleri ve izin günleri

Ana dosya hala adlandırılır, ardından bir soru işareti (?), Ardından - "2016" değerine sahip "yıl" parametresi, ardından - ve işareti (&), ardından - "iş" değerine sahip "ekran" parametresi -günler ve günler -kapalı ".

GET parametreleri doğrudan tarayıcının adres çubuğundan değiştirilebilir. Örneğin, "2016" değerini "2017" olarak değiştirip tuşuna basarak 2017 takvimine gideceksiniz.

Bu, verilerin gizli bir şekilde iletilmesidir (sayfa adresi değişmez); yani, yalnızca bir program (komut dosyası) yardımıyla neyin iletildiğini görebilirsiniz. Örneğin, bir metindeki karakterleri saymak için aşağıdaki araçta, kaynak veriler POST yöntemi kullanılarak iletilir: http://usefulonlinetools.com/free/character-counter.php

Herhangi bir sorunuz, yorumunuz ve e-postam varsa hizmetinizdeyiz.

Bir önceki gönderide tartıştığımız GET yöntemine ek olarak, HTTP protokolü aracılığıyla istek göndermenin başka bir yöntemi daha var - POST yöntemi. POST yöntemi de pratikte çok sık kullanılmaktadır.

Sunucuya GET yöntemini kullanarak erişmek için, isteği URL'ye yazmamız yeterliyse, POST yönteminde her şey farklı bir prensibe göre çalışır.

Bu tür bir isteği yerine getirebilmek için web sayfasında bulunan type = "submit" özniteliğine sahip butona tıklamamız gerekiyor. Bu düğmenin öğede bulunduğuna dikkat edin. gönderilecek yöntem özniteliği ile.

Bu HTML'yi düşünün:

Metni girin:


Kullanıcı, metin alanına herhangi bir metin girer ve "Gönder" düğmesini tıklarsa, kullanıcı tarafından girilen içeriğin değerini içeren metin değişkeni sunucuya gönderilir.

Basit terimlerle POST ve GET istekleri

Bu değişken POST yöntemiyle gönderilecek.

Formda şöyle yazarsanız:

Daha sonra veriler GET yöntemi kullanılarak gönderilecektir.

Bir GET talebi durumunda, aktarabileceğimiz veri miktarı tarayıcının adres çubuğunun uzunluğu ile sınırlıysa, POST talebi durumunda böyle bir sınırlama yoktur ve önemli miktarları aktarabiliriz. bilginin.

POST yöntemi ile GET yöntemi arasındaki diğer bir fark, POST yöntemi kendisine iletilen tüm değişkenleri ve bunların değerlerini gövdesinde (Entity-Body) gizler. GET yöntemi söz konusu olduğunda, bunlar istek dizesinde (Request-URI) depolandı.

İşte bir POST isteği örneği:

POST / HTTP / 1.0 \ r \ n
Ev sahibi: www.site.ru \ r \ n
Yönlendiren: http://www.site.ru/index.html\r\n
Çerez: gelir = 1 \ r \ n
İçerik Türü: application / x-www-form-urlencoded \ r \ n
İçerik Uzunluğu: 35 \ r \ n
\ r \ n
giriş = Dima ve şifre = 12345

Bu nedenle, POST yöntemini kullanarak veri ileterek, bir saldırganın onu ele geçirmesi çok daha zor olacaktır, çünkü görünümden gizlenirler, bu nedenle POST yöntemi daha güvenli kabul edilir.

Ek olarak, POST yöntemi yalnızca metni değil, aynı zamanda multimedya verilerini de (resim, ses, video) aktarabilir. Aktarılması gereken bilgi türünü belirleyen özel bir İçerik Türü parametresi vardır.

Son olarak, bu yöntemle iletilen verileri sunucuda almak için POST değişkeni kullanılır.

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

echo $ _POST ['metin'];
?>

Son gönderide, tarayıcının (istemci) ne gönderdiğine karar verdik. HTTP sunucusu istekleri ve sunucu, istemciye HTTP yanıtları gönderir. Bu istek ve yanıtlar belirli kurallara göre işlenir. Sözdizimi, nasıl ve hangi sırayla yazılması gerektiği gibi bir şey var. İyi tanımlanmış bir yapı olmalıdır.

HTTP protokolünde istek ve yanıt oluşturmak için kullanılan bu yapıya daha yakından bakalım.

Bir HTTP isteği, tam olarak aşağıda gösterilen sırada gelen üç ana bölümden oluşur. Başlıklar ile mesajın gövdesi arasında (ayırıcı olarak) boş bir satır vardır, bu bir satır besleme karakteridir.

Boş dize (ayırıcı)

Gönder ve Al istekleri, aralarındaki fark nedir ve hangisi daha iyi ve hangi amaçlar için?

mesaj gövdesi (Varlık Gövdesi) - isteğe bağlı parametre

sorgu dizesi- aktarım yöntemini, erişilecek URL'yi ve HTTP protokolünün sürümünü belirtir.

Başlıklar- mesajların gövdesini tanımlayın, çeşitli parametreleri ve diğer bilgi ve bilgileri iletin.

mesaj gövdesi- bu, istekte iletilen verilerin kendisidir. İleti gövdesi isteğe bağlı bir parametredir ve atlanabilir.

Sunucudan bir yanıt isteği aldığımızda, mesajın gövdesi çoğunlukla web sayfasının içeriğidir. Ancak, sunucuya istekte bulunurken, örneğin formda doldurduğumuz verileri aktarırken de bazen mevcut olabilir. geri bildirim sunucuya.

Daha ayrıntılı olarak, talebin her bir unsurunu aşağıdaki notlarda ele alacağız.

Örnek olarak gerçek bir sunucu isteğini ele alalım. İsteğin her bir bölümünü kendi rengiyle vurguladım: istek satırı yeşil, başlıklar turuncu, mesajın gövdesi mavi.

Tarayıcıdan istek:

Ev sahibi: webgyry.info

Çerez: wp-ayarları

Bağlantı: canlı tutmak

Aşağıdaki örnekte, mesajın gövdesi zaten mevcuttur.

Sunucu cevabı:

İçerik Türü: metin / html; karakter kümesi = UTF-8

Aktarım-Kodlama: yığınlanmış

Bağlantı: canlı tutmak

Canlı Tut: zaman aşımı = 5

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

isimsiz döküman

İstemci ve sunucu arasında HTTP protokolü üzerinden alınıp verilen mesajlardır.

Bu arada, Yandex Metrics ve Google Analytics'in "hedeflerini" kullanarak sitenizdeki bazı öğelerde herhangi bir anlam olup olmadığını bilmek ister misiniz?

Çalışmayanları alın, işe yarayanları ekleyin ve kârınızı ikiye katlayın.

Yandex Metrica hedeflerini belirleme kursu ..

Google Analytics hedeflerini belirleme üzerine bir kurs ..

HTTP istemcisi, sunucuya aşağıdaki biçime sahip bir istek mesajı biçiminde bir istek gönderir:

  • İstek dizisi (gerekli)
  • Başlık (isteğe bağlı öğe)
  • Boş dize (gerekli)
  • Mesaj gövdesi (isteğe bağlı)

Bu unsurların her birine ayrı ayrı bakalım.

sorgu dizesi

İstek dizesi, bir yöntem belirteci ile başlar, ardından istek URI'si ve protokol sürümü gelir. Öğeler birbirinden boşluklarla ayrılır:

Düşünmek verilen eleman Detaylarda

İstek yöntemi

Bu öğe, belirtilen URI'de sunucu tarafında çağrılacak yöntemi belirtir.

HTTP'de sekiz yöntem vardır:

  • KAFA
    URI ile sunucudan durum satırını ve başlığı almak için kullanılır. Verileri değiştirmez.
  • ELDE ETMEK
    Belirtilen URI'deki sunucudan veri almak için kullanılır. Verileri değiştirmez.
  • İLETİ
    HTML formlarını kullanarak sunucuya veri (geliştirici bilgileri vb.) göndermek için kullanılır.
  • KOYMAK
    Kaynaktaki tüm önceki verileri yeni yüklenen verilerle değiştirir.
  • SİLMEK
    URI tarafından belirtilen kaynaktaki tüm mevcut verileri kaldırır.
  • BAĞLAMAK
    Belirtilen URI'de sunucuya bir tünel bağlantısı kurar.
  • SEÇENEKLER
    Belirtilen kaynak için bağlantı özelliklerini açıklar.
  • İZ
    Belirtilen kaynak URI'sinin konumunun geriye dönük izini içeren bir ileti sağlar.

URI iste

URI (Uniform Resource Identifier), isteğin gönderildiği kaynağın tanımlayıcısıdır. En yaygın URI biçimi aşağıda gösterilmiştir:

‘*’ HTTP isteği belirli bir kaynağa değil, bir sunucuya özgü olduğunda kullanılır. Yalnızca yöntemin kaynağa uygulanması gerekmediğinde kullanılır. Örneğin,

mutlak üri bir proxy'ye bir HTTP isteği yapıldığında kullanılır. Proxy'den isteği mevcut önbellekten geçirmesi istenir ve bir yanıt döndürür. Örneğin:

asbolutny_path | bir kaynakçoğu chatso tarafından kullanılır.

GET ve POST istekleriyle çalışmayı öğrenme

Belirli bir sunucunun belirli bir kaynağı istenir. Örneğin, bir istemci sunucudan 80 numaralı bağlantı noktası üzerinden bir kaynak almak istiyor. Kaynak adresi “www.proselyte.net” olup aşağıdaki isteği gönderir:

Başlık alanları isteme

Başlık alanları, istemcinin iletişim kurmasını sağlar Ek bilgi istek hakkında ve kendisi hakkında sunucuya. Bu alanlar istek değiştiricileri olarak işlev görür.

Aşağıda kullanılabilecek en önemli başlık alanlarının bir listesi bulunmaktadır:

  • Kabul Et-Karakter Seti
  • Kabul-Kodlama
  • Kabul Et-Dil
  • yetki
  • Beklemek
  • If-Match
  • Eğer-Modified-Since
  • Eşleşme Yok ise
  • If-Aralığı
  • Eğer-Değiştirilmemiş-Since
  • Menzil
  • yönlendiren
  • Kullanıcı Aracısı

Kendi istemcimizi ve kendi web sunucumuzu uygulamak istiyorsak, kendi başlık alanlarımızı oluşturabiliriz.

Örnek HTTP isteği

Bu, çalışmayı sonuçlandırmaktadır. HTTP istekleri.
Bir sonraki makalede, HTTP yanıtlarına bakacağız.

Sunucuya bir HTTP isteği göndermenin yollarından biri bir GET isteğidir. Bu yöntem en yaygın olanıdır ve çoğu zaman sunucuya istekler bu yöntem kullanılarak yapılır.

Bir GET isteği oluşturmanın en kolay yolu, URL'yi tarayıcınızın adres çubuğuna yazmaktır.

Tarayıcı aşağıdaki bilgileri sunucuya iletecektir:

GET / 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 = 0.9, * / *; q = 0.8
Kabul Et-Dil: ru-RU, ru; q = 0,8, en-US; q = 0,5, en; q = 0,3
Kabul-Kodlama: gzip, deflate
Çerez: wp-ayarları
Bağlantı: canlı tutmak

Talep iki bölümden oluşur:

1. istek satırı

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

Lütfen GET isteğinin bir mesaj gövdesi olmadığını unutmayın. Ancak bu, onun yardımıyla sunucuya herhangi bir bilgi aktaramayacağımız anlamına gelmez.

GET ve POST yöntemleri arasındaki fark

Bu, özel GET parametreleri kullanılarak yapılabilir.

İsteğe GET parametreleri eklemek için URL'nin sonuna bir "?" İşareti koymanız gerekir. ve ondan sonra, onlara aşağıdaki kurala göre sormaya başlayın:

parametre_adı1 = parametre_değer1 & parametre_adı2 = parametre_değer2 & ...

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

Örneğin, sunucuya kullanıcı adı ve yaşı olmak üzere iki değer iletmek istiyorsak, bu aşağıdaki satır ile yapılabilir:

http://site.ru/page.php?name=dima&age=27

Bu sorgu yürütüldüğünde, veriler, sunucu tarafı web programlama dili kullanılarak sunucuda alınabileceği QUERY_STRING ortam değişkenine gider.

İşte bunun PHP'de nasıl yapılabileceğine bir örnek.

yankı "Adınız:". $ _GET ["ad"]. "
»;
echo "Yaşınız:". $ _GET ["yaş"]. "
»;
?>

$ _GET ["parameter_name"] yapısı, geçirilen parametrenin değerini görüntülemenize olanak tanır.

Bu kodu tarayıcıda çalıştırmanın bir sonucu olarak aşağıdakiler görüntülenecektir:

adınız: dima
Yaşınız: 27

GET yöntemini kullanarak sunucuya da istekte bulunuruz.

Bu gönderi, makalelerimden birine yapılan bir yorumda sorulan bir sorunun cevabıdır.

Bu yazımda sizlere GET / POST / PUT / DELETE ve diğer HTTP yöntemlerinin neler olduğunu, ne için icat edildiğini ve REST'e uygun olarak nasıl kullanılacağını anlatmak istiyorum.

HTTP

Peki internetin ana protokollerinden biri tam olarak nedir? Bilgiçleri RFC2616'ya göndereceğim ve gerisini insan gibi anlatacağım :)

Bu protokol, İstek ve Yanıt adı verilen mesajlara dayalı olarak iki bilgisayar (istemci ve sunucu) arasındaki iletişimi tanımlar. Her mesaj üç bölümden oluşur: başlangıç ​​satırı, başlıklar ve gövde. Bu durumda, sadece başlangıç ​​çizgisi gereklidir.

İstek ve yanıt için başlangıç ​​satırları farklı bir biçime sahiptir - yalnızca şuna benzeyen isteğin başlangıç ​​satırıyla ilgileniyoruz:

YÖNTEM URI HTTP / VERSİYON ,

YÖNTEM yalnızca HTTP istek yöntemi olduğunda, URI kaynak tanımlayıcıdır, VERSION protokol sürümüdür (tarafından şu an mevcut sürüm 1.1).

Başlıklar, iki nokta üst üste ile ayrılmış bir ad-değer çiftleri topluluğudur. Başlıklarda çeşitli hizmet bilgileri iletilir: mesaj kodlaması, tarayıcı adı ve sürümü, istemcinin geldiği adres (Yönlendiren) vb.

Mesajın gövdesi aslında iletilen verilerdir. Yanıtta, iletilen veriler, kural olarak, tarayıcının talep ettiği html sayfasıdır ve istekte, örneğin mesajın gövdesinde, sunucuya yüklenen dosyaların içeriği iletilir. Ancak bir kural olarak, mesajın gövdesi talebe hiç dahil edilmez.

Örnek HTTP iletişimi

Bir örneğe bakalım.

Sorgu:
GET /index.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ı: kapat
İlk satır istek satırıdır, geri kalanı başlıklardır; mesaj gövdesi eksik

Cevap:
HTTP / 1.0 200 Tamam Sunucu: nginx / 0.6.31 İçerik-Dil: ru İçerik-Türü: metin / html; charset = utf-8 İçerik-Uzunluk: 1234 Bağlantı: kapat ... HTML SAYFASININ KENDİSİ ...

Kaynaklar ve yöntemler

Başlangıç ​​sorgu dizesine geri dönelim ve URI gibi bir parametre içerdiğini hatırlayalım. Bu, Tekdüzen Kaynak Tanımlayıcısı anlamına gelir - tek tip bir kaynak tanımlayıcısı. Bir kaynak, kural olarak, sunucudaki bir dosyadır (bu durumda örnek URI, "/styles.css" dir), ancak genel olarak, bir kaynak soyut bir nesne olabilir ("/ blogs / webdev /" - belirtir "Web geliştirme" bloğu ve belirli bir dosya için değil).

HTTP istek türü (HTTP yöntemi de denir), sunucuya kaynakla hangi eylemi yapmak istediğimizi söyler. Başlangıçta (90'ların başında) müşterinin kaynaktan yalnızca bir şey isteyebileceği varsayıldı - onu almak için, ancak şimdi HTTP protokolünü kullanarak gönderiler oluşturabilir, profili düzenleyebilir, mesajları silebilir ve çok daha fazlasını yapabilirsiniz. Ve bu eylemleri “alma” terimiyle birleştirmek zordur.

Kaynaklarla eylemleri HTTP yöntemleri düzeyinde ayırt etmek için aşağıdaki seçenekler icat edildi:

  • GET - bir kaynak almak
  • POST - bir kaynak oluşturma
  • PUT - kaynak güncellemesi
  • DELETE - bir kaynağı silme
HTTP spesifikasyonunun, sunucuyu tüm yöntemleri (aslında 4'ten çok daha fazlası vardır) anlamaya zorlamadığına dikkat edin - yalnızca GET gereklidir ve ayrıca sunucuya, aldığında ne yapması gerektiğini söylemez. belirli bir yöntemle bir istek. Bu, sunucunun bir DELETE /index.php HTTP / 1.1 isteğine yanıt verdiği anlamına gelir. zorunda değil sunucudaki index.php sayfasını silin, tıpkı GET /index.php HTTP / 1.1 isteğinde olduğu gibi zorunda değil index.php sayfasını size iade edin, onu silebilir :)

REST devreye giriyor

REST (Representational State Transfer) - bu terim, 2000 yılında HTTP protokolünün geliştiricilerinden biri olan Roy Fielding tarafından web uygulamaları oluşturmak için bir grup ilkenin adı olarak ortaya çıktı. Genel olarak REST, HTTP'den daha geniş bir alanı kapsar - diğer protokollerle diğer ağlarda kullanılabilir. REST, "kaynak" ve "fiil" kavramlarına dayanan istemci-sunucu etkileşiminin ilkelerini açıklar (bunları özne ve yüklem olarak anlayabilirsiniz). HTTP durumunda, kaynak URI'si tarafından tanımlanır ve fiil HTTP yöntemidir.

REST, farklı kaynaklar için aynı URI'nin kullanılmasından vazgeçmeyi önerir (yani, /index.php?article_id=10 ve /index.php?article_id=20 gibi iki farklı makalenin adresleri bir REST yolu değildir) ve farklı eylem için farklı HTTP yöntemleri. Yani, REST yaklaşımı kullanılarak yazılmış bir web uygulaması, HTTP DELETE yöntemiyle erişildiğinde bir kaynağı silecektir (tabii bu, her şeyi ve her şeyi silebilmeniz gerektiği anlamına gelmez, ancak herhangi uygulamanın silme isteği, HTTP DELETE yöntemini kullanmalıdır).

REST, programcılara standartlaştırılmış ve her zamankinden biraz daha güzel web uygulamaları yazma yeteneği verir. REST kullanıldığında, yeni bir kullanıcı eklemek için URI /user.php?action=create (GET / POST yöntemi) değil, sadece /user.php (kesinlikle POST yöntemi) olacaktır.

Sonuç olarak, mevcut olanı birleştirmek HTTP belirtimi ve REST yaklaşımı nihayet çeşitli HTTP yöntemlerine mantıklı geliyor. GET - bir kaynak döndürür, POST - yeni bir tane oluşturur, PUT - mevcut olanı günceller, DELETE - siler.

Sorunlar?

Evet, pratikte REST uygulamakla ilgili küçük bir sorun var. Bu soruna HTML denir.

PUT / DELETE istekleri, sunucuyla "manuel" (örneğin, curl veya hatta telnet aracılığıyla) iletişim kurarak XMLHttpRequest aracılığıyla gönderilebilir, ancak tam bir PUT / DELETE isteği gönderen bir HTML formu oluşturamazsınız.

Mesele şu ki, HTML spesifikasyonu, GET veya POST dışında veri gönderen formlar oluşturmanıza izin vermiyor. Bu nedenle, diğer yöntemlerle normal çalışma için bunları yapay olarak taklit etmeniz gerekir. Örneğin, Rack'te (Ruby'nin web sunucusuyla etkileşime girdiği mekanizma; Rails, Merb ve diğer Ruby çerçeveleri Rack kullanılarak yapılır), bir forma "_method" adlı gizli bir alan ekleyebilir ve adını belirtebilirsiniz. değer olarak yöntem (örneğin, "PUT") - bu durumda, bir POST isteği gönderilir, ancak Rack, bir POST değil, bir PUT almış gibi davranabilir.

Ortak noktaları, aynı şekilde çalışmalarıdır. Aralarında teknik olarak bir fark yoktur. Ama ideolojik farklılıklar var.

Bunları PHP bağlamında ele alacağım. Lütfen bunu not al HTTP protokolü PHP ile dolaylı olarak ilişkilidir çünkü değişim için yaratılmıştır. html sayfaları PHP her ikisinin de yeteneklerini genişletir.

GET isteği veri almak ve POST göndermek için kullanılır. (Bir hatırlatma olarak, teknik olarak aynı şekilde çalışırlar).

Bu nedenle, bu ideolojiye dayalı olarak PHP bağlamında şunları yaptılar:
1. Süper küresel diziler ($ _GET, $ _POST) PHP'yi her başlattığınızda varsayılan olarak oluşturulur.
2. Sorgu dizesinde soru işareti (?) varsa. Ondan sonra önemli olan her şey parametreler GET isteği, "anahtar" = "değer" biçiminde sunulurlar ve ayırıcı olarak ve işareti (&) karakteri kullanılır
Örnek:
GET /index.php?name=Andrey&surname=Galkin
bu bir sorgu dizesidir, 2 parametre vardır. bu parametreler $ _GET dizisinde sona erecektir.
3. $ _POST başka bir şekilde doldurulur. bu dizinin içeriği "istek başlıklarından" doldurulur. Yani, açık bir biçimde görünmeyen bir yerden. Bu tür başlıkları oluşturma rutininin tamamı tarayıcı tarafından üstlenilir. Her ne kadar bazen başlıklarda manuel olarak bir şeyler düzenlense de.

Çoğu zaman, gönderi isteği formlarda kullanılır (veri göndermek için).

Örneğin, giriş formu 2 alan giriş ve şifremiz var.

GET yöntemini kullandığımızı düşünelim. Ardından, formu gönderirken /login.php?login=Andrey&password=123 adresine gideceğiz, bu tür bilgileri bu şekilde aktarmanın hiç güvenli olmadığını kabul ediyoruz. Herkes tarayıcınızı açabilir ve site adresini girmeye başlayabilir, geçmişten şifrelerinizi ve girişlerinizi görebilir.

Ancak POST yöntemini kullanarak belirtmişsek, aşağıdaki isteği alırız:
POST /login.php (login = Andrey & password = 123) nelerin parantez içinde gizleneceği ve tarayıcıya kaydedilmediği.

Genel olarak özetlemek gerekirse:
GET, belirli bir sayfayı belirli bir şekilde elde etmektir (sıralama, mevcut blog sayfası, arama dizesi vb.).
POST - sayfanın görüntülenmesini etkilemeyen verilerin gönderilmesi için, bu verilerin yalnızca komut dosyası yürütme sonucunu etkilemesi (oturum açma bilgileri, parolalar, kredi kartı numaraları, mesajlar vb.).

Ve bir iyi haber daha, örneğin birleştirilebilirler
POST /index.php?page=login (login = Andrey & password = 123) Sanırım bundan ne çıkacağını ve hangi diziye hangi parametrelerin dahil edileceğini yeterince açıkladım.