Menü
ücretsiz
Kayıt
Ev  /  Kurulum ve kurulum/ Sunucuya alma isteği nedir? HTTP İstekleri Oluşturma

Sunucuya alma isteği nedir? HTTP İstekleri Oluşturma

Evet, herkes bir noktada bir şeyler öğrenmiştir. Bu konuda insanları ayıran tek şey, kimilerine öğretilerin kolayca verilmesi, kimilerinin ise aylarca konunun özünü anlayamamasıdır. Bugün HTML\PHP'de POST ve GET istekleri hakkında konuşacağız.

POST ve GET isteklerinin kendileri (bundan sonra istekler olarak anılacaktır) uzun süredir tüm İnternet kaynaklarında kök salmıştır. Bir gün aniden bu teknolojilere bir alternatif ortaya çıkarsa, o zaman muhtemelen yakında olmayacak ve muhtemelen gerekli olmayacak. Çünkü isteklerimiz internet sayfaları arasında veri alışverişi görevini tam anlamıyla yerine getirmektedir.

Önce bir GET isteğine bakalım. Standart ile bir index.php dosyası oluşturalım HTML Kodu, ayrıca üzerine bir form yerleştirin, ürün sipariş formu olsun.

Buradaki etikete bir göz atalım. biçim. İki parametresi vardır aksiyon Ve yöntem. Birincisi, verilerimizi aktaracağımız sayfanın adresi, ikincisi ise bu verilerin hangi yöntemle aktarılacağı ile ilgilidir. Bu etiketin içinde, aktarmak istediğimiz veri setini açıklıyoruz. İsimler verilere atanmalıdır (parametre isim). Ayrıca gerekli giriş tipidir göndermek, tıklandığında veri gönderen düğmedir.

Dosyamızı kaydedelim ve bir tarayıcıda açalım.
Sayfamızın tarayıcıdaki yolu ".../index.php" şeklindedir. Sayfanın kendisinde iki giriş alanı ve bir düğme görüyoruz. Alanlarımıza bir şeyler doldurup "Sipariş Ver" butonuna tıklayalım. Sayfamız güncellenmiştir. Adresine bakalım: ".../index.php?orderName=Test&count=12". (İlk alana 'Test' kelimesini ikinci '12'ye yazdım). Gördüğümüz gibi, sayfa adresi biraz değişti. Gerçek şu ki, GET parametrelerinin bir istek tarafından iletilmesi, sayfa adres dizesine atanarak gerçekleştirilir. Parametreler ana adresten '?' karakteri ile, farklı parametreler ise '&' karakteri ile ayrılır. Parametre yapısı aşağıdaki gibidir: parametre_adı=değer. Parametrenin adı, giriş alanındaki name özniteliğinin değeriyle eşleşecektir.
Sayfa kodunu biraz düzenleyelim:

> >

Şimdi tekrar "Sipariş" düğmesine tıklayın. Gördüğümüz gibi sayfa güncellendi ancak alanlarımız dolu kaldı. Bunun nedeni, alanlarımız için varsayılan bir değer vermiş olmamızdır. Üstelik bu değerler alınan GET parametresidir. PHP kodunda da görebileceğimiz gibi, GET parametreleri, parametre adına eşit bir dizi indeksine sahip bir dizidir. Şimdi site adresiyle oynayıp içindeki parametre değerlerini değiştirip "Enter" düğmesine basarsak, sayfayı güncelleyip formumuzu doldururken yine bir resim göreceğiz.

Açıkçası, bir GET isteğinde sır veya hizmet verileri göndermek yanlıştır (ve güvenli değildir). Örneğin veri tabanından alınması gereken haberin id'sini veya görüntülenmesi gereken sayfanın adını aktarmak için kullanmak daha iyidir.

POST isteği başka bir konudur. Benzer şekilde çalışır, ancak parametreleri adres çubuğunda saklamaz. Şeklimizi değiştirelim:

$_POST["siparişAdı"]?> > $_POST["sayım"]?> >

Ancak gördüğünüz gibi değişen pek bir şey yok! Sayfamızı açalım, alanlara bir şeyler doldurup "Sipariş Ver" butonuna basalım. Her şey aynı şekilde çalıştı, ancak (ancak), sorgu dizesinde gördüğümüz gibi, “…/index.php” adresi herhangi bir parametre olmadan gösteriş yapıyor. Böylece, verilerimizi meraklı gözlerden bir nevi "sakladık". Tabii ki, kavram gizliydi, oldukça şartlıydı, çünkü bu veriler hala ele geçirilebilir, ancak bu başka bir hikaye. Adresimize ".../index.php?orderName=Trololo&count=100" parametrelerini ekleyelim ve "Enter" tuşuna basalım. Gördüğümüz gibi sayfa yüklendi, ancak parametrelerin geçmesine rağmen alanların boş olduğu ortaya çıktı. Bu, büyük benzerliğe rağmen, bu tür isteklerin birbirleriyle hiçbir şekilde kesişmediğini ve ihtiyaç varsa, her istek türü için ayrı ayrı bir işleyici yazmanın uygun olduğunu düşündürür.

Bence bu yeterli. Sorunun temelleri bence bir kafa ile açıklanıyor.

Ve biraz daha… Geçilen parametreleri kontrol etmeyi unutmayın. Parametrenin bir sayı olması gerektiğinden eminseniz, sayısal olmayan bir değer iletmeye yönelik tüm girişimleri kesin, vb.

HTTP ve HTTPS'deki GET ve POST yöntemleri, bir istemciden sunucuya veri aktarmak için kullanılan en popüler iki yöntemdir. HTTP protokolü(Üstmetin transfer protokolü). 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 görüşmesinde popüler bir sorudur. HTML, Java, ASP veya PHP gibi web sunucusu teknolojisine bağlı olmadığından 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, bir veya diğer isteğin ne zaman kullanılacağına ve aralarındaki farkın ne olduğuna bakacağız. Her kavramı ayrı ayrı inceleyelim.

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. Biçimlendirme dili, etiketlerin bir sayfanın düzenini ve sayfadaki öğeleri tanımlamak için kullanılma biçimini ifade eder.
Aşağıda HTML örneği, bir başlık ve bir metin paragrafı içeren temel bir web sayfasını tanımlamak için kullanılır:



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

<Тело>

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

İlk satır, belgede bulunan içeriğin türünü belirtir., Ve , bunların tümü yukarıdaki örnekte yer almaktadır. Sayfa başlığı, meta veriler ve bağlantı içeren dosyalara bağlantılar, sayfanın asıl içeriğinin arasına, etiketlerin arasına yerleştirilir .

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 gelse de, 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 her öğeyi 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 bir web tarayıcısına gönderilen HTML kodunu oluşturur.

HTTP Köprü Metni Aktarım Protokolü, istemciler ve sunucular arasındaki iletişim için tasarlanmıştır ve bir istek-yanıt protokolü olarak ç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 verir ve ayrıca istenen içeriği de içerebilir.

İki istek yöntemi GET ve POST

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

    GET - belirtilen kaynaktan veri ister;

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

GET ve POST'un çevirisi, kelimenin tam anlamıyla alma ve son işleme anlamına gelir.

HTTP hakkında daha fazla bilgi edinin

HTTP, İnternet üzerinden veri aktarmak için kullanılan protokoldür. İnternet Protokolü paketinin bir parçasıdır ve web sayfası verilerini 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 bir web barındırıcısıdır. yazılım Apache veya IIS gibi 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ı verilirse, sunucu web sayfasını ve ilişkili dosyaları tarayıcıya gönderir.

Yaygın HTTP durum kodları şunları içerir:

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

    301 - Kalıcı olarak taşınır (genellikle yeni bir URL'ye yönlendirir)

    401 - yetkisiz istek (yetki gerekli);

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

HTTP'de POST ve GET

HTTP tanımlar GET komutları ve web sitelerinde form gönderimlerini işlemek için kullanılan POST. 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 bir ağ üzerinden erişilir. HTTPS bağlantısı ve genellikle 443 numaralı bağlantı noktasını kullanır.

POSTALAMAK

POST bir dizidir sistem kontrolleri bilgisayarlar ve diğer elektronik cihazlar tarafından açıldıklarında gerçekleştirilir. Test sonuçları ekranda görüntülenebilir, yanıp sönen LED'ler aracılığıyla çıktı alınabilir veya basitçe dahili olarak kaydedilebilir. İÇİNDE 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 edecektir.

Mac ve Windows aygıt işletim sistemleri, bilgisayar her önyüklendiğinde veya yeniden başlatıldığında POST'u çalıştırır. Kontrolleri tara 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örde bir mesaj görüntülenebilir.Bir PC'de, POST hataları genellikle BIOS bilgi ekranında görüntülenir. "08" gibi şifreli kodlar veya "Sistem belleği hatası ofset" gibi bir sistem mesajı olarak çıkarılabilirler. Mac'te, POST hataları genellikle hiçbir önyükleme aygıtının bulunmadığını gösteren bozuk bir klasör simgesi gibi basit grafiklerle gösterilir.

fiziksel belirtiler

Bazı durumlarda, POST hatalarından önce bilgisayar ekranı açılmayabilir. Böyle bir durumda, 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 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ıyla karşılaştıklarında da bip sesi çıkarır.

POST, yalnızca tarafından kullanılan oldukça teknik bir terimdir. bilgisayar teknisyenleri düzenli bir şekilde. Ancak, bilgisayarlarda veya diğer cihazlarda görünebilecek hata mesajlarını daha iyi anlamaya yardımcı olduğu için iyi bir kısaltmadır. elektronik aletler. Bilgisayar bir POST hatası nedeniyle başlamazsa, üreticinin web sitesinden hatanın anlamını ve nedenini aramak için başka bir cihaz kullanabilirsiniz. Ardından, bellek modülünü çıkarmak veya grafik kartını yeniden takmak ve ardından donanımı yeniden başlatmak gibi uygun eylemi gerçekleştirebilirsiniz.

ELDE ETMEK

POST aynı zamanda bir değişken geçiş yöntemidir HTML formları bunları görüntülemeden bir web sayfasından diğerine adres çubuğu. Alternatif bir yöntem, URL'ye değer ekleyen GET'tir. HTTP POST istekleri, istemciden (tarayıcı) ileti gövdesindeki sunucuya ek veriler sağlar. Bunun aksine, GET istekleri URL'deki tüm gerekli verileri içerir. HTML'deki formlar, öğede method=POST veya method=GET (varsayılan) belirtilerek 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 URL kodludur. POST ile form verileri, HTTP isteğinin mesaj gövdesinde görünür.

Form sunumundaki farklılıklar

POST istek yöntemi, web sunucusundan istek mesajının gövdesindeki 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 sorgu dizesinde bazı veriler iletilebilir.

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

GET ve POST istekleri arasındaki temel fark, HTTP belirtimlerinde tanımlandığı gibi farklı HTTP isteklerine karşılık gelmeleridir. Her iki yöntem için gönderim süreci 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. YÖNTEM = için POST özelliği enctype multipart/form-data veya application/x-www-form-urlencoded olabilirken, METHOD=" GET " için yalnızca application/x-www-form-urlencoded aracılığıyla tetiklenir. Bu ayarlanan form verileri daha sonra sunucuya iletilir.

METHOD = "GET" ile bir form göndermek için tarayıcı, action özniteliğinin değerini alarak ve buna application/x-www-form-urlencoded içerik türü kullanılarak kodlanmış bir dizi form verisi 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 girmiş gibi) ele alır. Tarayıcı, URL'yi parçalara ayırır ve ana bilgisayarı tanır, ardından URL'nin geri kalanını bir bağımsız değişken olarak kullanarak 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 not etmek önemlidir. Diğer karakter türlerini bir ASCII URL'sine geçirirken kodlamak ve kodunu çözmek için özel dikkat gösterilmelidir.

METHOD="POST" ile yapılan 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 bir gönderiye 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. Bir sayfadaki PHP'nin GET ve POST işlevlerinin çıktısı genellikle tarayıcı tarafından okunabilen HTML kodu olarak döndürülür. Sayfa yüklenmeden önce PHP kodu HTML'ye dönüştürüldüğünden, kullanıcılar PHP kodunu sayfada göremezler. öyle PHP sayfaları veritabanlarına ve diğer korunan bilgilere erişmek için yeterlidir.

PHP'nin sözdiziminin çoğu, 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 özellikleri vardır. Bu dilin amacı, web geliştiricilerinin dinamik olarak oluşturulmuş sayfaları hızlı ve kolay bir şekilde yazmasını 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 oluşturma özellikleri, web'deki en popüler blog oluşturma aracı olmasına yardımcı oldu.

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ı izlemenin kolay bir yolunu sunar.

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

POST_GET_ID() aracı, benzersiz bir kimliğe sahip olduğundan öğeyi işlemek için komut dosyaları kullanmanıza izin verir ve bu yöntemlerle bir form olarak gönderildiğinde, açılır liste aşağıdakilerle birlikte gönderilir benzersiz tanımlayıcı, komut dosyasının hangi yayının çalıştığını fark etmesini sağlar. Alternatif olarak, betiğin hangi gönderinin görünüme ait olduğunu görmesini sağlayacak gizli bir değişken gönderilebilir.

Bu gönderi, makalelerimden birinde sorulan bir sorunun cevabıdır.

Bu yazımda sizlere GET/POST/PUT/DELETE ve diğer HTTP metodlarının ne 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 nedir? Bilgiçleri RFC2616'ya göndereceğim, gerisini insani bir şekilde anlatacağım :)

Bu protokol, istek (İstek) ve yanıt (Yanıt) adı verilen mesajlar temelinde oluşturulan iki bilgisayar (istemci ve sunucu) arasındaki etkileş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 sahip - biz yalnızca isteğin şuna benzeyen başlangıç ​​satırıyla ilgileniyoruz:

YÖNTEM URI'sı http/ VERSİYON ,

METHOD'un yalnızca HTTP istek yöntemi olduğu yerde, URI kaynak tanımlayıcısıdır, VERSION protokol sürümüdür (içinde şu an geçerli sürüm 1.1).

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

Mesajın gövdesi aslında iletilen veridir. Cevapta, 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 kural olarak, istekte hiçbir mesaj gövdesi yoktur.

HTTP etkileşimi örneği

Bir örnek düşünün.

Rica etmek:
GET /index.php HTTP/1.1 Sunucu: example.com Kullanıcı Aracısı: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5 Kabul et: text/html Bağlantı: kapat
İlk satır sorgu dizesidir, geri kalanlar 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ü: text/html; charset=utf-8 İçerik-Uzunluk: 1234 Bağlantı: kapat ... HTML SAYFASI KENDİSİ...

Kaynaklar ve Yöntemler

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

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

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

  • GET - bir kaynak almak
  • POST - kaynak oluşturma
  • PUT - kaynak güncellemesi
  • DELETE - bir kaynağı silme
HTTP spesifikasyonunun, sunucuyu tüm yöntemleri (aslında 4'ten çok daha fazla olan) anlamaya zorlamadığına dikkat edin - yalnızca GET gereklidir ve ayrıca sunucuya bir istek alırken ne yapması gerektiğini belirtmez. belirli bir yöntem. Bu, sunucunun DELETE /index.php HTTP/1.1 isteğine yanıt olarak mecbur değil GET /index.php HTTP/1.1 isteğinde olduğu gibi sunucudaki index.php sayfasını silin mecbur değil size index.php sayfasını iade edin, silebilir mesela :)

REST devreye giriyor

REST (Temsili Durum Aktarımı) - 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 tanıtıldı. Genel olarak REST, HTTP'den daha geniş bir alanı kapsar - diğer ağlarda başka protokollerle kullanılabilir. REST, "kaynak" ve "fiil" kavramlarına dayalı olarak istemci ile sunucu arasındaki etkileşim ilkelerini açıklar (bunları bir özne ve yüklem olarak anlayabilirsiniz). HTTP durumunda, kaynak URI'si tarafından tanımlanır ve fiil, HTTP yöntemidir.

REST, farklı kaynaklar (yani, /index.php?article_id=10 ve /index.php?article_id=20 gibi iki farklı makalenin adresleri - bu bir REST yolu değildir) için aynı URI'yi kullanmayı bırakmayı ve farklı kaynaklar kullanmayı önerir. Farklı eylemler için 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 ki bu, her şeyi ve herkesi silme fırsatı verilmesi gerektiği anlamına gelmez, ancak herhangi uygulamanın silme isteği DELETE HTTP yöntemini kullanmalıdır).

REST, programcılara her zamankinden daha standart ve 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, yalnızca /user.php (kesinlikle POST yöntemi) olacaktır.

Son olarak, mevcut olanı birleştirerek HTTP belirtimi ve REST yaklaşımı, çeşitli HTTP yöntemleri sonunda anlamlıdır. GET - bir kaynak döndürür, POST - yeni bir tane oluşturur, PUT - mevcut olanı günceller, DELETE - siler.

Sorunlar mı?

Evet pratikte REST uygulamasında ufak bir sorun var. Bu soruna HTML denir.

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

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

için ilk yöntem php yürütme POST isteği file_get_contents kullanmaktır. İkinci yöntem, fread'i birkaç başka işlevle birlikte kullanacaktır. Her iki seçenek de gerekli istek başlığı alanlarını doldurmak için stream_context_create işlevini kullanır.

Kod açıklaması

$sPD değişkeni gönderilecek verileri içerir. HTTP istek dizesi biçiminde olmalıdır, bu nedenle bazıları Özel semboller kodlanmalıdır.

Hem file_get_contents işlevinde hem de fread işlevinde iki yeni parametremiz var. İlki use_include_path . Bir HTTP isteği yaptığımız için her iki örnekte de yanlış olacaktır. Yerel bir kaynağı okumak için true kullanıldığında, işlev include_path konumunda bir dosya arar.

İkinci parametre olan context , $aHTTP dizisinin değerini alan stream_context_create dönüş değeriyle doldurulur.

POST istekleri yapmak için file_get_contents kullanma

PHP'de file_get_contents kullanarak bir POST isteği göndermek için, başlık alanlarını manuel olarak doldurmak için stream_context_create kullanmanız ve hangi "sarmalayıcının" kullanılacağını belirtmeniz gerekir - bu durumda HTTP:

$sURL = "http://brugbart.com/Örnekler/http-post.php"; // POST URL $sPD = "ad=Jacob&bench=150"; // POST verisi $aHTTP = array("http" => // Kullanılacak sarmalayıcı array("method" => "POST", // İstek yöntemi // İstek başlıkları "header" => "Content- yazın: application/x-www-form-urlencoded", "content" => $sPD)); $bağlam = stream_context_create($aHTTP); $contents = file_get_contents($sURL, yanlış, $bağlam); yankı $içerik;

POST istekleri yapmak için fread kullanma

POST istekleri yapmak için fread işlevini kullanabilirsiniz. Aşağıdaki örnek, gerekli HTTP istek başlıklarını oluşturmak için stream_context_create kullanır:

$sURL = "http://brugbart.com/Örnekler/http-post.php"; // POST URL $sPD = "ad=Jacob&bench=150"; // POST verisi $aHTTP = array("http" => // Kullanılacak sarmalayıcı array("method" => "POST", // İstek Yöntemi // İstek başlıkları "header" => "Content- yazın: application/x-www-form-urlencoded", "content" => $sPD)); $bağlam = stream_context_create($aHTTP); $handle = fopen($sURL, "r", false, $bağlam); $içerik = ""; while (!feof($handle)) ( $contents .= fread($handle, 8192); ) fclose($handle); yankı $içerik;

PHP ile GET istekleri yapmak

Şimdi HTTP ve HTTPS yoluyla internetten içerik indirmek için fread ve file_get_contents kullanımına odaklanacağız. Bu makalede açıklanan yöntemleri kullanmak için sarmalayıcıları aç seçeneğinin etkinleştirilmesi gerekir. Bunu yapmak için php.ini dosyasında allow_url_fopen parametresini On olarak ayarlamanız gerekir.

PHP POST ve GET istekleri, web sitelerinde oturum açmak, web sayfası içeriğini almak veya uygulamaların yeni sürümlerini kontrol etmek için kullanılır. Basit HTTP isteklerinin nasıl yapıldığını ele alacağız.

İnternet üzerinden dosya indirmek veya almak için fread kullanma

Bir web sayfasını okumanın, paketin erişilebilir kısmıyla sınırlı olduğunu unutmayın. Bu yüzden stream_get_contents işlevini kullanmanız gerekir ( benzer file_get_contents) veya döngü sırasında dosyanın sonuna ulaşılana kadar içeriği daha küçük parçalar halinde okumak için:

Bu durumda, bir PHP POST isteği işlenirken, fread işlevinin son argümanı parçanın boyutuna eşittir. Genellikle 8192'den büyük olmamalıdır ( 8*1024 ).

HTTP, TCP/IP yığınının protokollerinden biri olan Köprü Metni Aktarım Protokolüdür. Protokol başlangıçta göndermek ve almak için tasarlanmıştır. HTML sayfaları, ancak şimdi dağıtılmış için mükemmel bir şekilde kullanılıyor bilgi sistemi. World Wide Web'de en çok kullanılan protokollerden biridir.

Resim 1

İstek/yanıt şemasına göre. Bir istemci bir sunucuya istek gönderdiğinde bunu 3 tür istekle yapabilir: GET, PUT ve POST.

HTTP isteğini AL

ELDE ETMEK bilgi için bir müşteri talebidir. İstemcinin web tarayıcısı, sayfaları almak için bir GET mesajı gönderir. Talebin iki kısmı vardır:

  • sorgu dizesi
  • manşetler

Bir GET isteğinin bir veri gövdesi yoktur, ancak bu, sunucuya herhangi bir veri gönderemeyeceği anlamına gelmez. URL dizisindeki özel parametreleri kullanarak sunucuya veri gönderebilirsiniz. İmza ? URL'deki etki alanından sonra, parametrelerin daha fazla iletileceği anlamına gelir. Şekil 2, tarayıcının sunucuya tam olarak hangi bilgileri gönderdiğini gösterir.

Çizim - 2

POST ve PUT HTTP isteği

Bu iki yöntem, web sunucusuna bilgi göndermek için uygulanmaktadır. Örneğin özel web formları kullanarak bunları doldurup POST yöntemini kullanarak sunucuya gönderiyoruz. PUT ise kaynakları veya verileri bir web sunucusuna (resim, video) yükler.

HTTP güvenli bir protokol değildir ve şifreli olmadığı için POST mesajları yakalanabilir ve okunabilir. POST yöntemini kullanarak veri aktarımının güvenliği için HTTPS protokolü kullanılır. Verileri şifreler ve kimlik doğrulaması yapabilir. Ayrıca, taşıma ve uygulama katmanları arasında bilgi aktarımı için ek gereksinimler uygular.

POST ve GET yöntemleri arasındaki temel farklar Tablo 1'de gösterilmiştir.

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