CodeGym /Blog Java /rawak /Bahagian 3. HTTP/HTTPS
John Squirrels
Tahap
San Francisco

Bahagian 3. HTTP/HTTPS

Diterbitkan dalam kumpulan
Bahan ini adalah sebahagian daripada siri "Pengenalan kepada Pembangunan Perusahaan". Artikel sebelumnya: Bahagian 3. HTTP/HTTPS - 1Hai! Hari ini kita akan belajar tentang protokol HTTP dan HTTPS. Tetapi pertama, mari kita jelaskan satu perkara: kita bercakap tentang protokol untuk menghantar data melalui rangkaian pada tahap aplikasi model OSI. Anda mungkin masih ingat bahawa kami mengenali model OSI dalam salah satu artikel sebelumnya. Jika anda tidak ingat itu, ini dia .

Apakah protokol komunikasi data?

Inilah yang kami panggil set peraturan yang dipersetujui yang membenarkan pembangun perkhidmatan yang berbeza menghantar maklumat dalam format yang boleh difahami oleh orang lain. Contohnya, anda boleh menggunakan Google Chrome untuk mendapatkan maklumat daripada Facebook dan Twitter, kerana pembangun menghantarnya menggunakan protokol HTTP standard, yang membolehkan penyemak imbas anda memprosesnya. Peraturan seragam sangat mudah untuk mereka yang membangunkan bahagian pelayan: terdapat banyak perpustakaan yang boleh menukar maklumat untuk anda dan menghantarnya menggunakan protokol yang sesuai. HTTP pada mulanya dianggap sebagai protokol untuk menghantar halaman HTML. Itulah cara ia digunakan untuk masa yang lama, tetapi kini pengaturcara sering menggunakannya untuk menghantar kedua-dua rentetan dan fail media. Secara umum, protokol ini diterima secara universal dan serba boleh, dan ia sangat mudah digunakan. Dan sekarang kita akan menyiasat cara menggunakannya.

Struktur HTTP

Kita harus ambil perhatian segera bahawa protokol HTTP hanya terdiri daripada teks. Apa yang paling menarik minat kami ialah struktur teks ini. Setiap mesej terdiri daripada tiga bahagian:
  1. Baris permulaan — Ini mentakrifkan beberapa data pengemasan.
  2. Pengepala — Ini menerangkan parameter mesej.
  3. Badan — Ini ialah kandungan mesej. Badan mesti dipisahkan daripada pengepala dengan baris kosong.
Protokol HTTP digunakan untuk menghantar permintaan kepada pelayan dan menerima respons daripada pelayan. Parameter permintaan dan respons berbeza sedikit.

Begini rupa permintaan HTTP yang mudah:


GET / HTTP/1.1
Host: codegym.cc
User-Agent: firefox/5.0 (Linux; Debian 5.0.8; en-US; rv:1.8.1.7)
Garis permulaan menunjukkan:
  • GET — Kaedah permintaan
  • / — Laluan permintaan
  • HTTP/1.1 — Versi protokol
Kemudian datang tajuk:
  • Hos — Hos yang permintaannya ditujukan
  • Ejen Pengguna — Pelanggan yang menghantar permintaan
Badan mesej tiada. Dalam permintaan HTTP, hanya baris permulaan dan pengepala "Host" diperlukan. Sekarang mari kita lihat semuanya satu demi satu. Permintaan HTTP mesti mengandungi beberapa kaedah. Terdapat sembilan daripadanya: GET, POST, PUT, OPTIONS, HEAD, PATCH, DELETE, TRACE, CONNECT. Yang paling biasa ialah GET dan POST. Kedua-dua kaedah ini akan mencukupi pada mulanya. GET — Kaedah ini meminta kandungan daripada pelayan. Sehubungan itu, permintaan dengan kaedah GET tidak mempunyai badan mesej. Tetapi jika anda perlu, anda boleh lulus parameter melalui laluan (dalam baris permulaan) dalam format berikut:

https://cdn.codegym.cc/images/article/155cea79-acfd-4968-9361-ad585e939b82/original.pngsend?name1=value1&name2=value2
di mana codegym.cc ialah hos, /send ialah laluan permintaan, dan ? ialah pemisah yang menunjukkan bahawa parameter pertanyaan mengikuti. Pada akhirnya, pasangan nilai kunci ("kunci=nilai") disenaraikan, dipisahkan oleh ampersand. POST — Kaedah ini menerbitkan maklumat pada pelayan. Permintaan POST boleh menghantar pelbagai jenis maklumat: parameter sebagai pasangan "key=value", JSON, kod HTML atau fail. Semua maklumat dihantar dalam badan mesej. Sebagai contoh:

POST /user/create/json HTTP/1.1
Accept: application/json
Content-Type: application/json
Content-Length: 28
Host: codegym.cc

{
  "Id": 12345,
  "User": "John"
}
Permintaan dihantar ke codegym.cc/user/create/json, dan versi protokol ialah HTTP/1.1. "Terima" menunjukkan format respons yang dijangka diterima oleh pelanggan. "Jenis Kandungan" menunjukkan format badan mesej yang dihantar dalam permintaan. "Panjang Kandungan" ialah bilangan aksara dalam badan. Permintaan HTTP boleh mengandungi banyak pengepala yang berbeza. Untuk maklumat lanjut, lihat spesifikasi protokol .

Respons HTTP

Selepas menerima permintaan, pelayan memprosesnya dan menghantar respons kepada klien:

HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 98

<html>
  <head>
    <title>An Example Page</title>
  </head>
  <body>
    <p>Hello World</p>
  </body>
</html>
Baris permulaan respons mengandungi versi protokol (HTTP/1.1), kod status (200) dan perihalan status (OK). Tajuknya termasuk jenis dan panjang kandungan. Badan respons mengandungi kod HTML yang dipaparkan oleh penyemak imbas sebagai halaman HTML.

Kod status respons

Segala-galanya jelas mengenai badan dan pengepala mesej, tetapi kita harus menyebut beberapa perkataan tentang kod status. Kod status respons sentiasa tiga digit. Digit pertama kod menunjukkan kategori respons:
  • 1xx — Bermaklumat. Permintaan itu diterima. Pelayan sedia untuk meneruskan.
  • 2xx - Berjaya. Permintaan telah diterima, difahami dan diproses.
  • 3xx — Ubah hala. Tindakan tambahan mesti dilakukan untuk memproses permintaan.
  • 4xx — Ralat Pelanggan. Permintaan mengandungi ralat atau tidak mematuhi protokol.
  • 5xx — Ralat Pelayan. Permintaan telah dikarang dengan betul, tetapi pelayan tidak dapat memprosesnya.
Angka kedua dan ketiga dalam kod menunjukkan respons yang lebih khusus. Sebagai contoh:
  • 200 OK — Permintaan telah diterima dan berjaya diproses.
  • 201 Created — Permintaan telah diterima dan berjaya diproses, menghasilkan penciptaan sumber atau contoh baharu.
  • 301 Dipindah Secara Kekal — Sumber yang diminta telah dialihkan secara kekal. Permintaan seterusnya untuknya hendaklah dibuat menggunakan alamat baharu.
  • 307 Ubah Hala Sementara — Sumber telah dialihkan buat sementara waktu. Buat masa ini, ia boleh diakses menggunakan pemajuan automatik.
  • 403 Dilarang — Permintaan itu difahami, tetapi kebenaran diperlukan.
  • 404 Not Found — Pelayan tidak menemui sumber di alamat ini.
  • 501 Tidak Dilaksanakan — Pelayan tidak menyokong fungsi yang diperlukan untuk membalas permintaan.
  • Versi HTTP 505 Tidak Disokong — Pelayan tidak menyokong versi protokol HTTP yang ditentukan.
Selain kod status respons, perihalan status juga dihantar. Ini membantu menjelaskan maksud setiap status tertentu. Protokol HTTP sangat praktikal: ia menyediakan sejumlah besar pengepala, yang boleh anda gunakan untuk mengatur komunikasi yang sangat fleksibel antara pelanggan dan pelayan. Pertimbangan penuh untuk semua pengepala permintaan dan respons, kaedah permintaan dan kod status respons akan menjadi terlalu banyak untuk satu artikel. Jika anda perlu, anda boleh membaca spesifikasi rasmi protokol, yang menerangkan semua nuansa. Adalah menjadi kebiasaan untuk menggunakan protokol HTTP pada port 80, jadi apabila anda melihat URL yang berakhir dengan port 80, anda boleh yakin bahawa anda perlu menggunakan HTTP untuk mengaksesnya. Apabila teknologi berkembang dan data peribadi mula dihantar melalui Internet, menjadi perlu untuk memikirkan cara untuk memberikan perlindungan tambahan untuk maklumat yang dihantar oleh pelanggan kepada pelayan. Hasil pemikiran ini ialah protokol HTTPS.

Perbezaan antara HTTPS dan HTTP

Dari segi sintaks, HTTPS adalah sama dengan protokol HTTP. Iaitu, ia menggunakan baris permulaan dan tajuk yang sama. Satu-satunya perbezaan ialah penyulitan tambahan dan port lalai (443) . HTTPS disulitkan antara HTTP dan TCP, iaitu antara aplikasi dan lapisan pengangkutan. Jika anda terlupa apa maksudnya, lihat artikel mengenai model OSI . Standard penyulitan hari ini ialah TLS. Kami tidak akan membahas topik ini terlalu banyak, tetapi ingat bahawa penyulitan berlaku sebelum maklumat sampai ke lapisan pengangkutan. Dalam HTTPS, benar-benar semua maklumat disulitkan, kecuali hos dan port tempat permintaan dihantar. Menukar pelayan untuk menggunakan protokol HTTPS dan bukannya HTTP tidak memerlukan penggunaan untuk menukar kod pelayan. Ciri ini didayakan dalam bekas servlet, yang akan kita bincangkan dalam artikel seterusnya. Dan itu sahaja untuk hari ini. Sebenarnya, tunggu sekejap. Untuk mendapatkan beberapa permintaan HTTP, buka Google Chrome, tekan F12 dan pilih tab "Rangkaian". Semua permintaan dan respons yang dihantar/diterima oleh penyemak imbas anda akan dipaparkan di sini. Bahagian 4. Asas Maven Bahagian 5. Servlets dan Java Servlet API. Menulis aplikasi web ringkas Bahagian 6. Bekas Servlet Bahagian 7. Memperkenalkan corak MVC (Model-View-Controller)
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION