John Squirrels
ระดับ
San Francisco

ส่วนที่ 3 HTTP/HTTPS

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

โปรโตคอลการสื่อสารข้อมูลคืออะไร?

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

โครงสร้างของ HTTP

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

นี่คือลักษณะของคำขอ HTTP แบบง่าย:

GET / HTTP/1.1
Host: codegym.cc
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.codegym.cc/images/article/155cea79-acfd-4968-9361-ad585e939b82/original.pngsend?name1=value1&name2=value2
โดยที่ codegym.ccเป็นโฮสต์ /sendเป็นเส้นทางของคำขอ และ ? เป็นตัวคั่นที่ระบุว่าพารามิเตอร์เคียวรีเป็นไปตาม ในตอนท้าย คู่คีย์-ค่า ("key=value") จะแสดงรายการ โดยคั่นด้วยเครื่องหมายแอมเปอร์แซนด์ POST — วิธีนี้เผยแพร่ข้อมูลบนเซิร์ฟเวอร์ คำขอ POST สามารถส่งข้อมูลได้หลายประเภท: พารามิเตอร์เป็นคู่ "คีย์=ค่า", JSON, โค้ด HTML หรือแม้แต่ไฟล์ ข้อมูลทั้งหมดจะถูกส่งไปในเนื้อหาของข้อความ ตัวอย่างเช่น:
POST /user/create/json HTTP/1.1
Accept: application/json
Content-Type: application/json
Content-Length: 28
Host: codegym.cc

{
  "Id": 12345,
  "User": "John"
}
คำขอถูกส่งไปที่ codegym.cc/user/create/json และเวอร์ชันโปรโตคอลคือ HTTP/1.1 "ยอมรับ" ระบุรูปแบบการตอบกลับที่ลูกค้าคาดว่าจะได้รับ "ประเภทเนื้อหา" ระบุรูปแบบของเนื้อหาข้อความที่ส่งในคำขอ "ความยาวเนื้อหา" คือจำนวนอักขระในเนื้อหา คำขอ 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 ดังนั้นเมื่อคุณเห็น URL ที่ลงท้ายด้วยพอร์ต 80 คุณจึงมั่นใจได้ว่าคุณต้องใช้ HTTP เพื่อเข้าถึง เมื่อเทคโนโลยีพัฒนาขึ้นและข้อมูลส่วนบุคคลเริ่มถูกส่งผ่านทางอินเทอร์เน็ต จึงจำเป็นต้องพิจารณาว่าจะให้การป้องกันเพิ่มเติมสำหรับข้อมูลที่ไคลเอนต์ส่งไปยังเซิร์ฟเวอร์ได้อย่างไร ผลลัพธ์ของการคิดนี้คือโปรโตคอล HTTPS

ความแตกต่างระหว่าง HTTPS และ HTTP

ในแง่ของไวยากรณ์ HTTPS เหมือนกับโปรโตคอล HTTP นั่นคือใช้บรรทัดเริ่มต้นและส่วนหัวเดียวกัน ข้อแตกต่างเพียงอย่างเดียวคือการเข้ารหัสเพิ่มเติมและพอร์ตเริ่มต้น (443 ) HTTPS ได้รับการเข้ารหัสระหว่าง HTTP และ TCP นั่นคือระหว่างแอปพลิเคชันและเลเยอร์การขนส่ง หากคุณลืมความหมาย โปรดดูบทความเกี่ยวกับแบบจำลอง OSI มาตรฐานการเข้ารหัสของวันนี้คือ TLS เราจะไม่พูดถึงหัวข้อนี้มากเกินไป แต่จำไว้ว่าการเข้ารหัสจะเกิดขึ้นก่อนที่ข้อมูลจะไปถึงเลเยอร์การขนส่ง. ใน HTTPS ข้อมูลทั้งหมดจะถูกเข้ารหัสอย่างสมบูรณ์ ยกเว้นโฮสต์และพอร์ตที่ส่งคำขอ การสลับเซิร์ฟเวอร์ไปใช้โปรโตคอล HTTPS แทน HTTP ไม่จำเป็นต้องเปลี่ยนรหัสเซิร์ฟเวอร์ คุณลักษณะนี้เปิดใช้งานในคอนเทนเนอร์เซิร์ฟเล็ต ซึ่งเราจะกล่าวถึงในบทความต่อๆ ไป และนั่นคือทั้งหมดสำหรับวันนี้ ที่จริงรอสักครู่ ในการรับมือกับคำขอ HTTP ให้เปิด Google Chrome กด F12 แล้วเลือกแท็บ "เครือข่าย" คำขอและการตอบกลับทั้งหมดที่ส่ง/รับโดยเบราว์เซอร์ของคุณจะแสดงที่นี่ ส่วนที่ 4 พื้นฐานของ Maven ส่วนที่ 5 Servlets และ Java Servlet API การเขียน Web Application อย่างง่าย ตอนที่ 6. Servlet container ตอนที่ 7. แนะนำรูปแบบ MVC (Model-View-Controller)
ความคิดเห็น
  • เป็นที่นิยม
  • ใหม่
  • เก่า
คุณต้องลงชื่อเข้าใช้เพื่อแสดงความคิดเห็น
หน้านี้ยังไม่มีความคิดเห็นใด ๆ