HTTP mendefinisikan berbagai cara untuk berinteraksi dengan server, dan ada 4 metode dasar, yaitu GET, POST, PUT, dan DELETE. Nama lengkap URL adalah deskriptor sumber daya, kita dapat menganggapnya sebagai ini: alamat URL, digunakan untuk menggambarkan sumber daya di jaringan, dan GET, POST, PUT, DELETE dalam HTTP sesuai dengan empat operasi memeriksa, memodifikasi, menambahkan, dan menghapus sumber daya ini. Pada titik ini, Anda harus memiliki pemahaman umum, GET umumnya digunakan untuk mendapatkan/mengkueri informasi sumber daya, sedangkan POST umumnya digunakan untuk memperbarui informasi sumber daya.
1. Menurut spesifikasi HTTP, GET digunakan untuk pengambilan informasi dan harus aman dan idempoten.
(1). Yang disebut keamanan berarti bahwa operasi digunakan untuk mendapatkan informasi daripada memodifikasinya. Dengan kata lain, permintaan GET umumnya tidak boleh memiliki efek samping. Artinya, ia hanya memperoleh informasi sumber daya, seperti kueri database, dan tidak akan memodifikasi, menambahkan data, atau memengaruhi status sumber daya.
* Catatan: Arti keamanan di sini hanya mengacu pada informasi yang tidak dimodifikasi.
(2). idempotent berarti bahwa beberapa permintaan ke URL yang sama harus mengembalikan hasil yang sama.
Namun, dalam aplikasi praktis, kedua peraturan di atas tidak begitu ketat. Contoh mengutip artikel orang lain: Misalnya, halaman depan situs berita terus diperbarui. Meskipun permintaan kedua mengembalikan kumpulan berita yang berbeda, operasi tersebut masih dianggap aman dan idempoten karena selalu mengembalikan berita terkini. Pada dasarnya, jika tujuannya adalah ketika pengguna membuka tautan, dia dapat yakin bahwa sumber daya tersebut tidak diubah dari sudut pandangnya.
2. Menurut spesifikasi HTTP, POST mewakili permintaan yang dapat memodifikasi sumber daya di server. Melanjutkan mengutip contoh di atas: Berita diam Ambil situs web sebagai contoh, pembaca harus memposting komentar mereka sendiri pada berita, karena sumber daya situs berbeda setelah komentar dikirimkan, atau sumber daya dimodifikasi.
Di atas secara kasar membahas beberapa prinsip GET dan POST dalam spesifikasi HTTP. Namun, banyak orang tidak mengikuti spesifikasi HTTP saat benar-benar melakukannya, yang dapat menyebabkan banyak alasan untuk masalah ini, seperti:
1. Banyak orang menggunakan GET untuk memperbarui sumber daya karena mereka perlu pergi ke FORM untuk menggunakan POST, yang akan sedikit merepotkan.
2. Operasi penambahan, penghapusan, modifikasi, dan pengecekan sumber daya sebenarnya dapat diselesaikan melalui GET/POST, tanpa perlu menggunakan PUT dan DELETE.
3. Lainnya adalah bahwa perancang kerangka kerja Web MVC awal tidak secara sadar memperlakukan dan merancang URL sebagai sumber daya abstrak, jadi masalah serius adalah bahwa kerangka kerja Web MVC tradisional pada dasarnya hanya mendukung dua metode HTTP, GET dan POST, tetapi tidak mendukung metode PUT dan DELETE.
* Penjelasan singkat tentang MVC: MVC awalnya ada di program Desktop, M mengacu pada model data, V mengacu pada antarmuka pengguna, dan C mengacu pada pengontrol. Tujuan penggunaan MVC adalah untuk memisahkan kode implementasi M dan V, sehingga program yang sama dapat menggunakan representasi yang berbeda.
3 poin di atas biasanya menggambarkan gaya lama (tanpa kepatuhan ketat terhadap spesifikasi HTTP), dengan pengembangan arsitektur, sekarang ada REST (Representational State Transfer), gaya baru yang mendukung spesifikasi HTTP.
Setelah berbicara tentang masalah prinsip, mari kita lihat perbedaan antara GET dan POST dari fenomena permukaan:
1. Data permintaan GET akan dilampirkan ke URL (yaitu, data ditempatkan di header protokol HTTP), dan ? Pisahkan URL dan kirimkan data, dan parameternya dihubungkan oleh &, misalnya: login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD. Jika datanya adalah huruf/angka bahasa Inggris, kirimkan apa adanya, jika itu adalah spasi, ubah menjadi +, jika itu adalah karakter Cina/lainnya, maka langsung enkripsi string dengan BASE64 untuk mendapatkan sampel seperti: %E4%BD%A0%E5%A5%BD, di mana XX dalam %XX adalah ASCII yang diwakili oleh simbol dalam heksadesimal.
POST menempatkan data yang dikirimkan di badan paket paket HTTP.
2. "Data maksimum yang diajukan dengan metode GET hanya dapat 1024 byte, secara teoritis tidak ada batasan untuk POST, dan sejumlah besar data dapat ditransfer, hingga 80KB di IIS4 dan 100KB di IIS5"??!
Kalimat di atas dialihkan dari artikel lain, pada kenyataannya, salah dan tidak akurat untuk mengatakan ini:
(1). Pertama-tama, "data yang dikirimkan dengan metode GET hanya bisa paling banyak 1024 byte", karena GET mengirimkan data melalui URL, sehingga jumlah data yang dapat dikirimkan oleh GET berhubungan langsung dengan panjang URL. Faktanya, tidak ada batas parameter atas untuk URL, dan spesifikasi protokol HTTP tidak membatasi panjang URL. Batas ini adalah batasan yang diberlakukan oleh browser dan server tertentu. Batas panjang URL IE adalah 2083 byte (2K+35). Untuk browser lain seperti Netscape, FireFox, dll., Tidak ada batas panjang teoretis, dan batasnya tergantung pada dukungan sistem operasi.
Perhatikan bahwa ini membatasi seluruh panjang URL, bukan hanya panjang data nilai parameter Anda. [Lihat Ref. 5]
(2). Secara teoritis, POST tidak memiliki batas ukuran, dan spesifikasi protokol HTTP tidak memiliki batas ukuran, dan tidak akurat untuk mengatakan bahwa "ada batas ukuran 80K/100K untuk data POST", dan tidak ada batasan untuk data POST, dan itu adalah kekuatan pemrosesan penangan server yang memainkan peran pembatas.
Untuk program ASP, objek Permintaan memiliki batas panjang data 100 ribu saat memproses setiap bidang formulir. Tetapi dengan Request.BinaryRead tidak ada batasan seperti itu.
Diperpanjang dari ini, untuk IIS 6.0, Microsoft telah meningkatkan pembatasan untuk alasan keamanan. Kita juga perlu memperhatikan:
1). IIS 6.0 default ke maksimum 200 KB data ASP POST, dan batasnya adalah 100 KB per bidang formulir. 2). Ukuran default file unggahan IIS 6.0 adalah 4MB. 3). IIS 6.0 default ke header permintaan maksimum 16KB. Batasan ini tidak tersedia sebelum IIS 6.0. [Lihat Ref. 5]
Jadi 80K dan 100K di atas mungkin hanya nilai default (catatan: Saya belum mengkonfirmasi parameter IIS4 dan IIS5), tetapi Anda pasti dapat mengaturnya sendiri. Karena nilai default untuk parameter ini berbeda di setiap versi IIS, silakan merujuk ke dokumen konfigurasi IIS yang relevan untuk detailnya.
3. Di ASP, server menggunakan Request.QueryString untuk mendapatkan parameter permintaan GET dan Request.Form untuk mendapatkan parameter permintaan POST. Di JSP, gunakan request.getParameter(\"XXXX\") untuk mendapatkannya, meskipun ada juga metode request.getQueryString() di jsp, tetapi lebih merepotkan untuk digunakan, misalnya: kirim test.jsp?name=hyddd&password=hyddd, dan gunakan request.getQueryString() untuk mendapatkan :name= hyddd&password=hyddd。 Dalam PHP, Anda dapat menggunakan $_GET dan $_POST untuk mendapatkan data dari GET dan POST masing-masing, sedangkan $_REQUEST bisa mendapatkan data dari permintaan GET dan POST. Perlu dicatat bahwa ada bahaya tersembunyi dalam menggunakan permintaan di JSP dan $_REQUEST di PHP, yang akan dirangkum dalam artikel lain kali.
4.POST lebih aman daripada GET. Catatan: Keamanan yang disebutkan di sini bukanlah konsep yang sama dengan "keamanan" yang disebutkan dalam GET di atas. Misalnya, jika Anda mengirimkan data melalui GET, nama pengguna dan kata sandi Anda akan muncul dalam teks biasa pada URL, karena (1) halaman login mungkin di-cache oleh browser, (2) orang lain akan melihat riwayat browser, sehingga orang lain dapat mendapatkan akun dan kata sandi Anda serangan pemalsuan.
Singkatnya, Get adalah permintaan untuk meminta data dari server, sedangkan Post adalah permintaan untuk mengirimkan data ke server, dalam FORM, Metode default ke "GET", pada dasarnya, GET dan POST hanyalah mekanisme pengiriman yang berbeda, tidak ada yang mengambil dan mengirimkannya!
|