JavaRush /จาวาบล็อก /Random-TH /ส่วนที่ 3 โปรโตคอล HTTP/HTTPS
Professor Hans Noodles
ระดับ

ส่วนที่ 3 โปรโตคอล HTTP/HTTPS

เผยแพร่ในกลุ่ม
เนื้อหานี้เป็นส่วนหนึ่งของชุด "ข้อมูลเบื้องต้นเกี่ยวกับการพัฒนาองค์กร" บทความก่อนหน้านี้: สวัสดี! วันนี้เราจะมาทำความเข้าใจเกี่ยวกับโปรโตคอล HTTP และ HTTPS แต่ก่อนอื่น เรามาชี้แจงประเด็นหนึ่ง: เรากำลังพูดถึงโปรโตคอลการถ่ายโอนข้อมูลผ่านเครือข่ายที่เลเยอร์แอปพลิเคชันของโมเดล OSI อย่างที่คุณจำได้ เราได้พูดคุยถึงโมเดล OSI ในบทความก่อนหน้านี้ และถ้าจำไม่ได้ก็นี่ครับ ส่วนที่ 3 โปรโตคอล HTTP/HTTPS - 1

โปรโตคอลการถ่ายโอนข้อมูลคืออะไร

นี่คือชื่อที่ตั้งให้กับข้อตกลงที่ยอมรับโดยทั่วไป ซึ่งผู้พัฒนาบริการต่างๆ ส่งข้อมูลในรูปแบบเดียว ตัวอย่างเช่น เมื่อใช้ Google Chrome คุณสามารถรับข้อมูลจากทั้ง Facebook และ Twitter ได้ เนื่องจากนักพัฒนาส่งข้อมูลโดยใช้โปรโตคอล HTTP มาตรฐาน และเบราว์เซอร์ของคุณสามารถประมวลผลได้ กฎแบบเดียวกันยังสะดวกมากสำหรับนักพัฒนาฝั่งเซิร์ฟเวอร์ด้วย: มีไลบรารีจำนวนมากที่สามารถแปลงข้อมูลให้คุณและส่งโดยใช้โปรโตคอลที่จำเป็น เดิมที HTTP ถือเป็นโปรโตคอลสำหรับการถ่ายโอนหน้า HTML นี่เป็นกรณีนี้มานานแล้ว แต่ตอนนี้โปรแกรมเมอร์มักจะถ่ายโอนทั้งสตริงและไฟล์มีเดียไปทับมัน โดยรวมแล้ว โปรโตคอลนี้มีความหลากหลายและยืดหยุ่น และใช้งานง่ายมาก ตอนนี้เรามาดูวิธีการทำเช่นนี้กันดีกว่า

โครงสร้าง HTTP

เป็นที่น่าสังเกตทันทีว่าโปรโตคอล HTTP ประกอบด้วยข้อความเท่านั้น เราสนใจโครงสร้างที่มีข้อความนี้มากที่สุด แต่ละข้อความประกอบด้วยสามส่วน:
  1. เส้นเริ่มต้น—กำหนดข้อมูลการบริการ
  2. ส่วนหัว - คำอธิบายพารามิเตอร์ข้อความ
  3. เนื้อหาข้อความ (Body) - ข้อมูลข้อความ ต้องแยกออกจากส่วนหัวด้วยบรรทัดว่าง
การใช้โปรโตคอล HTTP คุณสามารถส่งคำขอไปยังเซิร์ฟเวอร์ (คำขอ) และรับการตอบกลับจากเซิร์ฟเวอร์ (ตอบกลับ) คำขอและการตอบกลับมีพารามิเตอร์ที่แตกต่างกันเล็กน้อย

คำขอ HTTP แบบธรรมดามีลักษณะอย่างไร

GET / HTTP/1.1
Host: javarush.com
User-Agent: firefox/5.0 (Linux; Debian 5.0.8; en-US; rv:1.8.1.7)
บรรทัดเริ่มต้นประกอบด้วย:
  • GET - วิธีการร้องขอ;
  • / — เส้นทางคำขอ (เส้นทาง);
  • HTTP/1.1 - เวอร์ชันของโปรโตคอลการถ่ายโอนข้อมูล
จากนั้นมาหัวเรื่อง:
  • โฮสต์ - โฮสต์ที่ส่งคำขอ
  • User-Agentคือไคลเอนต์ที่ส่งคำขอ
ไม่มีเนื้อหาข้อความ ในคำขอ HTTP ต้องใช้เพียงบรรทัดเริ่มต้นและส่วนหัวของโฮสต์เท่านั้น ตอนนี้เรามาดูทุกอย่างตามลำดับ คำขอ HTTP ต้องมีวิธีการบางอย่าง มีทั้งหมดเก้ารายการ: GET, POST, PUT, OPTIONS, HEAD, PATCH, DELETE, TRACE, CONNECT ที่พบบ่อยที่สุดคือ GET และ POST สองวิธีนี้จะเพียงพอในตอนแรก GET - ร้องขอเนื้อหาจากเซิร์ฟเวอร์ ดังนั้นคำขอที่มีเมธอด GET จึงไม่มีเนื้อหาข้อความ แต่หากจำเป็น คุณสามารถส่งพารามิเตอร์ผ่านพาธในรูปแบบนี้: https://cdn.javarush.com/images/article/155cea79-acfd-4968-9361-ad585e939b82/Original.pngsend?name1=value1&name2=value2 ที่นี่: javarush .com — โฮสต์ /send — เส้นทางคำขอ ? — ตัวคั่นที่ระบุว่าพารามิเตอร์คำขอเป็นไปตาม ในตอนท้าย พารามิเตอร์จะแสดงอยู่ในรูปแบบ key=value คั่นด้วยเครื่องหมายแอมเพอร์แซนด์ POST - เผยแพร่ข้อมูลบนเซิร์ฟเวอร์ คำขอ POST สามารถถ่ายโอนข้อมูลต่างๆ ได้: พารามิเตอร์ในรูปแบบ key=value, JSON, โค้ด HTML หรือแม้แต่ไฟล์ ข้อมูลทั้งหมดจะถูกส่งไปในเนื้อความของข้อความ ตัวอย่างเช่น:
POST /user/create/json HTTP/1.1
Accept: application/json
Content-Type: application/json
Content-Length: 28
Host: javarush.com

{
  "Id": 12345,
  "User": "John"
}
คำขอถูกส่งไปยัง javarush.com/user/create/json เวอร์ชันโปรโตคอลคือ HTTP/1.1 Accept ระบุรูปแบบการตอบกลับที่ไคลเอ็นต์คาดหวังที่จะได้รับ Content-Type ระบุรูปแบบเนื้อหาข้อความที่จะถูกส่ง Content-Length - จำนวนอักขระในร่างกาย คำขอ HTTP สามารถมีส่วนหัวที่แตกต่างกันได้มากมาย รายละเอียดเพิ่มเติมสามารถพบได้ใน ข้อกำหนดโปรโตคอล

การตอบสนอง HTTP

หลังจากได้รับคำขอแล้ว เซิร์ฟเวอร์จะประมวลผลและส่งการตอบกลับไปยังไคลเอ็นต์:
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>
บรรทัดเริ่มต้นในการตอบกลับประกอบด้วยเวอร์ชันโปรโตคอล (HTTP/1.1), รหัสสถานะ (200), คำอธิบายสถานะ (ตกลง) ส่วนหัวระบุประเภทและความยาวของเนื้อหา เนื้อความของการตอบกลับประกอบด้วยโค้ด HTML ที่เบราว์เซอร์จะดึงลงในหน้า HTML

รหัสสถานะการตอบสนอง

ทุกอย่างชัดเจนทั้งเนื้อหาและส่วนหัวของข้อความ แต่ก็คุ้มค่าที่จะพูดสักสองสามคำเกี่ยวกับรหัสสถานะ รหัสสถานะการตอบสนองจะเป็นตัวเลขสามหลักเสมอ และหลักแรกของรหัสจะระบุหมวดหมู่ของการตอบกลับ:
  • 1xx - ข้อมูล ได้รับคำขอแล้ว เซิร์ฟเวอร์พร้อมที่จะดำเนินการต่อ
  • 2xx - สำเร็จ ได้รับ เข้าใจ และดำเนินการตามคำขอแล้ว
  • 3xx - การเปลี่ยนเส้นทาง ต้องดำเนินการขั้นตอนต่อไปนี้เพื่อประมวลผลคำขอ
  • 4xx - ข้อผิดพลาดของไคลเอ็นต์ คำขอมีข้อผิดพลาดหรือไม่ปฏิบัติตามโปรโตคอล
  • 5xx - ข้อผิดพลาดของเซิร์ฟเวอร์ เซิร์ฟเวอร์ไม่สามารถประมวลผลคำขอได้ แม้ว่าจะประกอบอย่างถูกต้องก็ตาม
ตัวเลขตัวที่สองและสามในรหัสให้รายละเอียดคำตอบ ตัวอย่างเช่น:
  • 200 ตกลง — ได้รับคำขอและดำเนินการเรียบร้อยแล้ว
  • 201 สร้างแล้ว — ได้รับคำขอและประมวลผลสำเร็จ ส่งผลให้เกิดการสร้างทรัพยากรใหม่หรืออินสแตนซ์
  • 301 ย้ายอย่างถาวร - ทรัพยากรที่ร้องขอถูกย้ายอย่างถาวร และการร้องขอในภายหลังจะต้องเกิดขึ้นตามที่อยู่ใหม่
  • 307 การเปลี่ยนเส้นทางชั่วคราว - ทรัพยากรถูกย้ายชั่วคราว ในตอนนี้ คุณสามารถเข้าถึงได้โดยใช้การเปลี่ยนเส้นทางอัตโนมัติ
  • 403 ห้าม - คำขอชัดเจน แต่ต้องได้รับอนุญาต
  • 404 ไม่พบ - เซิร์ฟเวอร์ไม่พบทรัพยากรตามที่อยู่นี้
  • 501 ไม่ได้ใช้งาน - เซิร์ฟเวอร์ไม่รองรับฟังก์ชันการทำงานเพื่อตอบสนองคำขอนี้
  • ไม่รองรับเวอร์ชัน HTTP 505 - เซิร์ฟเวอร์ไม่รองรับโปรโตคอล HTTP เวอร์ชันที่ระบุ
นอกจากรหัสสถานะการตอบกลับแล้ว ยังมีการส่งคำอธิบายสถานะด้วย ทำให้เข้าใจได้ง่ายว่าสถานะใดหมายถึงอะไร โปรโตคอล HTTP ใช้งานได้จริง: มีส่วนหัวจำนวนมาก ซึ่งคุณสามารถตั้งค่าการสื่อสารที่ยืดหยุ่นระหว่างไคลเอ็นต์และเซิร์ฟเวอร์ได้ ส่วนหัวคำขอและการตอบกลับทั้งหมด วิธีการร้องขอ และรหัสสถานะการตอบกลับไม่สามารถพิจารณาได้ในบทความเดียว หากจำเป็นคุณสามารถอ่านข้อกำหนดโปรโตคอลอย่างเป็นทางการซึ่งอธิบายความแตกต่างทั้งหมด โดยทั่วไปโปรโตคอล HTTP จะใช้บนพอร์ต 80 ดังนั้นเมื่อคุณเห็นที่อยู่ที่สิ้นสุดที่พอร์ต 80 คุณจึงมั่นใจได้ว่าควรเข้าถึงได้ผ่าน HTTP ด้วยการพัฒนาเทคโนโลยีและการเคลื่อนย้ายข้อมูลส่วนบุคคลบนอินเทอร์เน็ตอย่างต่อเนื่อง เราต้องคิดถึงวิธีให้การป้องกันเพิ่มเติมสำหรับข้อมูลที่ลูกค้าส่งไปยังเซิร์ฟเวอร์ ผลลัพธ์คือโปรโตคอล HTTPS

HTTPS และ HTTP แตกต่างกันอย่างไร

HTTPS มีลักษณะทางวากยสัมพันธ์เหมือนกับโปรโตคอล HTTP กล่าวคือ ใช้บรรทัดเริ่มต้นและส่วนหัวเดียวกัน ข้อแตกต่างเพียงอย่างเดียวคือการเข้ารหัสเพิ่มเติมและพอร์ตเริ่มต้น (443 ) HTTPS ได้รับการเข้ารหัสระหว่าง HTTP และ TCP นั่นคือระหว่างแอปพลิเคชันและเลเยอร์การขนส่ง หากคุณลืมว่ามัน คืออะไร ลองอ่านบทความเกี่ยวกับโมเดล OSI มาตรฐานการเข้ารหัสสมัยใหม่คือ TLS เราจะไม่เจาะลึกในหัวข้อนี้มากเกินไป แต่โปรดจำไว้ว่า การเข้ารหัสเกิดขึ้นก่อน ที่ข้อมูลจะไปถึงชั้นการขนส่ง HTTPS เข้ารหัสข้อมูลทั้งหมดยกเว้นโฮสต์และพอร์ตที่ส่งคำขอไป หากต้องการเปลี่ยนเซิร์ฟเวอร์ให้ใช้โปรโตคอล HTTPS แทน HTTP เราไม่จำเป็นต้องเปลี่ยนรหัสเซิร์ฟเวอร์ คุณลักษณะนี้เปิดใช้งานในคอนเทนเนอร์เซิร์ฟเล็ต ซึ่งเราจะพูดถึงในบทความต่อไปนี้ นั่นคือทั้งหมดสำหรับวันนี้ อย่างไรก็ตามรอก่อน หากต้องการตรวจจับคำขอ HTTP ให้เปิด Google Chrome กด F12 เลือกแท็บเครือข่าย คำขอและการตอบกลับทั้งหมดที่ส่ง/รับโดยเบราว์เซอร์ของคุณจะแสดงที่นี่ ส่วนที่ 4 พื้นฐาน Maven ส่วนที่ 5 เซิร์ฟเล็ต การเขียนแอปพลิเคชันเว็บอย่างง่าย ตอนที่ 6 คอนเทนเนอร์ Servlet ตอนที่ 7 แนะนำรูปแบบ MVC (Model-View-Controller) ตอนที่ 8 การเขียนแอปพลิเคชัน spring-boot ขนาดเล็ก
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION