1. Dapatkan digunakan untuk mendapatkan data dari server, sementara POST digunakan untuk meneruskan data ke server.
2. Dapatkan menambahkan data dalam formulir ke URL yang ditunjukkan oleh tindakan dalam bentuk variabel = nilai, dan menggunakan a? koneksi antara keduanya, sedangkan koneksi & antara setiap variabel; POST adalah untuk menempatkan data dalam bentuk dalam badan data, dan meneruskannya ke URL yang ditunjukkan oleh tindakan dengan cara variabel dan nilai sesuai dengan nilai.
3. Dapatkan tidak aman karena selama proses transmisi, data ditempatkan di URL yang diminta. Saat ini, banyak server yang ada, server proxy atau agen pengguna akan merekam URL yang diminta ke dalam file log dan kemudian menempatkannya di suatu tempat, sehingga beberapa informasi privasi dapat dilihat oleh pihak ketiga. Selain itu, pengguna juga dapat secara langsung melihat data yang dikirimkan pada browser, dan beberapa pesan sistem internal akan ditampilkan di depan pengguna. Semua operasi pos tidak terlihat oleh pengguna.
4. Jumlah data yang dikirimkan oleh GET kecil, yang terutama disebabkan oleh batasan panjang URL; Dan POST dapat mentransfer sejumlah besar data, sehingga Anda hanya dapat menggunakan posting saat mengunggah file (tentu saja ada alasan lain, yang akan disebutkan nanti).
5. Dapatkan membatasi nilai kumpulan data formulir untuk menjadi karakter ASCII; Sementara POST mendukung seluruh set karakter ISO10646. Secara default, pengkodean ISO-8859-1
6. Dapatkan metode formulir default.
Perbandingan berikut sangat, sangat berguna:
Saya telah mengerjakan pengembangan web Java untuk sementara waktu, dan ada masalah yang selalu mengganggu saya, yang merupakan masalah kacau. Pada dasarnya, saya mencari solusi online (benar -benar ada banyak informasi online), dan mereka semua memperkenalkan cara menyelesaikan masalah yang kacau seperti itu, tetapi beberapa dari mereka menjelaskan seluruh cerita tentang masalah dengan jelas. Kadang -kadang setelah membaca beberapa artikel, saya pikir saya memahaminya, tetapi dalam pengembangan, masalah kacau muncul seperti hantu dan benar -benar masalah besar! Artikel ini adalah akumulasi dari beberapa pemahaman tentang perjuangan jangka panjang saya dengan kode-kode kacau, dan saya berharap lebih banyak teman akan memberi saya beberapa saran dan suplemen.
Ada 2 metode untuk formulir untuk mengirimkan data ke server, mari kita bicara tentang GET dan POST masing -masing.
(I) Dapatkan kiriman
1. Pertama, mari kita bicara tentang cara menyandikan data dan mengirimkannya ke server menggunakan metode GET.
Untuk metode GET, data digabungkan setelah URL yang diminta sebagai parameter, seperti: http: // localhost: 8080/servlet? Msg = abc
; Proses URL Encode adalah untuk menyandikan bagian dari URL sebagai karakter dan menyandikannya ke dalam kode byte biner sesuai dengan metode pengkodean tertentu (seperti: UTF-8, GBK, dll.), Dan kemudian setiap byte diwakili oleh string %XY yang berisi 3 karakter, di mana XY adalah representasi heksadesimal dua-bit dari byte. Apa yang saya katakan di sini mungkin tidak jelas. Untuk detailnya, silakan lihat pengenalan kelas java.net.urlencoder di sini. Setelah memahami proses URL Encode, kita dapat melihat dua pertanyaan yang sangat penting. Pertama: Karakter yang membutuhkan URL Encode umumnya adalah karakter non-ASSAS (secara umum). Secara sederhana, kecuali untuk huruf bahasa Inggris (seperti Cina, Jepang, dll.) Semuanya harus melakukan URL Encode. Oleh karena itu, bagi kami, URL Encode tidak akan kacau ketika server mendapat kode yang kacau. Kode kacau disebabkan oleh URL yang berisi karakter Cina atau khusus dalam URL; Kedua: dalam metode pengkodean mana URL mengkode karakter? Ini adalah bisnis browser, dan browser yang berbeda memiliki praktik yang berbeda. Versi browser Cina umumnya menggunakan GBK secara default. UTF-8 juga dapat digunakan dengan mengatur browser. Pengguna yang berbeda mungkin memiliki pengaturan browser yang berbeda, yang mengarah pada metode pengkodean yang berbeda. Oleh karena itu, banyak situs web melakukan URL Encode terlebih dahulu dengan menggunakan JavaScript untuk karakter Cina atau khusus dalam URL, dan kemudian menyambungkan URL untuk mengirimkan data, yaitu, membuat URL encode untuk browser. Keuntungannya adalah bahwa situs web dapat menyatukan metode pengkodean untuk mengirimkan data. Setelah menyelesaikan URL Encode, URL saat ini menjadi karakter dalam rentang ASCII, dan kemudian mengubahnya menjadi biner dalam metode pengkodean ISO-8859-1 dan dikirim bersama dengan header permintaan. Saya ingin mengatakan sedikit lebih banyak di sini bahwa untuk metode GET, tidak ada entitas permintaan, dan URL yang berisi data ada di header permintaan. Alasan mengapa saya menggunakan URL Encode adalah: Untuk header permintaan, data murni dari header permintaan harus dikodekan ke dalam biner 101010 ... Pada akhirnya, data murni dari header permintaan harus ditransmisikan di internet. Jika Anda secara langsung mengkode karakter khusus seperti Cina dan karakter lain ISO-8859-1, informasi akan hilang, jadi perlu melakukan URL Encode terlebih dahulu.
2. Bagaimana sisi server (Tomcat) mendapatkan data untuk decoding.
Langkah pertama adalah memecahkan kode data dengan ISO-8859-1. Untuk metode GET, Tomcat memperoleh karakter header data dalam rentang ASCII, dan URL permintaan berisi data parameter. Jika ada karakter khusus seperti Cina dalam parameter, maka itu masih status %XY setelah URL encode. Berhenti dulu, mari kita bicara tentang proses umum mendapatkan data oleh pengembang. Biasanya setiap orang mendapatkan data parameter. Objek permintaan atau data yang kami dapatkan didekodekan, tetapi program tidak dapat menentukannya selama proses decoding. Di sini kita harus mengatakan bahwa banyak pemula mengatakan bahwa menggunakan permintaan. Melihat API resmi Servlet, ada penjelasan untuk metode ini: mengesampingkan nama pengkodean karakter yang digunakan dalam tubuh permintaan ini. Metode ini harus dipanggil sebelum membaca parameter permintaan atau input membaca menggunakan getReader (). Dapat dilihat bahwa dia tidak berdaya untuk melakukan apa pun tentang metode GET. Jadi metode pengkodean apa yang digunakan untuk mendekode data? Ini adalah bisnis Tomcat. Default default adalah ISO-8859-1, jadi kami dapat menemukan mengapa permintaan GET memiliki parameter Cina dan mengapa kode yang kacau diperoleh di sisi server. Alasannya adalah bahwa UTF-8 atau GBK biasanya digunakan untuk menyandikan data URL data. Di sini, decoder URL jelas tidak mungkin. Dalam program ini, kami dapat secara langsung
Kode Java
1. String baru (request.getParameter (name) .getbytes (ISO-8859-1), metode encoding encode URL yang ditentukan oleh klien)
Kembalikan kembali ke bytecode dan hapus kode data dengan cara yang benar. Artikel online biasanya membuat konfigurasi di tomcat
Kode XML
1. <Connector Port = 8080 Protocol = http/1.1 MaxThreads = 150 ConnectionTimeout = 20000 Redirectport = 8443 Uriencoding = GBK/>
Ini memungkinkan Tomcat untuk menggunakan metode yang ditentukan untuk mengambil data. Pengenalan URL Decoder ada di sini
(I) Posting pengiriman
1. Cara menyandikan data dan mengirimkannya ke server menggunakan metode pos klien (browser).
Data yang akan ditransmisikan dalam metode POST juga perlu URL Encode, jadi metode penyandian apa yang digunakannya?
Jika ada segmen <meta http-equiv = konten-tipe konten = teks/html; Charset = set karakter (GBK, UTF-8, dll.) Dalam file HTML di mana formulir berada, maka pos akan dikodekan dalam metode pengkodean yang ditentukan di sini. Secara umum, semua orang berpikir bahwa kode ini adalah untuk membiarkan browser tahu karakter apa yang ditetapkan untuk menafsirkan halaman web, sehingga situs web akan menempatkannya di ujung depan kode HTML dan mencoba untuk tidak tampil kode kacau. Bahkan, ia juga memiliki fungsi lain untuk menentukan metode encoding URL encode dari metode pos formulir formulir untuk mengirimkan data . Dari sini kita dapat melihat bahwa untuk menghitung metode GET, metode encoding URL encode browser ditentukan oleh pengaturan browser (dapat ditentukan dalam JS untuk spesifikasi terpadu), dan metode pos dapat ditentukan oleh pengembang.
2. Bagaimana sisi server (Tomcat) mendapatkan data untuk decoding.
Jika Anda menggunakan pengaturan default Tomcat dan tidak ada pengaturan pengkodean seperti filter yang dibuat, maka itu juga didekodekan dengan ISO-8859-1, tetapi permintaan.setcharacterencoding (set karakter) dapat berguna.
Saya menemukan bahwa premis dari apa yang Tomcat lakukan di atas adalah bahwa tidak ada metode pengkodean yang ditentukan dalam header permintaan. Jika metode pengkodean yang ditentukan dalam header permintaan, itu akan dikodekan dengan cara ini.Ada 2 artikel yang disarankan, dan alamatnya
Pengkodean URL yang mendalam dan mudah dipahami: http://www.cnblogs.com/yencain/articles/1321386.html;
Masalah kode sampah saat mengirimkan data menggunakan metode pos: http://wanghuan8086.javaeye.com/blog/173869
Penting untuk menggunakan posting. Jika ada segmen dalam file HTML tempat formulir berada. <meta http-equiv = konten-tipe konten = teks/html; charset = set karakter (GBK, UTF-8, dll.)/>
Sangat disarankan untuk mengirimkan posting