1. Apa itu protokol http
HTTP adalah singkatan dari protokol transfer hiperteks. Ini adalah protokol lapisan aplikasi dari protokol TCP/IP, yang digunakan untuk menentukan proses pertukaran data antara browser web dan server web. Setelah klien terhubung ke server web, jika Anda ingin mendapatkan sumber daya web tertentu di server web, Anda harus mematuhi format komunikasi tertentu. Protokol HTTP digunakan untuk menentukan format untuk klien untuk berkomunikasi dengan server web.
2. Versi Protokol HTTP
Versi Protokol HTTP: http/1.0, http/1.1
3. Perbedaan antara http1.0 dan http1.1
Dalam protokol HTTP 1.0, setelah klien membuat koneksi dengan server web, hanya satu sumber daya web yang dapat diperoleh.
Dalam protokol HTTP 1.1, setelah klien membuat koneksi dengan server web, beberapa sumber daya web diperoleh pada satu koneksi.
4. Permintaan HTTP
4.1. Isi Termasuk dalam Permintaan HTTP
Setelah klien terhubung ke server, ia meminta sumber daya web tertentu dari server, yang disebut klien yang mengirim permintaan HTTP ke server.
Permintaan HTTP lengkap mencakup konten berikut: baris permintaan, beberapa header pesan, dan contoh konten entitas:
4.2. Rincian Permintaan HTTP - Jalur Permintaan
Get in request line disebut metode permintaan. Metode permintaan meliputi: post, get, head, opsi, hapus, jejak, put, dan yang umum digunakan termasuk: get, post
Jika pengguna tidak memiliki pengaturan, secara default, browser mengirim permintaan mendapatkan ke server. Misalnya, akses langsung dimasukkan di browser, akses diklik pada hyperlink, dll., Dll. Semua didapat. Jika pengguna ingin mengubah metode permintaan untuk memposting, ia dapat mengubah metode pengiriman formulir.
Apakah posting atau dapatkan digunakan untuk meminta sumber daya web dari server. Perbedaan antara kedua metode ini terutama tercermin dalam transmisi data: jika metode permintaan didapat, data yang diserahkan ke server dapat dibawa dalam bentuk a? Setelah alamat URL yang diminta, dan beberapa data dipisahkan oleh &, misalnya: get /mail/1.html?name=abc&password=xyz http/1.1
Fitur dari metode GET: Parameter yang melekat pada alamat URL terbatas, dan kapasitas data biasanya tidak dapat melebihi 1K.
Jika metode permintaan adalah posting, data dapat dikirim ke server dalam konten entitas yang diminta. Karakteristik metode Post adalah: jumlah data yang dikirim tidak terbatas.
4.3. Detail Permintaan HTTP - Header Pesan
Header pesan umum dalam permintaan http
Terima: Browser memberi tahu server melalui header ini, dan tipe data yang didukungnya. Accept-Charset: Browser memberi tahu server melalui header ini, karakter mana yang didukungnya. Accept-Encoding: Browser memberi tahu server melalui header ini, dan format kompresi yang didukung menerima bahasa: browser memberi tahu server melalui header ini, dan host lokalnya: browser memberi tahu server melalui header ini, dan host mana yang akan diakses. IF-Modified-Since: Browser memberi tahu server melalui header ini, dan waktu untuk cache data. Referensi: Browser memberi tahu server melalui header ini, dan halaman mana klien berasal. Koneksi: Browser memberi tahu server melalui header ini, dan apakah akan memutuskan tautan atau tautan setelah permintaan selesai.
Misalnya:
Terima: Aplikasi/X-MS-Aplikasi, Gambar/JPEG, Aplikasi/XAML+XML, Image/GIF, Image/PJPEG,
Aplikasi/X-MS-XBAP, Aplikasi/VND.MS-EXCEL, Aplikasi/VND.MS-PowerPoint, Application/Msword, */ *
Referensi: http: // localhost: 8080/javawebdemoproject/web/2.jsp
Menerima-bahasa: ZH-CN
Pengguna-agen: mozilla/4.0 (kompatibel; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0 ;.NET4.0C; .NET.
Accept-Encoding: GZIP, mengempis
Host: Localhost: 8080
Koneksi: Keep-seive
5. Respons HTTP
5.1. Isi Termasuk dalam Respons HTTP
Respons HTTP mewakili data yang dikirim kembali oleh server ke klien, yang meliputi: baris status, beberapa header pesan, dan konten entitas.
contoh:
HTTP/1.1 200 OKServer: Apache-Coyote/1.1Content-Type: text/html;charset=ISO-8859-1Content-Length: 105Date: Tue, 27 May 2014 16:23:28 GMT<html> <head> <title>Hello World JSP</title> </head> <body> Hello World! </body> </html>
5.2. Detail Respons HTTP - Baris Status
Format baris status: Nomor versi http Status Kode Pernyataan Alasan <CRLF>
Contoh: http/1.1 200 ok
Kode status digunakan untuk mewakili hasil pemrosesan server dari permintaan. Ini adalah angka desimal tiga digit. Kode status respons dibagi menjadi 5 kategori, seperti yang ditunjukkan di bawah ini:
5.3. Detail Respons HTTP - Header Respons yang biasa digunakan
Header respons umum (header pesan) dalam respons HTTP
Lokasi: Server menggunakan header ini untuk memberi tahu browser di mana harus melompat ke server: server menggunakan header ini untuk memberi tahu browser model pengkodean konten server: server menggunakan header ini untuk memberi tahu browser format kompresi data konten yang kembali ke header ini untuk memberi tahu browser tentang panjang data yang dikembalikan oleh Browser pada Browser tentang longeng data yang dikembalikan: uses this header to tell the browser the type of data to be returned Refresh: The server uses this header to tell the browser to refresh Content-Disposition: The server uses this header to tell the browser to write data in a downloaded manner Transfer-Encoding: The server uses this header to tell the browser to tell the browser the data to be returned in blocks Expires: -1 Control the browser not to cache Cache-Control: tidak ada cache
Pragma: Tidak ada cache
6. Tetapkan header respons di server untuk mengontrol perilaku browser klien
6.1. Tetapkan header respons lokasi untuk mewujudkan pengalihan permintaan
Paket gacl.http.study; import java.io.ioException; import javax.servlet.servletException; import javax.servlet.http.httpservlet; import javax.servlet.htp.httpservletreest; impor javax.servlet @Author gacl * */kelas publik servletdemo01 memperluas httpservlet {public void doGet (permintaan httpservletRequest, httpservletResponse response) melempar servletException, head -tanya headser. untuk melompat. Ini adalah apa yang disebut permintaan pengalihan*/response.setHeader ("location", "/javaweb_httpprotocol_study_20140528/1.jsp"); } public void dopost (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {this.doget (permintaan, respons); }}When you use the URL address "http://localhost:8080/JavaWeb_HttpProtocol_Study_20140528/servlet/ServletDemo01" to access ServletDemo01, you can see the status code and response header information sent to the browser after the server responds, as shown in the figure below:
Server mengembalikan kode status 302 untuk memberi tahu browser bahwa saya tidak memiliki sumber daya yang Anda inginkan, tetapi saya memberi tahu Anda di mana itu melalui header respons lokasi. Setelah browser mem -parsing header respons, ia tahu bahwa ia ingin melompat ke /javaweb_httpprotocol_study_20140528/1.jsp halaman, sehingga secara otomatis akan melompat ke 1.jsp, seperti yang ditunjukkan pada gambar di bawah ini:
6.2. Atur header respons pengkodean konten untuk memberi tahu browser format kompresi data
Paket gacl.http.study; import java.io.bytearrayoutputStream; import java.io.ioException; import java.util.zip.gzipoutputstream; import javax.servlet.servletException; impor javax.servlet.htp.htpsveRpsception; impor javax.servlet.htp.htpsveRpsve; javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletResponse;/***@Author gacl*Applet ini digunakan untuk menunjukkan bahwa dua kali lipat. Gunakan aliran GzipoutputStream untuk mengompres data*2. Atur Enkode Konten Header Respons untuk memberi tahu browser bahwa format terkompresi dari data yang dikirim kembali oleh server*/kelas publik servletDemo02 memperluas httpservlet {public void doGet (httpservletRequest, httpservletResponse response) lempar servletexception {httpservletResponse) Layanan Layanan, httpserVletsception, httpservletsconsception {httpservletsconsception {httpservletsception {httpservletsception {httpservletsception {httpservletsception, httpservletse) "ABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCBCDABCDABCDABCDABCDABCABCDABCDABCBCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCBCDABCDABCDABCDABCDABCDABCDA yang” BCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCABCDABCDABCABCDABCDABCDABCDABCABCBC dabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcAbcdabcdabcdabcda bcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcd "CDABCDABCDABCDABCDABCDABCDABCDABC" + "DABCDABCDABCDABCDABCDABCDABCDABC" + "DABCDABCDABCDABCDABCABCABCABCDABAB" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " "CDABCDABCDABCDABCDABCDABCDABCDABCDAB" + "CDABCDABCDABCDABCDABCDABCDABCDABCDAB" + "CDABCDABCDABCDABCDABCDABCABCDABCDABCD"; System.out.println ("原始数据的大小为 :" + data.getbytes (). Panjang); BytearrayoutputStream bout = new bytearrayoutputStream (); GzipoutputStream gout = GZIPOutputStream baru (Bout); // buffer gout.write (data.getbytes ()); gout.close (); // Dapatkan byte data terkompresi g [] = bout.tobytearray (); response.setheader ("encoding konten", "gzip"); response.setHeader ("konten-panjang", g.length +""); response.getoutputStream (). write (g); } public void dopost (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {this.doget (permintaan, respons); }}Informasi respons yang dikirim oleh server ke browser adalah sebagai berikut:
Format kompresi yang didukung oleh browser adalah:
6.3. Atur header respons tipe konten dan tentukan tipe data loopback
Paket gacl.http.study; import java.io.ioexception; import java.io.inputstream; import java.io.outputstream; javax.servlet.servletException; import javax.servlet.htp.httpservlet; impor javax.servlet javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class ServletDemo03 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /** * The data types Bahwa browser dapat menerima (menerima) adalah: * Aplikasi/X-MS-Aplikasi, * Image/JPEG, * Aplikasi/Xaml+XML, * Image/Gif, * Image/Pjpeg, * Aplikasi/X-MS-XBAP, * Aplikasi/VND.MS-EXCEL, * Application/VND.MS-POWERPOOT, * Application/MWORD, MWORD, "Application," Application, "VND.MS-POWERMPOOP," MWORD, "MWORD," VND. " "Image/JPEG"); // Gunakan header respons tipe konten untuk menentukan tipe data yang dikirim ke browser sebagai "gambar/jpeg" // Baca gambar WP_20131005_002.jpg di folder IMG yang terletak di direktori root proyek, dan mengembalikan input stream input input di = input input di = = this.getSerVletContext (). getResourceAsstream ("/img/wp_20131005_002.jpg"); buffer byte [] = byte baru [1024]; int len = 0; OutputStream out = response.getOutputStream (); // Dapatkan aliran output sementara ((len = in.read (buffer))> 0) {// Baca konten dalam aliran input (dalam) dan simpan di buffer (buffer) out (buffer, 0, len); // output contents ke buffer ke buffer (buffer, 0, len);//output contents di buffer ke buffer (buffer, 0, len);/output output contents di buffer ke buffer (buffer, 0, len);/output output contents di buffer ke buffer (buffer, 0, len);/output output contents in the buffere out. Permintaan, respons httpservletResponse) melempar servletException, ioException {this.doget (permintaan, respons); }}Informasi respons yang dikirim oleh server ke browser adalah sebagai berikut:
Hasil berjalan dari servletDemo03 ditunjukkan pada gambar di bawah ini:
Gambar ditampilkan di browser
6.4. Atur header respons refresh untuk menyegarkan browser secara teratur
Paket gacl.http.study; import java.io.ioException; import javax.servlet.servletException; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletreest; impor javax.servlet Servletdemo04 memperluas httpservlet {public void doGet (httpservletRequest, httpservletResponse response) melempar servletException, ioException { / ** * Atur respons refresh untuk membiarkan browser ") secara teratur setiap 3 detik * // respons. /** * Atur header respons refresh untuk membiarkan browser melompat ke http://www.baidu.com dalam 3 detik */response.setheader ("Refresh", "3; url = 'http: //www.baidu.com'"); response.getWriter (). Tulis ("GACL"); } public void dopost (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {this.doget (permintaan, respons); }} 6.5. Atur header respons konten-disposisi untuk membiarkan browser mengunduh file
Paket gacl.http.study; import java.io.ioException; import java.io.inputstream; import java.io.outputstream; javax.servlet.servletException; import javax.servlet.http.httpservlet; impor javax.servlet javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class ServletDemo05 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /** * Set the header respons disposisi konten untuk membiarkan browser mengunduh file */ response.setHeader ("konten-disposisi", "lampiran; fileName = xxx.jpg"); InputStream in = this.getSerVletContext (). GetResourCeAsstream ("/img/1.jpg"); buffer byte [] = byte baru [1024]; int len = 0; OutputStream out = response.getoutputStream (); while ((len = in.read (buffer))> 0) {out.write (buffer, 0, len); }} public void dopost (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {this.doget (permintaan, respons); }}Saat mengakses servletdemo05 di browser, kotak unduhan file akan muncul, seperti yang ditunjukkan pada gambar berikut:
Di atas adalah semua tentang artikel ini, saya harap ini akan membantu untuk pembelajaran semua orang.