Harap perhatikan bahwa pertanyaan telah diubah / diklarifikasi sejak jawaban ini pertama kali ditulis. Respons lebih lanjut untuk iterasi terbaru dari pertanyaan adalah setelah aturan horizontal kedua
Apa perlunya metode seperti GET dan POST dalam protokol HTTP?
Mereka, bersama dengan beberapa hal lain seperti format header, aturan untuk bagaimana header dan badan dipisahkan, membentuk dasar dari protokol HTTP
Bisakah kita tidak mengimplementasikan protokol HTTP hanya dengan menggunakan tubuh permintaan dan badan tanggapan?
Tidak, karena apa pun yang Anda buat tidak akan menjadi protokol HTTP
Sebagai contoh, URL akan berisi permintaan, yang akan dipetakan ke suatu fungsi tergantung pada bahasa pemrograman di sisi server mengatakan Servlet dan sebagai tanggapan HTML dan tanggapan JavaScript akan dikirim.
Selamat, Anda baru saja menemukan protokol baru! Sekarang, jika Anda ingin mengatur badan standar untuk mengemudi dan memeliharanya, mengembangkannya dll, itu bisa melampaui HTTP suatu hari
Saya menghargai ini sedikit sulit, tetapi tidak ada yang ajaib tentang internet, TCP / IP atau komunikasi yang terjadi antara server dan klien. Anda membuka koneksi dan mengirim beberapa kata ke bawah kabel, membentuk percakapan. Pembicaraan benar-benar harus mematuhi beberapa spesifikasi yang telah diratifikasi di kedua ujungnya jika permintaan harus dipahami dan respons yang masuk akal disampaikan. Ini tidak berbeda dengan dialog apa pun di dunia. Anda berbicara bahasa Inggris, tetangga Anda berbicara bahasa Mandarin. Semoga tangan Anda melambaikan tangan, menunjuk dan mengguncang tangan akan cukup untuk menyampaikan pesan Anda bahwa Anda tidak ingin dia memarkir mobilnya di depan rumah Anda.
Kembali ke internet, jika Anda membuka soket ke server web yang sesuai dengan HTTP dan kirim yang berikut ini:
EHLO
AUTH LOGIN
(Awal transmisi email SMTP) maka Anda tidak akan mendapatkan jawaban yang masuk akal. Anda dapat membuat klien yang sesuai dengan SMTP yang paling sempurna, tetapi server web Anda tidak akan berbicara dengannya karena percakapan ini adalah tentang protokol bersama - tidak ada protokol bersama, tidak ada sukacita.
Inilah sebabnya mengapa Anda tidak dapat mengimplementasikan protokol HTTP tanpa mengimplementasikan protokol HTTP; jika apa yang Anda tulis tidak sesuai dengan protokol, maka itu bukan protokol - itu adalah sesuatu yang lain, dan itu tidak akan berfungsi sebagaimana ditentukan dalam protokol
Jika kami menjalankan dengan contoh Anda sejenak; di mana klien menghubungkan dan hanya menyatakan sesuatu yang terlihat seperti URL .. Dan server memahaminya dan hanya mengirim sesuatu yang terlihat seperti HTML / JS (halaman web) maka yakin, itu bisa bekerja. Apa yang Anda simpan? Beberapa byte untuk tidak mengatakan GET? Sedikit lebih banyak tentang membuang header sial itu .. Server juga menyelamatkan beberapa - tetapi bagaimana jika Anda tidak dapat mengetahui apa yang mengirimi Anda? Bagaimana jika Anda meminta URL yang berakhir dengan JPEG, dan mengirimkan Anda beberapa byte yang membuat gambar, tetapi itu dalam PNG? PNG tidak lengkap pada saat itu. Kalau saja kita memiliki header yang mengatakan berapa banyak byte yang terjadiuntuk mengirim, maka kita akan tahu apakah jumlah byte yang kami terima sebenarnya seluruh file atau tidak. Bagaimana jika server gzip respons untuk menghemat bandwidth tetapi tidak memberi tahu Anda? Anda akan menghabiskan daya komputasi yang cukup besar untuk mencoba apa yang dikirim.
Pada akhirnya, kita perlu metainformation - informasi tentang informasi; kita membutuhkan tajuk; kita membutuhkan file untuk memiliki nama, ekstensi, tanggal yang dibuat. Kami membutuhkan orang-orang untuk berulang tahun, untuk mengatakan tolong dan terima kasih, dll - dunia penuh dengan protokol dan sedikit info tentang konteksnya sehingga kami tidak perlu duduk dan menyelesaikan semuanya dari awal sepanjang waktu. Biayanya sedikit ruang penyimpanan, tetapi mudah sepadan
Apakah menerapkan berbagai metode HTTP benar-benar diperlukan?
Dapat diperdebatkan, seseorang tidak harus mengimplementasikan seluruh protokol yang ditentukan, dan ini biasanya berlaku untuk apa pun. Saya tidak tahu setiap kata dalam bahasa Inggris; tetangga China saya juga seorang pengembang perangkat lunak tetapi dalam industri yang berbeda dan dia bahkan tidak tahu bahasa Mandarin untuk beberapa istilah yang digunakan dalam industri saya apalagi bahasa Inggris. Hal yang baik adalah, kita berdua dapat mengambil dokumen tentang implementasi HTTP, dia dapat menulis server dan saya dapat menulis klien, dalam berbagai bahasa pemrograman pada arsitektur yang berbeda, dan mereka masih bekerja karena mereka mematuhi protokol
Mungkin ada kasus bahwa tidak ada pengguna Anda yang akan mengeluarkan apa pun selain permintaan GET, tidak akan menggunakan koneksi persisten, mengirim apa pun selain JSON sebagai badan, atau perlu menerima apa pun selain teks / teks sehingga Anda dapat menulis server web yang benar-benar dikupas yang hanya memenuhi permintaan browser klien yang sangat terbatas. Tetapi Anda tidak bisa begitu saja memutuskan untuk menghapus aturan dasar yang membuat "beberapa teks mengirimkan soket" apa itu HTTP; Anda tidak dapat membuang gagasan dasar bahwa permintaan akan berupa string seperti:
VERB URL VERSION
header: value
maybe_body
Dan responsnya akan memiliki versi, dan kode status dan mungkin tajuk. Jika Anda mengubah semua itu - ini bukan HTTP lagi - ini sesuatu yang lain, dan hanya akan bekerja dengan sesuatu yang dirancang untuk memahaminya. HTTP sesuai definisi ini, jadi jika Anda ingin mengimplementasikannya, Anda harus mengikuti definisi tersebut
Memperbarui
Pertanyaan Anda telah sedikit berkembang, inilah beberapa respons terhadap apa yang Anda tanyakan:
Mengapa protokol HTTP memiliki gagasan tentang metode?
Secara historis Anda perlu menghargai bahwa banyak hal yang lebih tidak fleksibel dalam desain dan implementasinya, bahkan sejauh skrip tidak ada dan bahkan gagasan bahwa halaman dapat dinamis, dihasilkan dengan cepat dalam memori dan menekan soket sebagai gantinya menjadi file statis pada disk yang diminta oleh klien dan membaca dan menekan soket, tidak ada. Dengan demikian, web awal yang berpusat di sekitar gagasan tentang halaman statis yang berisi tautan ke halaman lain, semua halaman yang ada pada disk dan navigasi akan dilakukan oleh terminal yang sebagian besar membuat permintaan GET untuk halaman pada URL, server akan dapat memetakan url ke file di disk dan kirimkan. Ada juga anggapan bahwa jaringan dokumen yang terhubung satu sama lain dan ke tempat lain harus berkembang,
Itu memberikan beberapa konteks historis untuk metode-pada suatu waktu URL adalah bit tidak fleksibel, dan secara sederhana merujuk ke halaman pada disk sehingga metode ini berguna karena memungkinkan klien untuk menggambarkan niat apa yang dimiliki untuk file dan server akan memproses metode dengan berbagai cara. Sebenarnya tidak ada gagasan tentang url yang virtual atau digunakan untuk beralih atau memetakan dalam visi asli hiperteks (dan itu hanya teks) web
Saya tidak bermaksud jawaban ini menjadi dokumentasi dari catatan sejarah dengan tanggal dan referensi yang dikutip tentang kapan hal-hal mulai berubah - untuk itu Anda mungkin dapat membaca Wikipedia - tetapi cukup untuk mengatakan bahwa seiring waktu keinginan untuk web untuk lebih mengumpulkan momentum dan di setiap ujung koneksi server-klien peluang untuk menciptakan pengalaman multimedia yang kaya yang kami kembangkan. Browser mendukung proliferasi tag yang sangat besar untuk memformat konten, masing-masing berlomba untuk mengimplementasikan fitur kekayaan media yang harus dimiliki dan cara-cara baru untuk membuat sesuatu terlihat keren.
Scripting tiba di ujung klien dan plugins dan ekstensi browser, semua ditujukan untuk membuat browser menjadi pembangkit tenaga segalanya. Di server, generasi aktif konten berdasarkan algoritma atau data basis data adalah dorongan besar dan terus berkembang sejauh mungkin ada beberapa file pada disk - tentu saja, kami menyimpan file gambar atau skrip sebagai file di server web dan memiliki peramban MENDAPATKANnya, tetapi semakin banyak gambar yang ditampilkan peramban dan skrip yang dijalankan bukan file yang dapat Anda buka di penjelajah file Anda, mereka menghasilkan konten yang merupakan output dari beberapa proses kompilasi yang dilakukan sesuai permintaan , SVG yang menjelaskan cara menggambar piksel daripada array bitmap piksel, atau JavaScript yang dipancarkan dari bentuk skrip tingkat tinggi seperti TypeScript
Dalam membuat halaman multi megabyte modern mungkin hanya sebagian kecil dari itu sekarang konten tetap pada disk; data basis data diformat dan dibentuk menjadi html yang akan dikonsumsi oleh browser dan dilakukan oleh server sebagai respons terhadap beberapa rutin pemrograman yang berbeda yang dirujuk dalam beberapa cara oleh url
Saya menyebutkan dalam komentar untuk pertanyaan bahwa itu agak seperti lingkaran penuh. Kembali ketika komputer berharga ratusan ribu dan ruang yang penuh, itu biasa untuk memungkinkan banyak pengguna menggunakan satu mainframe pusat yang sangat kuat melalui ratusan terminal bodoh - papan kunci dan mouse, layar hijau, kirim beberapa teks, dapatkan beberapa teks keluar. Seiring waktu dengan meningkatnya daya komputasi dan harga turun, orang mulai berakhir dengan komputer meja lebih kuat dari mainframe awal dan kemampuan untuk menjalankan aplikasi yang kuat secara lokal sehingga model mainframe menjadi usang. Itu tidak pernah hilang, karena hal-hal baru saja berevolusi untuk bergeser ke arah lain dan agak kembali ke server pusat yang menyediakan sebagian besar fungsi aplikasi yang berguna dan seratus komputer klien yang melakukan sangat sedikit kecuali menggambar di layar, dan mengirim dan menerima data ke / dari server. Masa sementara di mana komputer Anda cukup pintar untuk menjalankan salinan kata dan pandangannya sendiri pada saat yang sama telah memberikan jalan kembali ke kantor online, di mana browser Anda adalah perangkat untuk menggambar gambar di layar dan mengedit dokumen / email yang Anda inginkan. sedang menulis sebagai sesuatu yang hidup di server, disimpan di sana, dikirim dan dibagikan dengan pengguna lain semua sebagai anggapan bahwa browser hanyalah sebuah shell yang memberikan tampilan sebagian pada satu waktu hal ini yang hidup di tempat lain
Dari jawaban, saya mengerti mengapa konsep metode ada .. Ini mengarah ke pertanyaan terkait lainnya:
Misalnya dalam tautan penulisan gmail, permintaan dan data PUT / POST akan dikirim. Bagaimana browser mengetahui metode mana yang digunakan?
Ini menggunakan GET secara default, dengan konvensi / spec karena itulah yang diputuskan akan terjadi ketika Anda mengetikkan url dan tekan kembali
Apakah halaman gmail yang dikirim oleh server menyertakan nama metode yang digunakan ketika memanggil gmail membuat permintaan?
Ini adalah salah satu hal penting yang saya singgung dalam komentar di atas. Di web modern ini bahkan bukan tentang halaman lagi. Setelah halaman adalah file di disk, browser akan DAPATKAN. Kemudian mereka menjadi halaman yang sebagian besar dihasilkan secara dinamis dengan memasukkan data ke dalam templat. Tapi itu masih melibatkan proses "permintaan halaman baru dari server, dapatkan halaman, tunjukkan halaman". Tukar halaman menjadi sangat licin; Anda tidak melihat mereka memuat dan mengubah ukuran dan menyentak tata letak mereka sehingga terlihat lebih halus tapi itu masih browser yang mengganti satu seluruh halaman atau bagian dari halaman dengan yang lain
Cara modern dalam melakukan sesuatu adalah dengan aplikasi satu halaman; browser memiliki dokumen dalam memori yang ditampilkan dengan cara tertentu, scripting panggilan ke server dan mendapatkan beberapa nugget info kembali, dan memanipulasi dokumen sehingga bagian halaman berubah secara visual untuk menampilkan info baru - semuanya berjalan tanpa browser pernah memuat halaman baru lainnya; itu hanya menjadi UI di mana sebagian pembaruan seperti aplikasi klien seperti kata atau pandangan. Elemen-elemen baru muncul di atas elemen-elemen lain dan dapat diseret di sekitar simulasi jendela dialog dll. Semua ini adalah mesin skrip browser mengirim permintaan menggunakan metode http apa pun yang diinginkan pengembang, mendapatkan data kembali dan menyodok pada dokumen yang dibuat oleh browser. Anda dapat membayangkan bahwa peramban modern adalah perangkat yang brilian yang mirip dengan keseluruhan sistem operasi atau komputer virtual; perangkat yang dapat diprogram yang memiliki cara yang cukup standar untuk menggambar sesuatu di layar, memutar suara, menangkap input pengguna dan mengirimkannya untuk diproses. Yang harus Anda lakukan untuk membuatnya menggambar UI Anda adalah menyediakannya dengan beberapa html / css yang membuat UI kemudian tweak html terus-menerus untuk membuat browser mengubah apa yang menggambar. Heck, orang-orang begitu terbiasa melihat bilah alamat berubah / menggunakannya sebagai arah niat sehingga aplikasi halaman tunggal akan mengubah url secara terprogram meskipun tidak ada navigasi (meminta seluruh halaman baru) sedang dilakukan Yang harus Anda lakukan untuk membuatnya menggambar UI Anda adalah menyediakannya dengan beberapa html / css yang membuat UI kemudian tweak html terus-menerus untuk membuat browser mengubah apa yang menggambar. Heck, orang-orang begitu terbiasa melihat bilah alamat berubah / menggunakannya sebagai arah niat sehingga aplikasi halaman tunggal akan mengubah url secara terprogram meskipun tidak ada navigasi (meminta seluruh halaman baru) sedang dilakukan Yang harus Anda lakukan untuk membuatnya menggambar UI Anda adalah menyediakannya dengan beberapa html / css yang membuat UI kemudian tweak html terus-menerus untuk membuat browser mengubah apa yang menggambar. Heck, orang-orang begitu terbiasa melihat bilah alamat berubah / menggunakannya sebagai arah niat sehingga aplikasi halaman tunggal akan mengubah url secara terprogram meskipun tidak ada navigasi (meminta seluruh halaman baru) sedang dilakukan
ketika kita memanggil www.gmail.com, itu harus menggunakan metode GET, bagaimana browser tahu bahwa metode ini digunakan?
Benar. Karena itu ditentukan. Permintaan pertama adalah karena secara historis selalu ada- DAPATKAN html awal untuk menggambar UI, lalu tusuk dan manipulasi selamanya, atau dapatkan halaman lain dengan skrip lain yang menyodok dan memanipulasi dan membuat UI reaktif yang responsif
Seperti yang beberapa jawaban katakan, kita dapat membuat pengguna baru pada metode DELETE, maka hal ini menimbulkan pertanyaan tentang maksud metode di dalam protokol http, karena pada akhirnya, itu benar-benar tergantung pada server fungsi apa yang mereka inginkan untuk memetakan URL ke . Mengapa klien harus memberi tahu server metode apa yang digunakan untuk URL.
Sejarah. Warisan. Kami secara teoritis dapat membuang semua metode http besok - kami berada pada tingkat kecanggihan pemrograman di mana metode usang karena URL dapat diproses sejauh mereka dapat menjadi mekanisme switching yang menunjukkan ke server bahwa Anda ingin menyimpan data di badan sebagai konsep email, atau menghapus konsep - tidak ada file / email / draft / save / 1234 di server - server diprogram untuk memilih url terpisah dan tahu apa yang harus dilakukan dengan data tubuh- simpan sebagai konsep email di bawah id 1234
Jadi tentu saja mungkin untuk menghilangkan metode, kecuali untuk beratnya kompatibilitas warisan yang tumbuh di sekitar mereka. Lebih baik menggunakannya hanya untuk apa yang Anda butuhkan tetapi sebagian besar mengabaikannya dan alih-alih menggunakan apa pun yang Anda butuhkan agar pekerjaan Anda berhasil. Kami masih memerlukan metode yang sudah ditentukan karena Anda harus ingat bahwa itu berarti sesuatu bagi browser dan server yang kami gunakan untuk membuat aplikasi. Skrip sisi klien ingin menggunakan browser yang mendasarinya untuk mengirim data, perlu menggunakan metode yang akan membuat browser melakukan apa yang diminta - mungkin POST karena MENDAPATKAN semua info variabel ke dalam url dan yang memiliki batas panjang di banyak server. Klien menginginkan respons panjang dari server - jangan gunakan HEAD karena mereka tidak seharusnya memiliki badan respons sama sekali.