Metode permintaan HTTP yang ditentukan dalam protokol HTTP/1.1 adalah opsi, dapatkan, kepala, posting, put, hapus, lacak, hubungkan. Di antara mereka, POST umumnya digunakan untuk mengirimkan data ke server.
Kita tahu bahwa protokol HTTP ditransmisikan oleh kode ASCII, dan spesifikasi lapisan aplikasi berdasarkan protokol TCP/IP. Spesifikasi membagi permintaan HTTP menjadi tiga bagian: garis negara, permintaan kepala, dan subjek pesan. Mirip dengan yang berikut:
<empoD> <repkest-url> <visi> <teaders> <stity-body> </entitas-body> </headers> </version> </request-url> </hethod> </hethod> </method > </ethod>
Perjanjian tersebut menetapkan bahwa data yang diajukan oleh Post harus ditempatkan di entitas-tubuh, tetapi perjanjian tersebut tidak menentukan apa yang harus digunakan data. Faktanya, pengembang dapat menentukan format dari subjek pesan sendiri.
Namun, jika data dikirim, itu berarti untuk berhasil di server. Bahasa server umum seperti Java dan kerangka kerja mereka telah membangun fungsi -dalam analisis otomatis dari format data umum. Server biasanya dipelajari dari bidang tipe konten di kepala permintaan untuk mempelajari bagaimana subjek pesan dalam permintaan dikodekan dalam permintaan, dan kemudian menganalisis subjek. Jadi ketika datang untuk memposting skema data yang dikirimkan, ini berisi dua bagian: tipe konten dan pengkodean subjek pesan. Berikut adalah pengantar resmi untuk mereka.
Aplikasi/X-WWW-Form-UrlencodedIni harus menjadi cara paling umum untuk mengirimkan data. Jika formulir bentuk asli dari browser, jika atribut ENCTYPE tidak diatur, maka data akan diserahkan oleh Application/X-WWW-Form-Burlencoded. Permintaan ini mirip dengan yang berikut ini (header permintaan yang tidak relevan dihilangkan dalam artikel ini):
Posting http://www.example.com http/1.1content-type: Application/X-www-forlem-urlencoded; 5b%5d = 3
Pertama-tama, tipe konten ditentukan sebagai aplikasi/X-WWW-Form-Urlencoded; Sebagian besar bahasa server memiliki dukungan yang baik untuk metode ini. Misalnya, dalam PHP, posting [′ judul ′] bisa mendapatkan nilai judul.
Sering kali, ketika kami mengirimkan data dengan AJAX, kami juga menggunakan metode ini. Misalnya, Ajax JQuery, nilai default tipe konten adalah "Aplikasi/X-WWW-Form-Urlencoded; Charset = UTF-8".
Multipart/form-dataIni adalah cara umum lain untuk memposting data. Saat kami mengunggah file dengan formulir, kami harus membuat formulir enctyped sama dengan nilai ini. Datang langsung ke contoh permintaan:
Posting http://www.example.com http/1.1content-type: multipart/form-data; --- WebKitFormBoundaryRGKCBY7QHFD3TRWACONTENT-DISPOSISI: Formulir-data;
Contoh ini sedikit rumit. Pertama -tama, batas digunakan untuk membagi bidang yang berbeda. Kemudian tipe konten menunjukkan bahwa data dikodekan oleh mutipart/form-data, apa batas yang diminta kali ini. Subjek pesan dibagi menjadi bagian yang sama dengan struktur yang sama sesuai dengan jumlah bagian. ). Jika file dikirimkan, itu juga berisi nama file dan informasi jenis file. Subjek pesan akhirnya berakhir dengan--Boundary-. Untuk definisi terperinci dari Mutipart/Form-Data, silakan kunjungi RFC1867 untuk dilihat.
Metode ini umumnya digunakan untuk mengunggah file, dan bahasa server utama juga memiliki dukungan yang baik untuk itu.
Dua metode post data yang disebutkan di atas adalah dukungan asli untuk browser, dan bentuk bentuk asli hanya mendukung kedua metode ini pada tahap ini. Namun, karena semakin banyak situs Web, terutama WebApp, semuanya menggunakan AJAX untuk interaksi data, kami dapat sepenuhnya mendefinisikan metode pengiriman data baru untuk membawa kenyamanan lebih banyak untuk pengembangan.
Aplikasi/JSONapplication/json 这个Content-Type 作为响应头大家肯定不陌生。 Bahkan, semakin banyak orang sekarang menggunakannya sebagai kepala permintaan untuk memberi tahu pesan server bahwa badan utama adalah string JSON serial. Karena popularitas spesifikasi JSON, browser utama kecuali IE -version rendah adalah asli JSON.stringify, dan bahasa server juga memiliki fungsi untuk berurusan dengan JSON, dan JSON tidak akan mengalami masalah.
Format JSON mendukung data terstruktur yang lebih rumit daripada nilai -nilai kunci, yang juga berguna. Saya ingat ketika saya melakukan proyek beberapa tahun yang lalu, tingkat data yang harus saya kirimkan sangat dalam. Namun, pada saat itu, saya menggunakan string JSON sebagai nilai, dan saya masih dimasukkan ke dalam pasangan nilai kunci, dan mengirimkannya di X-WWW-Form-Burlencoded.
Fungsi AJAX di AngularJs dari Google adalah mengirimkan string JSON secara default. Misalnya, kode berikut:
var data = {'title':'test', 'sub' : [1,2,3]};$http.post(url, data).success(function(result) {...});Permintaan terakhir adalah:
Posting http://www.example.com http/1.1content-type: Application/json;
Skema ini dapat dengan mudah mengirimkan data terstruktur yang kompleks, terutama cocok untuk antarmuka yang tenang. Alat pengemasan utama seperti alat pengembang Chrome sendiri, Firebug, dan Fiddler akan menampilkan data JSON dengan struktur pohon, yang sangat ramah. Namun, ada juga beberapa bahasa server -sisi yang belum mendukung metode ini. Pada saat ini, Anda perlu menanganinya sendiri: Ketika tipe konten adalah aplikasi/json di header permintaan, dapatkan aliran input asli dari php: // input, dan kemudian json_decode. Beberapa kerangka kerja Java sudah mulai dilakukan.
Tentu saja, AngularJS juga dapat dikonfigurasi untuk mengirimkan data dengan X-WWW-Form-Urlencoded.
Teks/XMLXML-RPC (Panggilan Prosedur Jarak Jauh XML). Ini adalah spesifikasi panggilan jarak jauh menggunakan HTTP sebagai protokol transmisi dan XML sebagai metode pengkodean. Permintaan XML-RPC yang khas adalah ini: Posting http://www.example.com http/1.1content-type: Text/xml <!-? /Methodname> <params> <param> <value> <i4> 41 </i4> </value> </params> </methodcall>
Protokol XML-RPC sederhana dan penuh fungsi, dan implementasi berbagai bahasa tersedia. Ini juga banyak digunakan, seperti XML-RPC API dari WordPress, layanan ping dari mesin pencari, dan sebagainya. Dalam JavaScript, ada juga perpustakaan siap pakai untuk mendukung interaksi data dengan cara ini, yang dapat mendukung layanan XML-RPC yang ada. Namun, saya pribadi berpikir bahwa struktur XML masih terlalu kembung.