โปรโตคอลการถ่ายโอนไฮเปอร์เท็กซ์คือ HTTP xx: ข้อความแห่งความสำเร็จ

HTTP เป็นโปรโตคอลสำหรับการถ่ายโอนไฮเปอร์เท็กซ์ระหว่างระบบแบบกระจาย โดยพื้นฐานแล้ว http ถือเป็นองค์ประกอบพื้นฐาน เว็บที่ทันสมัย- ในฐานะนักพัฒนาเว็บที่เคารพตนเอง เราควรรู้เรื่องนี้ให้มากที่สุด

ลองดูโปรโตคอลนี้ผ่านเลนส์อาชีพของเรา ในส่วนแรก เราจะพูดถึงข้อมูลพื้นฐานและดูคำขอ/การตอบกลับ ในบทความถัดไป เราจะดูคุณสมบัติโดยละเอียดเพิ่มเติม เช่น การแคช การประมวลผลการเชื่อมต่อ และการตรวจสอบสิทธิ์

นอกจากนี้ในบทความนี้ ฉันจะอ้างถึงมาตรฐาน RFC 2616 เป็นหลัก: Hypertext Transfer Protocol -- HTTP/1.1

พื้นฐาน HTTP

HTTP ช่วยให้สามารถสื่อสารระหว่างโฮสต์และไคลเอนต์หลายตัว และรองรับการตั้งค่าเครือข่ายที่หลากหลาย

โดยพื้นฐานแล้ว TCP/IP ใช้สำหรับการสื่อสาร แต่นี่ไม่ใช่ตัวเลือกเดียวที่เป็นไปได้ ตามค่าเริ่มต้น TCP/IP จะใช้พอร์ต 80 แต่สามารถใช้พอร์ตอื่นได้

การสื่อสารระหว่างโฮสต์และไคลเอนต์เกิดขึ้นในสองขั้นตอน: คำขอและการตอบกลับ ไคลเอนต์สร้างคำขอ HTTP เพื่อตอบสนองต่อเซิร์ฟเวอร์ที่ให้การตอบสนอง (ข้อความ) อีกไม่นานเราจะดูรายละเอียดเพิ่มเติมเกี่ยวกับรูปแบบการทำงานนี้

โปรโตคอล HTTP เวอร์ชันปัจจุบันคือ 1.1 ซึ่งมีการนำเสนอฟีเจอร์ใหม่บางอย่าง ในความคิดของฉันสิ่งที่สำคัญที่สุดคือ: รองรับการเชื่อมต่อที่เปิดอยู่ตลอดเวลา, กลไกการถ่ายโอนข้อมูลใหม่, การเข้ารหัสการถ่ายโอนแบบก้อน, ส่วนหัวใหม่สำหรับแคช เราจะดูบางส่วนในส่วนที่สองของบทความนี้

URL

หัวใจสำคัญของการสื่อสารทางเว็บคือคำขอ ซึ่งส่งผ่าน Uniform Resource Locator (URL) ฉันแน่ใจว่าคุณรู้อยู่แล้วว่า URL คืออะไร แต่เพื่อความสมบูรณ์ ฉันจึงตัดสินใจพูดสองสามคำ โครงสร้าง URL นั้นเรียบง่ายมากและประกอบด้วยส่วนประกอบต่อไปนี้:

โปรโตคอลอาจเป็น http สำหรับการเชื่อมต่อปกติหรือ https สำหรับข้อมูลเพิ่มเติม การแลกเปลี่ยนที่ปลอดภัยข้อมูล. พอร์ตเริ่มต้นคือ 80 ตามด้วยเส้นทางไปยังทรัพยากรบนเซิร์ฟเวอร์และสายของพารามิเตอร์

วิธีการ

เมื่อใช้ URL เรากำหนดชื่อที่แน่นอนของโฮสต์ที่เราต้องการสื่อสารด้วย แต่การดำเนินการใดที่เราจำเป็นต้องดำเนินการสามารถสื่อสารได้โดยใช้วิธี HTTP เท่านั้น แน่นอนว่ามีการดำเนินการหลายประเภทที่เราสามารถทำได้ HTTP ใช้สิ่งที่จำเป็นที่สุดซึ่งเหมาะสมกับความต้องการของแอปพลิเคชันส่วนใหญ่

วิธีการที่มีอยู่:

รับ: เข้าถึงทรัพยากรที่มีอยู่ URL แสดงรายการข้อมูลที่จำเป็นทั้งหมดเพื่อให้เซิร์ฟเวอร์สามารถค้นหาและส่งคืนทรัพยากรที่ร้องขอเป็นการตอบกลับ

โพสต์: ใช้เพื่อสร้างทรัพยากรใหม่ คำขอ POST มักจะมีทั้งหมด ข้อมูลที่จำเป็นเพื่อสร้างทรัพยากรใหม่

ใส่: อัปเดต ทรัพยากรปัจจุบัน- คำขอ PUT มีข้อมูลที่จะอัปเดต

ลบ: ใช้เพื่อลบทรัพยากรที่มีอยู่

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

HTTP ยังรองรับวิธีการอื่นๆ ด้วย:

ศีรษะ: คล้ายกับ GET ข้อแตกต่างคือสำหรับคำขอประเภทนี้จะไม่มีการส่งข้อความ เซิร์ฟเวอร์รับเฉพาะส่วนหัวเท่านั้น ใช้เพื่อกำหนดว่าทรัพยากรได้รับการแก้ไขหรือไม่

ติดตาม: ในระหว่างการส่งข้อมูล คำขอจะผ่านจุดเชื่อมต่อและพร็อกซีเซิร์ฟเวอร์จำนวนมาก ซึ่งแต่ละจุดจะป้อนข้อมูลของตัวเอง: IP, DNS เมื่อใช้วิธีนี้ คุณจะสามารถดูข้อมูลระดับกลางทั้งหมดได้

ตัวเลือก: ใช้เพื่อกำหนดความสามารถของเซิร์ฟเวอร์ การตั้งค่า และการกำหนดค่าสำหรับทรัพยากรเฉพาะ

รหัสสถานะ

เพื่อตอบสนองต่อคำขอจากไคลเอ็นต์ เซิร์ฟเวอร์จะส่งการตอบกลับซึ่งมีรหัสสถานะด้วย รหัสนี้มีความหมายพิเศษเพื่อให้ลูกค้าเข้าใจวิธีตีความคำตอบได้ชัดเจนยิ่งขึ้น:

1xx: ข้อความข้อมูล

ชุดรหัสเหล่านี้ถูกนำมาใช้ใน HTTP/1.1 เซิร์ฟเวอร์สามารถส่งคำขอในรูปแบบ: คาดหวัง: 100 ดำเนินการต่อ ซึ่งหมายความว่าไคลเอ็นต์ยังคงส่งคำขอส่วนที่เหลืออยู่ ไคลเอนต์ที่ใช้ HTTP/1.0 ละเว้นส่วนหัวเหล่านี้

2xx: ข้อความแสดงความสำเร็จ

หากไคลเอนต์ได้รับรหัสจากซีรีส์ 2xx แสดงว่าคำขอถูกส่งสำเร็จ ตัวเลือกที่พบบ่อยที่สุดคือ 200 ตกลง ด้วยคำขอ GET เซิร์ฟเวอร์จะส่งการตอบกลับในเนื้อหาของข้อความ นอกจากนี้ยังมีคำตอบอื่นๆ ที่เป็นไปได้:

  • 202 ยอมรับแล้ว: คำขอได้รับการยอมรับแล้ว แต่อาจไม่มีทรัพยากรในการตอบกลับ สิ่งนี้มีประโยชน์สำหรับ คำขอแบบอะซิงโครนัสทางฝั่งเซิร์ฟเวอร์ เซิร์ฟเวอร์จะกำหนดว่าจะส่งทรัพยากรหรือไม่
  • 204 ไม่มีเนื้อหา: ไม่มีข้อความในเนื้อหาการตอบกลับ
  • 205 รีเซ็ตเนื้อหา: สั่งให้เซิร์ฟเวอร์รีเซ็ตการนำเสนอเอกสาร
  • 206 เนื้อหาบางส่วน: การตอบกลับมีเนื้อหาเพียงบางส่วนเท่านั้น ส่วนหัวเพิ่มเติมจะกำหนดความยาวรวมของเนื้อหาและข้อมูลอื่นๆ

3xx: เปลี่ยนเส้นทาง

ข้อความประเภทหนึ่งถึงลูกค้าเกี่ยวกับความจำเป็นในการดำเนินการอีกครั้ง กรณีการใช้งานที่พบบ่อยที่สุดคือการเปลี่ยนเส้นทางไคลเอ็นต์ไปยังที่อยู่อื่น

  • 301 ย้ายอย่างถาวร: ขณะนี้ทรัพยากรสามารถพบได้แตกต่างออกไป ที่อยู่ URL.
  • 303 ดูอื่นๆ: ทรัพยากรสามารถพบได้ชั่วคราวที่ URL อื่น ส่วนหัวของสถานที่ประกอบด้วย URL ชั่วคราว
  • 304 ไม่ได้รับการแก้ไข: เซิร์ฟเวอร์พิจารณาว่าทรัพยากรไม่ได้รับการแก้ไข และไคลเอ็นต์จำเป็นต้องใช้เวอร์ชันแคชของการตอบกลับ ในการตรวจสอบตัวตนของข้อมูล จะใช้ ETag (แฮชแท็กเอนทิตี)

4xx: ข้อผิดพลาดของไคลเอ็นต์

เซิร์ฟเวอร์ใช้คลาสข้อความนี้หากตัดสินใจว่าคำขอถูกส่งด้วยข้อผิดพลาด รหัสที่พบบ่อยที่สุด: 404 ไม่พบ- ซึ่งหมายความว่าไม่พบทรัพยากรบนเซิร์ฟเวอร์ รหัสที่เป็นไปได้อื่น ๆ :

  • 400 คำขอไม่ถูกต้อง : คำถามถูกสร้างขึ้นอย่างไม่ถูกต้อง
  • 401 ไม่ได้รับอนุญาต: จำเป็นต้องมีการรับรองความถูกต้องเพื่อทำการร้องขอ ข้อมูลจะถูกส่งผ่านส่วนหัวการอนุญาต
  • 403 สิ่งต้องห้าม: เซิร์ฟเวอร์ไม่อนุญาตให้เข้าถึงทรัพยากร
  • ไม่อนุญาตให้ใช้วิธี 405: มีการใช้วิธี HTTP ที่ไม่ถูกต้องในการเข้าถึงทรัพยากร
  • 409 ความขัดแย้ง: เซิร์ฟเวอร์ไม่สามารถประมวลผลคำขอได้อย่างสมบูรณ์เนื่องจาก พยายามที่จะเปลี่ยนแปลงมากขึ้น เวอร์ชันใหม่ทรัพยากร. สิ่งนี้มักเกิดขึ้นกับคำขอ PUT

5xx: ข้อผิดพลาดของเซิร์ฟเวอร์

ชุดรหัสที่ใช้ในการตรวจจับข้อผิดพลาดของเซิร์ฟเวอร์เมื่อประมวลผลคำขอ พบมากที่สุด: 500 ภายใน ข้อผิดพลาดของเซิร์ฟเวอร์- ตัวเลือกอื่นๆ:

  • 501 ไม่ได้นำไปใช้: เซิร์ฟเวอร์ไม่รองรับการทำงานที่ร้องขอ
  • 503 บริการไม่พร้อมใช้งาน: สิ่งนี้สามารถเกิดขึ้นได้หากเซิร์ฟเวอร์มีข้อผิดพลาดหรือโอเวอร์โหลด โดยปกติในกรณีนี้ เซิร์ฟเวอร์ไม่ตอบสนอง และเวลาที่กำหนดสำหรับการตอบกลับจะหมดอายุ

รูปแบบข้อความคำขอ/ตอบกลับ

ในภาพต่อไปนี้ คุณจะเห็นกระบวนการแผนผังในการส่งคำขอโดยไคลเอ็นต์ การประมวลผล และส่งการตอบสนองโดยเซิร์ฟเวอร์

ลองดูโครงสร้างของข้อความที่ส่งผ่าน HTTP:

ข้อความ= *() ซีอาร์แอลเอฟ [ ] = ขอ-Line | สถานะ-บรรทัด = ชื่อเขตข้อมูล /// เขตข้อมูล-ค่า

จะต้องมีบรรทัดว่างระหว่างส่วนหัวและเนื้อหาของข้อความ อาจมีหลายหัวข้อ:

เนื้อหาการตอบสนองอาจมี ข้อมูลครบถ้วนหรือบางส่วน หากมีการเปิดใช้งานคุณสมบัติที่เกี่ยวข้อง (การเข้ารหัสการถ่ายโอน: เป็นก้อน) HTTP/1.1 ยังรองรับส่วนหัว Transfer-Encoding อีกด้วย

หัวเรื่องทั่วไป

ต่อไปนี้เป็นส่วนหัวหลายประเภทที่ใช้ในทั้งคำขอและการตอบกลับ:

General-header = การควบคุมแคช | การเชื่อมต่อ | วันที่ | แพรมา | ตัวอย่าง | โอน-เข้ารหัส | อัพเกรด | ผ่าน | คำเตือน

เราได้กล่าวถึงบางสิ่งในบทความนี้แล้ว บางส่วนเราจะกล่าวถึงรายละเอียดเพิ่มเติมในส่วนที่สอง

ส่วนหัว via ถูกใช้ในคำขอ TRACE และได้รับการอัปเดตโดยพร็อกซีเซิร์ฟเวอร์ทั้งหมด

ส่วนหัวของ Pragma ใช้เพื่อแสดงรายการส่วนหัวที่กำหนดเอง ตัวอย่างเช่น Pragma: no-cache เหมือนกับ Cache-Control: no-cache เราจะพูดถึงเรื่องนี้เพิ่มเติมในส่วนที่สอง

ส่วนหัว Date ใช้เพื่อจัดเก็บวันที่และเวลาของคำขอ/ตอบกลับ

ส่วนหัวการอัพเกรดใช้เพื่อเปลี่ยนโปรโตคอล

Transfer-Encoding มีวัตถุประสงค์เพื่อแบ่งการตอบสนองออกเป็นหลายส่วนโดยใช้ Transfer-Encoding: chunked นี่เป็นคุณสมบัติใหม่ใน HTTP/1.1

ส่วนหัวของเอนทิตี

ส่วนหัวของเอนทิตีถ่ายทอดข้อมูลเมตาเกี่ยวกับเนื้อหา:

เอนทิตีส่วนหัว = อนุญาต | การเข้ารหัสเนื้อหา | เนื้อหาภาษา | ความยาวของเนื้อหา | เนื้อหา-ตำแหน่ง | เนื้อหา-MD5 | เนื้อหา-ช่วง | ประเภทเนื้อหา | หมดอายุ | แก้ไขครั้งล่าสุด

ส่วนหัวทั้งหมดที่นำหน้าด้วยเนื้อหา ให้ข้อมูลเกี่ยวกับโครงสร้าง การเข้ารหัส และขนาดของเนื้อหาข้อความ

ส่วนหัว Expires ประกอบด้วยเวลาและวันที่หมดอายุของเอนทิตี ค่า “ไม่มีวันหมดอายุ” หมายถึง เวลา + 1 รหัส s ช่วงเวลาปัจจุบัน- Last-Modified มีเวลาและวันที่ การเปลี่ยนแปลงครั้งล่าสุดสาระสำคัญ

เมื่อใช้ส่วนหัวเหล่านี้ คุณสามารถระบุข้อมูลที่จำเป็นสำหรับงานของคุณได้

รูปแบบคำขอ

คำขอมีลักษณะดังนี้:

Request-Line = Method SP URI SP HTTP-Version CRLF Method = "OPTIONS" | "หัว" | "รับ" | "โพสต์" | "ใส่" | "ลบ" | "ติดตาม"

SP เป็นตัวคั่นระหว่างโทเค็น เวอร์ชัน HTTP ระบุไว้ใน HTTP-Version คำขอจริงมีลักษณะดังนี้:

GET /articles/http-basics HTTP/1.1 โฮสต์: www.articles.com การเชื่อมต่อ: Keep-alive Cache-Control: ไม่มีแคช Pragma: ไม่มีแคช ยอมรับ: text/html,application/xhtml+xml,application/xml; ค=0.9,*/*;คิว=0.8

รายการส่วนหัวคำขอที่เป็นไปได้:

คำขอส่วนหัว = ยอมรับ | ยอมรับ-Charset | ยอมรับการเข้ารหัส | ยอมรับภาษา | การอนุญาต | คาดหวัง | จาก | โฮสต์ | หากตรงกัน | ถ้า-แก้ไข-ตั้งแต่ | ถ้า-ไม่มี-ตรงกัน | ถ้า-ช่วง | ถ้า-ไม่ได้แก้ไข-ตั้งแต่ | Max-ไปข้างหน้า | การมอบอำนาจมอบฉันทะ | พิสัย | ผู้อ้างอิง | เต | ผู้ใช้-ตัวแทน

ส่วนหัวยอมรับระบุการสนับสนุน ประเภทละครใบ้, ภาษา, การเข้ารหัสอักขระ ส่วนหัวจาก โฮสต์ ผู้อ้างอิง และตัวแทนผู้ใช้ประกอบด้วยข้อมูลเกี่ยวกับไคลเอ็นต์ คำนำหน้า If- มีวัตถุประสงค์เพื่อสร้างเงื่อนไข หากเงื่อนไขไม่ผ่าน ข้อผิดพลาด 304 Not Modified จะเกิดขึ้น

รูปแบบการตอบกลับ

รูปแบบการตอบกลับจะแตกต่างกันเฉพาะในสถานะและจำนวนส่วนหัวเท่านั้น สถานะมีลักษณะดังนี้:

สถานะบรรทัด = HTTP-เวอร์ชัน SP สถานะรหัส SP เหตุผล-วลี CRLF

  • เวอร์ชัน HTTP
  • รหัสสถานะ
  • ข้อความสถานะที่มนุษย์สามารถอ่านได้

สถานะปกติมีลักษณะดังนี้:

HTTP/1.1 200 ตกลง

ส่วนหัวของการตอบกลับอาจเป็นดังนี้:

Response-header = ยอมรับ-ช่วง | อายุ | อีแท็ก | ที่ตั้ง | พร็อกซี-รับรองความถูกต้อง | ลองอีกครั้งหลังจาก | เซิร์ฟเวอร์ | แปรผัน | WWW-รับรองความถูกต้อง

  • อายุคือเวลาเป็นวินาทีที่สร้างข้อความบนเซิร์ฟเวอร์
  • เอนทิตี ETag MD5 เพื่อตรวจสอบการเปลี่ยนแปลงและการแก้ไขการตอบสนอง
  • ตำแหน่งใช้สำหรับการเปลี่ยนเส้นทางและมี URL ใหม่
  • เซิร์ฟเวอร์ระบุเซิร์ฟเวอร์ที่สร้างการตอบสนอง

ฉันคิดว่านั่นเพียงพอแล้วสำหรับทฤษฎีวันนี้ ตอนนี้เรามาดูเครื่องมือที่เราสามารถใช้เพื่อตรวจสอบข้อความ HTTP กัน

เครื่องมือสำหรับตรวจจับการรับส่งข้อมูล HTTP

มีเครื่องมือตรวจสอบมากมาย การรับส่งข้อมูล HTTP- นี่คือบางส่วนของพวกเขา:

เครื่องมือที่ใช้กันมากที่สุดคือ Chrome Developers Tools:

ถ้าเราพูดถึงดีบักเกอร์ คุณสามารถใช้ Fiddler:

ในการตรวจสอบการรับส่งข้อมูล HTTP คุณจะต้องมี curl, tcpdump และ tshark

ไลบรารีสำหรับการทำงานกับ HTTP - jQuery AJAX

เนื่องจาก jQuery ได้รับความนิยมมาก จึงยังมีเครื่องมือสำหรับจัดการการตอบสนอง HTTP สำหรับคำขอ AJAX อีกด้วย ข้อมูลเกี่ยวกับ jQuery.ajax (การตั้งค่า) สามารถพบได้บนเว็บไซต์อย่างเป็นทางการ

ด้วยการส่งวัตถุการตั้งค่าและใช้ฟังก์ชันการโทรกลับ beforeSend เราสามารถตั้งค่าส่วนหัวของคำขอโดยใช้เมธอด setRequestHeader()

$.ajax(( url: "http://www.articles.com/latest", พิมพ์: "GET", beforeSend: function (jqXHR) ( jqXHR.setRequestHeader("Accepts-Language", "en-US,en "); ) ));

หากคุณต้องการประมวลผลสถานะคำขอ คุณสามารถทำได้ดังนี้:

$.ajax(( statusCode: ( 404: function() ( alert("ไม่พบหน้า"); ) ) ));

บรรทัดล่าง

นี่คือทัวร์ชมพื้นฐานของโปรโตคอล HTTP ส่วนที่สองจะมีข้อเท็จจริงและตัวอย่างที่น่าสนใจมากยิ่งขึ้น

ภาษา ฯลฯ เป็นเพราะความสามารถในการระบุวิธีการเข้ารหัสข้อความที่ไคลเอนต์และเซิร์ฟเวอร์สามารถแลกเปลี่ยนข้อมูลไบนารีได้แม้ว่า โปรโตคอลนี้เป็นข้อความ

ข้อดี

ความเรียบง่าย

โปรโตคอลนี้ใช้งานง่ายมากจนทำให้ง่ายต่อการสร้างแอปพลิเคชันไคลเอนต์

ความสามารถในการขยาย

คุณสามารถขยายขีดความสามารถของโปรโตคอลได้อย่างง่ายดายโดยการนำส่วนหัวของคุณเองไปใช้ในขณะที่ยังคงรักษาความเข้ากันได้กับไคลเอนต์และเซิร์ฟเวอร์อื่นๆ พวกเขาจะเพิกเฉยต่อส่วนหัวที่พวกเขาไม่รู้จัก แต่ในขณะเดียวกันคุณก็สามารถรับฟังก์ชันการทำงานที่คุณต้องการเมื่อแก้ไขปัญหาเฉพาะ

ความชุก

เมื่อเลือกโปรโตคอล HTTP เพื่อแก้ไขปัญหาเฉพาะ ปัจจัยสำคัญคือความชุกของมัน ด้วยเหตุนี้จึงมีเอกสารประกอบมากมายเกี่ยวกับโปรโตคอลในหลายภาษาของโลก, การรวมเครื่องมือการพัฒนาที่ใช้งานง่ายไว้ใน IDE ยอดนิยม, รองรับโปรโตคอลในฐานะไคลเอนต์ในหลาย ๆ โปรแกรม, และตัวเลือกมากมายสำหรับบริษัทโฮสติ้งที่มีเซิร์ฟเวอร์ HTTP

ข้อเสียและปัญหา

ข้อความขนาดใหญ่

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

ขาด "การนำทาง"

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

ไม่มีการสนับสนุนการจัดจำหน่าย

โปรโตคอล HTTP ได้รับการพัฒนาขึ้นเพื่อแก้ไขปัญหาทั่วไปในชีวิตประจำวัน โดยที่เวลาในการประมวลผลคำขอควรใช้เวลาเพียงเล็กน้อยหรือไม่นำมาพิจารณาเลย แต่ใน ใช้ในอุตสาหกรรมด้วยการใช้คอมพิวเตอร์แบบกระจายและโหลดสูงบนเซิร์ฟเวอร์ โปรโตคอล HTTP จึงไม่มีประโยชน์ ในปี 1998 W3C ได้เสนอโปรโตคอลทางเลือก HTTP-NG(ภาษาอังกฤษ) HTTP รุ่นต่อไป) สำหรับ ทดแทนโดยสมบูรณ์ล้าสมัยโดยมุ่งเน้นไปที่พื้นที่นี้ แนวคิดเกี่ยวกับความจำเป็นนี้ได้รับการสนับสนุนจากผู้เชี่ยวชาญหลักในด้านการคำนวณแบบกระจาย แต่โปรโตคอลนี้ยังอยู่ในขั้นตอนการพัฒนา

ซอฟต์แวร์

ทั้งหมด ซอฟต์แวร์สำหรับการทำงานกับโปรโตคอล HTTP แบ่งออกเป็น 3 ประเภทใหญ่ ๆ ได้แก่

  • เซิร์ฟเวอร์ในฐานะผู้ให้บริการหลักในการให้บริการจัดเก็บและประมวลผลข้อมูล (การประมวลผลคำขอ)
  • ลูกค้า- ผู้ใช้บริการเซิร์ฟเวอร์ปลายทาง (ส่งคำขอ)
  • หนังสือมอบฉันทะเพื่อให้บริการขนส่ง

เพื่อแยกแยะเซิร์ฟเวอร์ปลายทางจากพร็อกซีใน เอกสารอย่างเป็นทางการคำที่ใช้ เซิร์ฟเวอร์ต้นทาง(ภาษาอังกฤษ) เซิร์ฟเวอร์ต้นทาง- แน่นอนว่า ผลิตภัณฑ์ซอฟต์แวร์เดียวกันสามารถทำหน้าที่ของไคลเอ็นต์ เซิร์ฟเวอร์ หรือตัวกลางไปพร้อมๆ กัน ขึ้นอยู่กับงานที่ได้รับมอบหมาย ข้อมูลจำเพาะโปรโตคอล HTTP ให้รายละเอียดลักษณะการทำงานสำหรับแต่ละบทบาทเหล่านี้

ลูกค้า

เดิมโปรโตคอล HTTP ได้รับการพัฒนาสำหรับการเข้าถึงเอกสารไฮเปอร์เท็กซ์บนเวิลด์ไวด์เว็บ ดังนั้นการใช้งานไคลเอนต์หลักคือ เบราว์เซอร์(ตัวแทนผู้ใช้) เบราว์เซอร์ยอดนิยม(วี ลำดับตัวอักษร): โครเมียม, อินเทอร์เน็ตเอ็กซ์พลอเรอร์, มอซซิลา ไฟร์ฟอกซ์,ซาฟารี.

ดูเพิ่มเติมที่: รายการเบราว์เซอร์และการเปรียบเทียบเบราว์เซอร์

ในการดูเนื้อหาที่บันทึกไว้ของไซต์บนคอมพิวเตอร์โดยไม่ต้องเชื่อมต่ออินเทอร์เน็ตจึงถูกประดิษฐ์ขึ้น เบราว์เซอร์ออฟไลน์- ในบรรดาผู้มีชื่อเสียง อนุญาตให้คุณดาวน์โหลดไฟล์ที่ระบุได้ตลอดเวลาหลังจากสูญเสียการเชื่อมต่อกับเว็บเซิร์ฟเวอร์ โปรแกรมยอดนิยมบน Windows OS ได้แก่ Download Master, Free Download Manager และ ReGet ใน KGet และ d4x (ตัวดาวน์โหลดสำหรับ X) มากมาย ผู้ใช้ลินุกซ์พวกเขาชอบใช้ NASA World Wind มากกว่า และก็ใช้ HTTP ด้วย

โปรแกรมมักใช้โปรโตคอล HTTP เพื่อดาวน์โหลดการอัพเดต

โปรแกรมโรบอตทั้งหมดถูกใช้ในเครื่องมือค้นหาทางอินเทอร์เน็ต ในหมู่พวกเขา เว็บแมงมุม(โปรแกรมรวบรวมข้อมูล) ที่ติดตามไฮเปอร์ลิงก์ รวบรวมฐานข้อมูลทรัพยากรเซิร์ฟเวอร์ และบันทึกเนื้อหาเพื่อการวิเคราะห์เพิ่มเติม

ดูเพิ่มเติมที่: รายชื่อเครื่องมือค้นหา, Internet Archive

เซิร์ฟเวอร์ต้นทาง

การใช้งานหลัก: ข้อมูลอินเทอร์เน็ตบริการ (IIS), nginx

ดูเพิ่มเติมที่: รายชื่อเว็บเซิร์ฟเวอร์

พร็อกซีเซิร์ฟเวอร์

การใช้งานหลัก: UserGate, Multiproxy, Naviscope, รายการเว็บเซิร์ฟเวอร์

ประวัติความเป็นมาของการพัฒนา

HTTP/0.9

HTTP/1.0

HTTP/1.1

โปรโตคอลเวอร์ชันปัจจุบันถูกนำมาใช้ในเดือนมิถุนายน สิ่งใหม่ในเวอร์ชันนี้คือโหมด "การเชื่อมต่อถาวร": เส้นสตาร์ท) - กำหนดประเภทของข้อความ

  • หัวเรื่อง ส่วนหัว) - กำหนดลักษณะของเนื้อหาข้อความ พารามิเตอร์การส่งข้อมูล และข้อมูลอื่น ๆ
  • เนื้อความของข้อความ เนื้อความของข้อความ) - ข้อมูลข้อความเอง ต้องแยกออกจากส่วนหัวด้วยบรรทัดว่าง
  • ส่วนหัวและเนื้อหาของข้อความอาจหายไป แต่บรรทัดเริ่มต้นหายไป องค์ประกอบบังคับเนื่องจากเป็นการบ่งชี้ประเภทคำขอ/การตอบกลับ ข้อยกเว้นคือเวอร์ชัน 0.9 ของโปรโตคอล ซึ่งข้อความคำขอมีเพียงบรรทัดเริ่มต้น และข้อความตอบกลับมีเพียงเนื้อหาของข้อความเท่านั้น

    เส้นสตาร์ท

    บรรทัดเริ่มต้นสำหรับคำขอและการตอบกลับแตกต่างกัน สตริงการสืบค้นมีลักษณะดังนี้:

    รับ ยูอาร์ไอ- สำหรับโปรโตคอลเวอร์ชัน 0.9. วิธี ยูอาร์ไอ HTTP/ เวอร์ชัน- สำหรับรุ่นอื่นๆ

    หากต้องการขอหน้าสำหรับบทความที่กำหนด ลูกค้าจะต้องส่งสตริง:

    รับ /wiki/Http HTTP/1.0

    บรรทัดเริ่มต้นของการตอบกลับของเซิร์ฟเวอร์มีรูปแบบดังต่อไปนี้:

    HTTP/ เวอร์ชัน รหัสสถานะ คำอธิบาย

    • เวอร์ชัน- เลขอารบิคคู่คั่นด้วยจุดตามคำร้องขอ
    • รหัสสถานะ(ภาษาอังกฤษ) รหัสสถานะ) - เลขอารบิคสามตัว รหัสสถานะจะกำหนดเนื้อหาเพิ่มเติมของข้อความและพฤติกรรมของลูกค้า
    • คำอธิบาย(ภาษาอังกฤษ) วลีเหตุผล) - คำอธิบายข้อความสั้น ๆ ของรหัสตอบกลับสำหรับผู้ใช้ ไม่ส่งผลกระทบต่อข้อความแต่อย่างใดและเป็นทางเลือก

    ตัวอย่างเช่น เซิร์ฟเวอร์ตอบกลับคำขอก่อนหน้าของเราโดยลูกค้าสำหรับหน้านี้ด้วยบรรทัด:

    HTTP/1.0 200 ตกลง

    วิธีการ

    ตัวเลือก

    ใช้เพื่อกำหนดความสามารถของเว็บเซิร์ฟเวอร์หรือพารามิเตอร์การเชื่อมต่อสำหรับทรัพยากรเฉพาะ เซิร์ฟเวอร์ควรมีส่วนหัว Allow ในการตอบกลับพร้อมรายการวิธีการที่รองรับ ส่วนหัวการตอบกลับอาจมีข้อมูลเกี่ยวกับส่วนขยายที่รองรับ

    คาดว่าคำขอของลูกค้าอาจมีเนื้อหาข้อความเพื่อระบุข้อมูลที่สนใจ ขณะนี้ยังไม่ได้กำหนดรูปแบบของร่างกายและขั้นตอนการทำงาน เซิร์ฟเวอร์ควรเพิกเฉยต่อสิ่งนี้ในตอนนี้ สถานการณ์จะคล้ายกับเนื้อหาในการตอบกลับของเซิร์ฟเวอร์

    เพื่อที่จะค้นหาความสามารถของเซิร์ฟเวอร์ทั้งหมด ไคลเอนต์จะต้องระบุเครื่องหมายดอกจัน - “*” ใน URI ตัวเลือก * คำขอ HTTP/1.1 ยังสามารถใช้เพื่อตรวจสอบสภาพของเซิร์ฟเวอร์ (คล้ายกับการส่ง Ping) และเพื่อทดสอบว่าเซิร์ฟเวอร์รองรับ HTTP เวอร์ชัน 1.1 หรือไม่

    ผลลัพธ์ของวิธีนี้ไม่ได้ถูกแคชไว้

    รับ

    ใช้เพื่อขอเนื้อหา ทรัพยากรที่ระบุ- คุณยังสามารถเริ่มกระบวนการโดยใช้วิธี GET ได้อีกด้วย ในกรณีนี้ ข้อมูลเกี่ยวกับความคืบหน้าของกระบวนการควรรวมอยู่ในเนื้อหาของข้อความตอบกลับ

    ไคลเอ็นต์อาจส่งพารามิเตอร์การดำเนินการคำขอใน URI ทรัพยากรเป้าหมายหลังเครื่องหมาย "? -
    รับ /path/resource?param1=value1¶m2=value2 HTTP/1.1

    ตามมาตรฐาน HTTP คำขอ GET ถือเป็น idempotent - การทำซ้ำคำขอ GET เดียวกันหลายครั้งควรนำไปสู่ผลลัพธ์เดียวกัน (โดยที่ทรัพยากรนั้นไม่เปลี่ยนแปลงในช่วงเวลาระหว่างคำขอ) สิ่งนี้ทำให้คุณสามารถแคชการตอบกลับได้ รับคำขอ.

    นอกจากวิธี GET ตามปกติแล้ว ยังมีความแตกต่างอีกด้วย คำขอ GET แบบมีเงื่อนไขประกอบด้วย If-Modified-Since, If-Match, If-Range และส่วนหัวที่คล้ายกัน GET บางส่วนมี Range ในคำขอ ขั้นตอนในการดำเนินการตามคำขอดังกล่าวถูกกำหนดไว้แยกต่างหากตามมาตรฐาน

    ศีรษะ

    คล้ายกับวิธี GET ยกเว้นว่าไม่มีเนื้อหาในการตอบกลับของเซิร์ฟเวอร์ โดยทั่วไปคำขอ HEAD ใช้เพื่อดึงข้อมูลเมตา ตรวจสอบการมีอยู่ของทรัพยากร (การตรวจสอบ URL) และดูว่ามีการเปลี่ยนแปลงหรือไม่นับตั้งแต่มีการเข้าถึงครั้งล่าสุด

    ส่วนหัวการตอบกลับอาจถูกแคชไว้ หากข้อมูลเมตาของทรัพยากรไม่ตรงกับข้อมูลที่เกี่ยวข้องในแคช สำเนาของทรัพยากรจะถูกทำเครื่องหมายว่าล้าสมัย

    โพสต์

    ใช้เพื่อถ่ายโอนข้อมูลผู้ใช้ไปยังทรัพยากรที่ระบุ ตัวอย่างเช่น ในบล็อก ผู้เยี่ยมชมสามารถป้อนความคิดเห็นเกี่ยวกับโพสต์ในรูปแบบ HTML หลังจากนั้นโพสต์ไปที่เซิร์ฟเวอร์และวางไว้บนเพจ ในกรณีนี้ ข้อมูลที่ส่ง (ในตัวอย่างกับบล็อก ข้อความความคิดเห็น) จะรวมอยู่ในเนื้อหาของคำขอ ในทำนองเดียวกัน ไฟล์ต่างๆ มักจะถูกอัพโหลดโดยใช้วิธี POST

    ไม่เหมือนกับวิธี GET วิธี POST ไม่ถือเป็น idempotent ซึ่งหมายความว่าการทำซ้ำคำขอ POST เดียวกันหลายครั้งอาจให้ผลลัพธ์ที่แตกต่างกัน (เช่น หลังจากส่งความคิดเห็นแต่ละรายการแล้ว สำเนาของความคิดเห็นนั้นหนึ่งชุดจะปรากฏขึ้น)

    หากผลการดำเนินการเป็น 200 (ตกลง) และ 204 (ไม่มีเนื้อหา) ควรรวมข้อความเกี่ยวกับผลลัพธ์ของคำขอไว้ในเนื้อหาการตอบกลับ หากมีการสร้างทรัพยากร เซิร์ฟเวอร์ควรส่งคืนการตอบสนอง 201 (สร้างแล้ว) พร้อมด้วย URI ของทรัพยากรใหม่ในส่วนหัวตำแหน่ง

    ข้อความตอบกลับของเซิร์ฟเวอร์ไปยังวิธี POST ไม่ได้ถูกแคชไว้

    ใส่

    ใช้เพื่อโหลดเนื้อหาคำขอไปยัง URI ที่ระบุในคำขอ หากไม่มีทรัพยากรอยู่ที่ URI ที่กำหนด เซิร์ฟเวอร์จะสร้างทรัพยากรดังกล่าวและส่งกลับสถานะ 201 (สร้างแล้ว) หากทรัพยากรมีการเปลี่ยนแปลง เซิร์ฟเวอร์จะส่งกลับ 200 (Ok) หรือ 204 (ไม่มีเนื้อหา) เซิร์ฟเวอร์จะต้องไม่เพิกเฉยต่อเนื้อหาที่ไม่ถูกต้อง - ส่วนหัวที่ส่งโดยไคลเอ็นต์พร้อมกับข้อความ หากไม่รู้จักส่วนหัวใดๆ เหล่านี้หรือไม่ถูกต้องภายใต้เงื่อนไขปัจจุบัน จะต้องส่งคืนรหัสข้อผิดพลาด 501 (ไม่ได้ใช้งาน)

    ความแตกต่างพื้นฐานระหว่างวิธี POST และ PUT คือความเข้าใจในวัตถุประสงค์ของ URI ทรัพยากร วิธีการ POST ถือว่า URI ที่ระบุจะประมวลผลเนื้อหาที่ส่งโดยไคลเอ็นต์ เมื่อใช้ PUT ลูกค้าจะถือว่าเนื้อหาที่กำลังดาวน์โหลดตรงกับทรัพยากรที่อยู่ใน URI ที่กำหนด

    ข้อความตอบกลับของเซิร์ฟเวอร์ไปยังวิธี PUT จะไม่ถูกแคช

    แพตช์

    คล้ายกับ PUT แต่ใช้กับส่วนของทรัพยากรเท่านั้น

    ลบ

    ลบทรัพยากรที่ระบุ

    ติดตาม

    ส่งคืนคำขอที่ได้รับเพื่อให้ไคลเอ็นต์สามารถดูว่าเซิร์ฟเวอร์ระดับกลางใดเพิ่มหรือเปลี่ยนแปลงคำขอ

    เชื่อมต่อ

    สำหรับใช้กับพร็อกซีเซิร์ฟเวอร์ที่สามารถสลับเป็นโหมดทันเนลได้แบบไดนามิก

    ลิงค์

    สร้างการเชื่อมต่อระหว่างทรัพยากรที่ระบุกับทรัพยากรอื่นๆ

    ยกเลิกการเชื่อมโยง

    ลบการเชื่อมต่อของทรัพยากรที่ระบุกับผู้อื่น

    รหัสสถานะ

    รหัสสถานะเป็นส่วนหนึ่งของบรรทัดแรกของการตอบกลับของเซิร์ฟเวอร์ แสดงถึงจำนวนเต็มของเลขอารบิค 3 ตัว ตัวเลขตัวแรกหมายถึง คลาสเงื่อนไข- โดยปกติรหัสตอบกลับจะตามด้วยวลีอธิบายในภาษาอังกฤษคั่นด้วยช่องว่าง ซึ่งระบุเหตุผลของการตอบกลับนี้โดยเฉพาะ

    ลูกค้าเรียนรู้จากโค้ดตอบกลับเกี่ยวกับผลลัพธ์ของคำขอและกำหนดว่าจะดำเนินการใดต่อไป ชุดรหัสสถานะเป็นมาตรฐานและทั้งหมดอธิบายไว้ในเอกสาร IETF ที่เกี่ยวข้อง ลูกค้าอาจไม่ทราบรหัสสถานะทั้งหมด แต่ต้องตอบสนองตามคลาสของรหัส

    ปัจจุบันมีรหัสสถานะอยู่ห้าคลาส

    1xx ข้อมูล (รัสเซีย) ข้อมูล) คลาสนี้ประกอบด้วยรหัสที่แจ้งเกี่ยวกับกระบวนการถ่ายโอน ใน HTTP/1.0 ควรละเว้นข้อความที่มีรหัสดังกล่าว ใน HTTP/1.1 ลูกค้าจะต้องเตรียมพร้อมที่จะยอมรับข้อความประเภทนี้เป็นการตอบกลับตามปกติ แต่ไม่จำเป็นต้องส่งสิ่งใดไปยังเซิร์ฟเวอร์ ข้อความที่ส่งมาจากเซิร์ฟเวอร์จะมีเพียงบรรทัดเริ่มต้นของการตอบกลับ และหากจำเป็น ก็จะมีฟิลด์ส่วนหัวสำหรับการตอบกลับบางส่วนด้วย พร็อกซีเซิร์ฟเวอร์จะต้องส่งข้อความดังกล่าวเพิ่มเติมจากเซิร์ฟเวอร์ไปยังไคลเอนต์ ความสำเร็จ 2xx (รัสเซีย)สำเร็จแล้ว ) ข้อความของชั้นเรียนนี้ แจ้งเกี่ยวกับกรณีที่การยอมรับและดำเนินการตามคำขอของลูกค้าสำเร็จ เซิร์ฟเวอร์อาจส่งส่วนหัวและเนื้อหาของข้อความ ทั้งนี้ขึ้นอยู่กับสถานะ ) รหัสสถานะคลาส 3xx แจ้งให้ไคลเอ็นต์ทราบว่าจะต้องส่งคำขอถัดไปไปยัง URI อื่นเพื่อให้การดำเนินการสำเร็จ ในกรณีส่วนใหญ่ ที่อยู่ใหม่จะถูกระบุในช่องตำแหน่งของส่วนหัว ในกรณีนี้ ลูกค้าต้องทำการเปลี่ยนแปลงอัตโนมัติตามกฎ (jarl. เปลี่ยนเส้นทาง- โปรดทราบว่าเมื่อคุณเข้าถึงทรัพยากรถัดไป คุณสามารถรับการตอบกลับจากคลาสรหัสเดียวกันได้ อาจมีการเปลี่ยนเส้นทางเป็นสายยาวซึ่งหากดำเนินการโดยอัตโนมัติอาจสร้างภาระให้กับอุปกรณ์มากเกินไป ดังนั้นผู้พัฒนาโปรโตคอล HTTP ขอแนะนำอย่างยิ่งว่าหลังจากการตอบกลับครั้งที่สองติดต่อกัน คุณต้องขอการยืนยันการเปลี่ยนเส้นทางจากผู้ใช้ (ก่อนหน้านี้แนะนำหลังจากวันที่ 5) ไคลเอนต์มีหน้าที่รับผิดชอบในการตรวจสอบสิ่งนี้ เนื่องจากเซิร์ฟเวอร์ปัจจุบันสามารถเปลี่ยนเส้นทางไคลเอนต์ไปยังทรัพยากรบนเซิร์ฟเวอร์อื่นได้ ไคลเอ็นต์ยังต้องป้องกันการเปลี่ยนเส้นทางแบบวงกลมด้วย ข้อผิดพลาดไคลเอนต์ 4xx (รัสเซีย)ข้อผิดพลาดของไคลเอ็นต์ ) คลาสรหัส 4xx มีวัตถุประสงค์เพื่อระบุข้อผิดพลาดในฝั่งไคลเอ็นต์ เมื่อใช้วิธีการทั้งหมดยกเว้น HEAD เซิร์ฟเวอร์จะต้องส่งคืนคำอธิบายไฮเปอร์เท็กซ์ให้กับผู้ใช้ในเนื้อหาของข้อความเพื่อจดจำค่าของรหัส 400 ถึง 417 มีเทคนิคการช่วยจำที่แสดงให้เห็น 5xx Server Error (Russian.

    ข้อผิดพลาดของเซิร์ฟเวอร์

    ) รหัส 5xx ได้รับการจัดสรรสำหรับกรณีที่การดำเนินการไม่สำเร็จเนื่องจากข้อผิดพลาดของเซิร์ฟเวอร์ สำหรับทุกสถานการณ์นอกเหนือจากการใช้เมธอด HEAD เซิร์ฟเวอร์จะต้องรวมคำอธิบายที่ไคลเอ็นต์จะแสดงต่อผู้ใช้ไว้ในเนื้อหาของข้อความ

    หัวเรื่อง

    เนื้อความของข้อความ

    ตัวอย่างกล่องโต้ตอบ HTTP

    คำขอ GET ปกติ คำขอของลูกค้า:รับ /วิกิ/

    หน้าหนังสือ

    โฮสต์ HTTP/1.1: ru.wikipedia.org ตัวแทนผู้ใช้: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5 ยอมรับ: ข้อความ/html การเชื่อมต่อ: ปิด การตอบสนองของเซิร์ฟเวอร์:

    HTTP/1.0 200 ตกลง วันที่: วันพุธที่ 11 กุมภาพันธ์ 2552 เวลา 11:20:59 น. GMT เซิร์ฟเวอร์: Apache X-Powered-By: PHP/5.2.4-2ubuntu5wm1 แก้ไขล่าสุด: วันพุธที่ 11 กุมภาพันธ์ 2552 11:20:59 GMT เนื้อหา -ภาษา: ru ประเภทเนื้อหา: text/html; charset=utf-8 ความยาวเนื้อหา: 1234 การเชื่อมต่อ: ปิด

    (ต่อไปนี้เป็นหน้าที่ร้องขอใน

    เปลี่ยนเส้นทางวันที่: พฤหัสบดี 19 ก.พ. 2552 เวลา 11:08:01 น. GMT เซิร์ฟเวอร์: Apache/2.2.4 ประเภทเนื้อหา: text/html; charset=windows-1251 ความยาวเนื้อหา: 110 (บรรทัดว่าง) คลิกที่นี่

    คุณสามารถระบุแฟรกเมนต์ในส่วนหัว Location ได้ดังตัวอย่างนี้ เบราว์เซอร์ไม่ได้รวมส่วนย่อยไว้ในคำขอ เนื่องจากสนใจในเอกสารทั้งหมด แต่จะเลื่อนหน้าไปยังส่วน "ผู้ติดต่อ" โดยอัตโนมัติทันทีที่โหลด เอกสาร HTML สั้น ๆ พร้อมลิงก์ก็ถูกวางไว้ในเนื้อหาของการตอบกลับด้วยความช่วยเหลือซึ่งผู้เยี่ยมชมจะถูกพาไป หน้า Landing Pageหากเบราว์เซอร์ไม่สลับไปโดยอัตโนมัติ ส่วนหัว Content-Type มีลักษณะเฉพาะของคำอธิบาย HTML นี้ ไม่ใช่เอกสารที่อยู่ที่ URL เป้าหมาย

    สมมติว่าบริษัทเดียวกันนี้ Example Corp. มีสำนักงานภูมิภาคหลายแห่งทั่วโลก และสำหรับสำนักงานตัวแทนแต่ละแห่ง พวกเขาจะมีเว็บไซต์ที่มี ccTLD ที่เกี่ยวข้อง ขอ หน้าแรกเว็บไซต์หลัก example.com อาจมีลักษณะดังนี้:

    / HTTP/1.1 โฮสต์: www.example.com ตัวแทนผู้ใช้: MyLonelyBrowser/5.0 ยอมรับ: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 ยอมรับ-ภาษา: ru ,en-us;q=0.7,en;q=0.3 ยอมรับ-ชุดอักขระ: windows-1251,utf-8;q=0.7,*;q=0.7

    เซิร์ฟเวอร์คำนึงถึงส่วนหัว Accept-Language และสร้างการตอบกลับพร้อมการเปลี่ยนเส้นทางชั่วคราวไปที่ เซิร์ฟเวอร์รัสเซีย example.ru ซึ่งระบุที่อยู่ในส่วนหัวของตำแหน่ง:

    HTTP/1.x 302 พบ ตำแหน่ง: http://www.example.ru/การควบคุมแคช: ส่วนตัว วันที่: พฤหัสบดี 19 ก.พ. 2552 เวลา 11:08:01 น. GMT เซิร์ฟเวอร์: Apache/2.2.6 ประเภทเนื้อหา: ข้อความ/html; charset=windows-1251 ความยาวเนื้อหา: 82 (บรรทัดว่าง) บริษัท ตัวอย่าง รัสเซีย

    สังเกตส่วนหัว Cache-Control ค่า "ส่วนตัว" จะบอกเซิร์ฟเวอร์อื่น (ส่วนใหญ่เป็นพร็อกซี) ว่าสามารถแคชการตอบสนองบนฝั่งไคลเอ็นต์ได้ มิฉะนั้น อาจเป็นไปได้ว่าผู้มาเยือนที่มาจากประเทศอื่นมักจะไปที่สำนักงานตัวแทนอื่นเสมอ

    สำหรับการเปลี่ยนเส้นทาง ยังใช้รหัสตอบกลับ (ดูอื่นๆ) และ (การเปลี่ยนเส้นทางชั่วคราว)

    การดาวน์โหลดต่อและการดาวน์โหลดที่ไม่เป็นชิ้นเป็นอัน

    สมมติว่าองค์กรสมมติเสนอให้ดาวน์โหลดวิดีโอการประชุมที่ผ่านมาจากเว็บไซต์ที่ http://example.org/conf-2009.avi โดยมีปริมาณประมาณ 160 MB มาดูกันว่าไฟล์นี้ถูกดาวน์โหลดอย่างไรในกรณีที่เกิดความล้มเหลวและวิธีที่ตัวจัดการการดาวน์โหลดจะจัดระเบียบการดาวน์โหลดหลายส่วนแบบมัลติเธรด

    ในทั้งสองกรณี ลูกค้าจะทำการร้องขอครั้งแรกในลักษณะนี้:

    GET /conf-2009.avi HTTP/1.0 โฮสต์: example.org ยอมรับ: */* User-Agent: Mozilla/4.0 (เข้ากันได้; MSIE 5.0; Windows 98) ผู้อ้างอิง: http://example.org/

    ส่วนหัวผู้อ้างอิงระบุว่ามีการร้องขอไฟล์จากหน้าแรกของไซต์ ตัวจัดการการดาวน์โหลดมักจะระบุสิ่งนี้เพื่อจำลองการเปลี่ยนแปลงจากหน้าเว็บไซต์ หากไม่มีสิ่งนี้ เซิร์ฟเวอร์จะสามารถตอบสนอง (ห้ามการเข้าถึง) หากคำขอจากไซต์อื่นไม่ได้รับอนุญาต ในกรณีของเรา เซิร์ฟเวอร์ตอบกลับสำเร็จ:

    HTTP/1.1 200 ตกลง วันที่: พฤหัสบดี 19 กุมภาพันธ์ 2552 12:27:04 GMT เซิร์ฟเวอร์: Apache/2.2.3 แก้ไขล่าสุด: พุธ 18 มิถุนายน 2546 16:05:58 GMT ETag: เนื้อหา "56d-9989200-1132c580" - ประเภท: วิดีโอ/x-msvideo ความยาวเนื้อหา: 160993792 ยอมรับ-ช่วง: ไบต์การเชื่อมต่อ: ปิด (บรรทัดว่าง) (เนื้อหาไบนารีของไฟล์ทั้งหมด)

    ส่วนหัว Accept-Ranges แจ้งให้ไคลเอ็นต์ทราบว่าสามารถขอแฟรกเมนต์จากเซิร์ฟเวอร์ได้ โดยระบุออฟเซ็ตจากจุดเริ่มต้นของไฟล์ในหน่วยไบต์ หากไม่มีส่วนหัวนี้ ไคลเอ็นต์สามารถเตือนผู้ใช้ได้ว่ามีแนวโน้มว่าจะไม่สามารถดาวน์โหลดไฟล์ได้ ขึ้นอยู่กับค่าของส่วนหัวความยาวเนื้อหา ตัวจัดการการดาวน์โหลดจะแบ่งวอลุ่มทั้งหมดออกเป็นส่วนเท่าๆ กัน และขอแยกกัน เพื่อจัดระเบียบหลายๆ เธรด หากเซิร์ฟเวอร์ไม่ได้ระบุขนาด ไคลเอนต์จะไม่สามารถดำเนินการดาวน์โหลดแบบขนานได้ แต่ในเวลาเดียวกันเขาจะสามารถดาวน์โหลดไฟล์ต่อไปได้จนกว่าเซิร์ฟเวอร์จะตอบสนอง (ช่วงที่ร้องขอไม่เป็นที่พอใจ)

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

    GET /conf-2009.avi HTTP/1.0 โฮสต์: example.org ยอมรับ: */* User-Agent: Mozilla/4.0 (เข้ากันได้; MSIE 5.0; Windows 98) ช่วง: ไบต์=88080384-ผู้อ้างอิง: http://example.org/

    เซิร์ฟเวอร์ไม่จำเป็นต้องจดจำคำขอก่อนหน้านี้ว่ามาจากอะไรและมาจากใคร ดังนั้นไคลเอ็นต์จึงแทรกส่วนหัว Referer กลับเข้าไปใหม่ราวกับว่าเป็นคำขอแรกสุด ค่าที่ระบุของส่วนหัวของ Range จะบอกเซิร์ฟเวอร์ให้ "มอบเนื้อหาจากไบต์ที่ 88080384 ไปยังจุดสิ้นสุดสุด" ในเรื่องนี้ เซิร์ฟเวอร์จะส่งกลับการตอบสนองต่อไปนี้:

    HTTP/1.1 206 เนื้อหาบางส่วนวันที่: พฤหัสบดี 19 กุมภาพันธ์ 2552 12:27:08 GMT เซิร์ฟเวอร์: Apache/2.2.3 แก้ไขล่าสุด: พุธ 18 มิถุนายน 2546 16:05:58 GMT ETag: "56d-9989200-1132c580" ยอมรับ-ช่วง: ไบต์ เนื้อหา-ช่วง: ไบต์ 88080384-160993791/160993792 ความยาวของเนื้อหา: 72913408การเชื่อมต่อ: ปิด ประเภทเนื้อหา: video/x-msvideo (บรรทัดว่าง) (เนื้อหาไบนารีจาก 84 เมกะไบต์)

    ไม่จำเป็นต้องใช้ส่วนหัว Accept-Ranges ที่นี่อีกต่อไป เนื่องจากไคลเอ็นต์ทราบเกี่ยวกับความสามารถของเซิร์ฟเวอร์นี้อยู่แล้ว ลูกค้าเรียนรู้ว่ามีการส่งส่วนย่อยโดยโค้ด (เนื้อหาบางส่วน) ส่วนหัว Content-Range มีข้อมูลเกี่ยวกับส่วนนี้: หมายเลขไบต์เริ่มต้นและสิ้นสุด และหลังเครื่องหมายทับ - ขนาดรวมของไฟล์ทั้งหมดเป็นไบต์ ให้ความสนใจกับส่วนหัวของเนื้อหาความยาว - ระบุขนาดของเนื้อหาข้อความนั่นคือส่วนที่ส่ง หากเซิร์ฟเวอร์ส่งคืนแฟรกเมนต์หลายส่วน Content-Length จะมีปริมาณรวม

    ตอนนี้กลับไปที่ตัวจัดการการดาวน์โหลด เมื่อทราบขนาดรวมของไฟล์ "conf-2009.avi" โปรแกรมจะแบ่งออกเป็น 10 ส่วนเท่า ๆ กัน ผู้จัดการจะโหลดคำขอเริ่มต้นในคำขอแรก ซึ่งจะขัดจังหวะการเชื่อมต่อทันทีที่มาถึงจุดเริ่มต้นของวินาที เขาจะขอส่วนที่เหลือแยกกัน ตัวอย่างเช่น ส่วนที่ 4 จะถูกร้องขอด้วยส่วนหัวต่อไปนี้ (ส่วนหัวบางส่วนถูกละเว้น - ดูตัวอย่างเต็มด้านบน):

    รับ /conf-2009.avi HTTP/1.0 ช่วง: ไบต์=64397516-80496894

    การตอบสนองของเซิร์ฟเวอร์ในกรณีนี้จะเป็นดังนี้ (ส่วนหัวบางส่วนถูกละเว้น - ดูตัวอย่างเต็มด้านบน):

    HTTP/1.1 206 เนื้อหาบางส่วน ยอมรับ-ช่วง: ไบต์ เนื้อหา-ช่วง: ไบต์ 64397516-80496894/160993792 ความยาวเนื้อหา: 16099379 (บรรทัดว่าง) (เนื้อหาไบนารีของส่วนที่ 4)

    หากคำขอดังกล่าวถูกส่งไปยังเซิร์ฟเวอร์ที่ไม่รองรับแฟรกเมนต์ ก็จะส่งคืนการตอบกลับมาตรฐาน (OK) ดังที่แสดงไว้ตอนต้น แต่ไม่มีส่วนหัว Accept-Ranges

    ดูเพิ่มเติมที่ ช่วงไบต์ คำตอบ 406 คำตอบ 416

    กลไกโปรโตคอลพื้นฐาน

    GET บางส่วน

    HTTP อนุญาตให้คุณขอไม่ใช่เนื้อหาทั้งหมดของทรัพยากรในคราวเดียว แต่ขอเฉพาะส่วนที่ระบุเท่านั้น คำขอดังกล่าวเรียกว่า ได้รับบางส่วนความสามารถในการดำเนินการเป็นทางเลือก (แต่เป็นที่ต้องการ) สำหรับเซิร์ฟเวอร์ GET บางส่วนส่วนใหญ่จะใช้สำหรับการดำเนินการไฟล์ต่อและการดาวน์โหลดแบบขนานอย่างรวดเร็วในหลายเธรด บางโปรแกรมดาวน์โหลดส่วนหัวของไฟล์เก็บถาวร แสดงโครงสร้างภายในให้ผู้ใช้เห็น จากนั้นจึงขอแฟรกเมนต์จาก องค์ประกอบที่ระบุคลังเก็บเอกสารสำคัญ.

    ในการรับแฟรกเมนต์ ไคลเอ็นต์จะส่งคำขอไปยังเซิร์ฟเวอร์ด้วยส่วนหัวของ Range โดยระบุถึงความจำเป็น ช่วงไบต์- หากเซิร์ฟเวอร์ไม่เข้าใจคำขอบางส่วน (ละเว้นส่วนหัวของ Range) เซิร์ฟเวอร์จะส่งคืนเนื้อหาทั้งหมดพร้อมสถานะ เช่นเดียวกับ GET ทั่วไป หากสำเร็จ เซิร์ฟเวอร์จะส่งคืนการตอบกลับด้วยสถานะ 206 (เนื้อหาบางส่วน) แทนที่จะเป็นรหัส 200 รวมถึงส่วนหัวของช่วงเนื้อหาในการตอบกลับด้วย ชิ้นส่วนสามารถส่งผ่านได้สองวิธี:

    ดูเพิ่มเติม

    รับแบบมีเงื่อนไข

    การเจรจาต่อรองเนื้อหา

    การเจรจาต่อรองเนื้อหา(ภาษาอังกฤษ) การเจรจาต่อรองเนื้อหา) - กลไก การตรวจจับอัตโนมัติทรัพยากรที่จำเป็นเมื่อมีเวอร์ชันเอกสารหลายประเภท หัวเรื่องของการประสานงานไม่เพียงแต่เป็นทรัพยากรเซิร์ฟเวอร์เท่านั้น แต่ยังส่งคืนเพจพร้อมข้อความแสดงข้อผิดพลาด (ฯลฯ )

    การอนุมัติมีสองประเภทหลัก:

    • จัดการเซิร์ฟเวอร์(ภาษาอังกฤษ) ขับเคลื่อนด้วยเซิร์ฟเวอร์).
    • ขับเคลื่อนโดยลูกค้า(ภาษาอังกฤษ) ขับเคลื่อนโดยตัวแทน).

    ทั้งสองประเภทหรือแต่ละประเภทแยกกันสามารถใช้พร้อมกันได้

    ข้อกำหนดโปรโตคอลหลัก (RFC 2616) ยังเน้นถึงสิ่งที่เรียกว่า การอนุมัติที่โปร่งใส(ภาษาอังกฤษ) การเจรจาต่อรองที่โปร่งใส) เป็นตัวเลือกที่ต้องการสำหรับการรวมทั้งสองประเภทเข้าด้วยกัน กลไกหลังไม่ควรสับสนกับเทคโนโลยีอิสระ การเจรจาต่อรองเนื้อหาที่โปร่งใส (ทีซีเอ็น, รัสเซีย การเจรจาต่อรองเนื้อหาที่โปร่งใส โปรดดู RFC 2295) ซึ่งไม่ได้เป็นส่วนหนึ่งของโปรโตคอล HTTP แต่สามารถใช้ได้กับโปรโตคอลดังกล่าว ทั้งสองมีความแตกต่างอย่างมีนัยสำคัญในหลักการทำงานและความหมายของคำว่า "โปร่งใส" ( โปร่งใส- ในข้อกำหนด HTTP ความโปร่งใสหมายถึงกระบวนการไม่ปรากฏแก่ไคลเอนต์และเซิร์ฟเวอร์ และในเทคโนโลยี TCN ความโปร่งใสหมายถึงการเข้าถึงได้ รายการทั้งหมดตัวเลือกทรัพยากรสำหรับผู้เข้าร่วมทุกคนในกระบวนการจัดส่งข้อมูล

    จัดการเซิร์ฟเวอร์

    หากทรัพยากรมีหลายเวอร์ชัน เซิร์ฟเวอร์สามารถวิเคราะห์ส่วนหัวคำขอของลูกค้าเพื่อสร้างสิ่งที่เชื่อว่าเป็นเวอร์ชันที่เหมาะสมที่สุด ส่วนหัวหลักที่วิเคราะห์ ได้แก่ Accept, Accept-Charset, Accept-Encoding, Accept-Languages ​​​​และ User-Agent ขอแนะนำให้เซิร์ฟเวอร์รวมส่วนหัว Vary ในการตอบกลับโดยระบุพารามิเตอร์ที่ทำให้เนื้อหาของ URI ที่ร้องขอแตกต่างกัน

    ที่ตั้งทางภูมิศาสตร์ของลูกค้าสามารถกำหนดได้จากที่อยู่ IP ระยะไกล

    การเจรจาต่อรองที่ขับเคลื่อนด้วยเซิร์ฟเวอร์มีข้อเสียหลายประการ:

    • เซิร์ฟเวอร์จะคาดเดาว่าตัวเลือกใดเหมาะที่สุดสำหรับเท่านั้น ผู้ใช้ปลายทางแต่ไม่ทราบแน่ชัดว่าต้องการอะไรในขณะนี้ (เช่น เวอร์ชันในภาษารัสเซียหรือภาษาอังกฤษ)
    • มีการส่งส่วนหัวของกลุ่ม Accept จำนวนมาก แต่มีแหล่งข้อมูลน้อยที่มีหลายตัวเลือก ด้วยเหตุนี้อุปกรณ์จึงมีภาระมากเกินไป
    • แคชที่ใช้ร่วมกันถูกจำกัดความสามารถในการสร้างการตอบสนองแบบเดียวกันต่อคำขอที่เหมือนกันจากผู้ใช้ที่แตกต่างกัน
    • การผ่านส่วนหัวของ Accept ยังส่งผลต่อความเป็นส่วนตัวของผู้ใช้ด้วยการเปิดเผยข้อมูลบางอย่างเกี่ยวกับการตั้งค่าของผู้ใช้

    ขับเคลื่อนโดยลูกค้า

    ในกรณีนี้ ชนิดเนื้อหาจะถูกกำหนดเฉพาะในฝั่งไคลเอ็นต์เท่านั้น ในการดำเนินการนี้ เซิร์ฟเวอร์จะส่งกลับพร้อมรหัสสถานะ 300 (หลายตัวเลือก) หรือ 406 (ไม่สามารถยอมรับได้) ซึ่งเป็นรายการตัวเลือกที่ผู้ใช้เลือกตัวเลือกที่เหมาะสม การกระทบยอดที่ขับเคลื่อนโดยไคลเอ็นต์จะดีเมื่อเนื้อหาแตกต่างกันในลักษณะทั่วไป (เช่น ภาษาและการเข้ารหัส) และใช้แคชสาธารณะ ข้อเสียเปรียบหลัก: โหลดเพิ่มเติมเนื่องจากคุณต้องส่งคำขอเพิ่มเติมเพื่อรับเนื้อหาที่ต้องการ

    การอนุมัติที่โปร่งใส

    การเจรจาต่อรองนี้โปร่งใสโดยสมบูรณ์ต่อลูกค้าและเซิร์ฟเวอร์ ในกรณีนี้ มีการใช้แคชที่ใช้ร่วมกันซึ่งมีรายการตัวเลือก คล้ายกับการเจรจาต่อรองที่ขับเคลื่อนด้วยไคลเอ็นต์ หากแคชเข้าใจตัวเลือกเหล่านี้ทั้งหมด แคชจะตัดสินใจเลือกเอง เช่นเดียวกับในการเจรจาต่อรองที่ขับเคลื่อนด้วยเซิร์ฟเวอร์ ซึ่งจะช่วยลดภาระบนเซิร์ฟเวอร์ต้นทางและกำจัดคำขอเพิ่มเติมจากไคลเอนต์

    ข้อมูลจำเพาะ HTTP หลักไม่ได้อธิบายกลไกการเจรจาต่อรองที่โปร่งใสโดยละเอียด

    เนื้อหาหลายรายการ

    บทความหลัก: ลำดับชั้นที่มีการซ้อนองค์ประกอบเข้าด้วยกัน ประเภทสื่อ multipart/* ใช้เพื่อระบุเนื้อหาหลายรายการ การทำงานกับประเภทดังกล่าวดำเนินการตามกฎทั่วไปที่อธิบายไว้ใน RFC 2046 (เว้นแต่จะกำหนดเป็นอย่างอื่นโดยประเภทสื่อเฉพาะ) หากผู้รับไม่ทราบวิธีจัดการกับประเภทดังกล่าว ก็จะถือว่าประเภทนั้นเหมือนกับ multipart/mixed

    ทางฝั่งเซิร์ฟเวอร์ สามารถส่งข้อความที่มีเนื้อหาหลายรายการเพื่อตอบกลับได้ เมื่อขอทรัพยากรหลายส่วน ในกรณีนี้ จะใช้ประเภทสื่อหลายส่วน/ช่วงไบต์



    พิธีสารมาตรฐานสำหรับการถ่ายโอนข้อมูลผ่านทาง เวิลด์ไวด์เว็บ-- นี่คือ HTTP ( การถ่ายโอนไฮเปอร์เท็กซ์โปรโตคอล - โปรโตคอลการถ่ายโอนไฮเปอร์เท็กซ์) อธิบายข้อความที่สามารถแลกเปลี่ยนระหว่างไคลเอนต์และเซิร์ฟเวอร์ การโต้ตอบแต่ละครั้งประกอบด้วยคำขอ ASCII เดียวตามด้วยการตอบกลับครั้งเดียว คล้ายกับการตอบสนองมาตรฐาน RFC 822 MIME ไคลเอนต์และเซิร์ฟเวอร์ทั้งหมดต้องปฏิบัติตามโปรโตคอลนี้ มันถูกกำหนดไว้ใน RFC 2616

    การเชื่อมต่อ

    วิธีปกติสำหรับเบราว์เซอร์ในการสื่อสารกับเซิร์ฟเวอร์คือการสร้างการเชื่อมต่อ TCP กับพอร์ต 80 ของเซิร์ฟเวอร์ แม้ว่าขั้นตอนนี้จะไม่จำเป็นอย่างเป็นทางการก็ตาม คุณค่าของการใช้ TCP คือทั้งเบราว์เซอร์และเซิร์ฟเวอร์ไม่จำเป็นต้องกังวลเกี่ยวกับข้อความและการตอบรับที่สูญหาย ซ้ำ หรือยาวเกินไป ทั้งหมดนี้จัดทำโดยโปรโตคอล TCP

    ใน HTTP 1.0 หลังจากสร้างการเชื่อมต่อแล้ว คำขอหนึ่งรายการก็ถูกส่งไป โดยได้รับการตอบกลับหนึ่งรายการ หลังจากนั้น การเชื่อมต่อ TCP ถูกยกเลิก ในขณะนั้น หน้าเว็บทั่วไปประกอบด้วยข้อความ HTML ทั้งหมด และวิธีการโต้ตอบนี้ก็เพียงพอแล้ว อย่างไรก็ตาม หลายปีผ่านไป และหน้านี้เต็มไปด้วยไอคอน รูปภาพ และการตกแต่งอื่นๆ มากมาย แน่นอนว่าการตั้งค่าการเชื่อมต่อ TCP เพื่อส่งไอคอนเดียวนั้นสิ้นเปลืองและมีราคาแพงเกินไป

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

    แม้ว่า HTTP ได้รับการออกแบบมาโดยเฉพาะเพื่อใช้ในเทคโนโลยีเว็บ แต่ก็มีเจตนาทำให้กว้างเกินความจำเป็น เนื่องจากมีไว้สำหรับใช้ในอนาคตในแอปพลิเคชันเชิงวัตถุ ด้วยเหตุนี้ นอกเหนือจากการสืบค้นหน้าเว็บปกติแล้ว การดำเนินการพิเศษที่เรียกว่าเมธอดยังได้รับการพัฒนาอีกด้วย พวกเขาเป็นหนี้เทคโนโลยี SOAP แต่ละคำขอประกอบด้วยสตริง ASCII หนึ่งสตริงขึ้นไป โดยคำแรกเป็นชื่อของวิธีการที่จะเรียกใช้ วิธีการในตัวแสดงอยู่ในตารางในรูปที่ 6 นอกจากวิธีการทั่วไปเหล่านี้แล้ว วัตถุต่างๆอาจมีวิธีการเฉพาะด้วย ชื่อวิธีการต้องตรงตามตัวพิมพ์ใหญ่-เล็ก เช่น วิธีการรับมีอยู่แล้ว แต่ get ไม่มี

    รูปที่ 6 - วิธีการร้องขอ HTTP ในตัว

    เมธอด GET ร้องขอเพจจากเซิร์ฟเวอร์ (ซึ่งโดยทั่วไปคือออบเจ็กต์ แต่ในทางปฏิบัติมักเป็นเพียงไฟล์) เข้ารหัสตามมาตรฐาน MIME คำขอส่วนใหญ่ที่ส่งไปยังเซิร์ฟเวอร์คือคำขอ GET

    เมธอด HEAD เพียงแต่ขอส่วนหัวของข้อความ โดยไม่ต้องมีหน้านั้นเอง เมื่อใช้วิธีการนี้ คุณจะสามารถดูได้ว่าหน้าเว็บมีการแก้ไขครั้งล่าสุดเมื่อใดเพื่อรวบรวมข้อมูลดัชนีหรือเพียงเพื่อตรวจสอบการทำงานของ URL ที่กำหนด

    วิธี PUT ตรงกันข้ามกับวิธี GET: ไม่ได้อ่าน แต่เขียนหน้า วิธีการนี้ช่วยให้คุณสร้างชุดของเว็บเพจบนเซิร์ฟเวอร์ระยะไกลได้ เนื้อหาของคำขอประกอบด้วยหน้า อาจมีการเข้ารหัสแบบ MIME ในกรณีนี้ บรรทัดที่ตามหลังคำสั่ง PUT อาจมีส่วนหัวต่างๆ เช่น Content-Type หรือส่วนหัวการตรวจสอบสิทธิ์ เพื่อยืนยันสิทธิ์ของผู้สมัครสมาชิกในการดำเนินการที่ร้องขอ

    วิธี POST ค่อนข้างคล้ายกับวิธี PUT นอกจากนี้ยังมี URL แต่แทนที่จะแทนที่ข้อมูลที่มีอยู่ ข้อมูลใหม่จะถูก "ต่อท้าย" (ในแง่ทั่วไป) กับข้อมูลที่มีอยู่ อาจเป็นการโพสต์ข้อความในการประชุมหรือเพิ่มไฟล์ลงในกระดานข่าว BBS ในทางปฏิบัติ ทั้ง PUT และ POST ไม่ได้ใช้กันอย่างแพร่หลาย

    วิธีการ DELETE จะลบเพจอย่างไม่น่าแปลกใจ เช่นเดียวกับวิธี PUT ที่นี่ บทบาทพิเศษการรับรองความถูกต้องและการอนุญาตในการดำเนินการนี้อาจมีบทบาท แม้ว่าผู้ใช้จะได้รับอนุญาตให้ลบเพจได้ แต่ก็ไม่รับประกันว่าวิธี DELETE จะลบเพจได้ เพราะถึงแม้ผู้ใช้จะยินยอมก็ตาม เซิร์ฟเวอร์ HTTP ระยะไกลตัวไฟล์อาจได้รับการปกป้องจากการดัดแปลงหรือการเคลื่อนไหว

    วิธีการ TRACE มีไว้สำหรับการดีบัก มันบอกให้เซิร์ฟเวอร์ส่งคำขอกลับ วิธีการนี้มีประโยชน์อย่างยิ่งเมื่อคำขอไม่ได้รับการประมวลผลอย่างถูกต้อง และไคลเอนต์ต้องการทราบว่าจริงๆ แล้วคำขอใดที่เซิร์ฟเวอร์ได้รับ

    ไม่ได้ใช้วิธี CONNECT ในปัจจุบัน สงวนไว้สำหรับใช้ในอนาคต

    วิธีการ OPTIONS อนุญาตให้ไคลเอนต์ถามเซิร์ฟเวอร์เกี่ยวกับคุณสมบัติหรือคุณสมบัติของไฟล์เฉพาะ

    ในการตอบสนองต่อคำขอแต่ละรายการ ได้รับการตอบกลับจากเซิร์ฟเวอร์ที่มีบรรทัดสถานะ รวมถึงข้อมูลเพิ่มเติม (เช่น หน้าเว็บหรือบางส่วน) บรรทัดสถานะอาจมีรหัสสถานะสามหลักที่ระบุว่าคำขอสำเร็จหรือเหตุใดจึงล้มเหลว หมวดหมู่แรกมีวัตถุประสงค์เพื่อแบ่งคำตอบทั้งหมดออกเป็นห้ากลุ่มหลัก ดังแสดงในตารางในรูปที่ 7 รหัสที่ขึ้นต้นด้วย 1 Aхх) ไม่ค่อยได้ใช้ในทางปฏิบัติ รหัสที่ขึ้นต้นด้วย 2 หมายความว่าคำขอได้รับการประมวลผลเรียบร้อยแล้วและข้อมูล (หากร้องขอ) ถูกส่งไปแล้ว รหัส 3xx บอกให้ลูกค้าลองเสี่ยงโชคที่อื่น ไม่ว่าจะใช้ URL อื่นหรือแคชของตัวเอง

    รูปที่ 7 - กลุ่มของรหัสสถานะที่มีอยู่ในการตอบกลับของเซิร์ฟเวอร์

    รหัสที่ขึ้นต้นด้วย 4 หมายความว่าคำขอล้มเหลวด้วยเหตุผลบางประการที่เกี่ยวข้องกับไคลเอนต์ เช่น มีการร้องขอเพจที่ไม่มีอยู่ หรือตัวคำขอนั้นไม่ถูกต้อง สุดท้าย รหัส 5xx บ่งชี้ถึงข้อผิดพลาดของเซิร์ฟเวอร์ อาจเนื่องมาจากข้อผิดพลาดของโปรแกรมหรือการโอเวอร์โหลดชั่วคราว

    ตัวอย่างการใช้งาน HTTP

    เนื่องจาก HTTP เป็น โปรโตคอลข้อความการโต้ตอบกับเซิร์ฟเวอร์ผ่านเทอร์มินัล (ซึ่งในกรณีนี้จะทำหน้าที่ตรงกันข้ามกับเบราว์เซอร์) สามารถจัดระเบียบได้ค่อนข้างง่าย คุณเพียงแค่ต้องสร้างการเชื่อมต่อ TCP กับพอร์ต 80 ของเซิร์ฟเวอร์ ผู้อ่านจะต้องดูด้วยตัวเองว่าสคริปต์นี้ทำงานอย่างไร (ควรเรียกใช้ดีกว่า) ระบบยูนิกซ์เนื่องจากระบบอื่นบางระบบอาจไม่แสดงสถานะการเชื่อมต่อ) ดังนั้นลำดับของคำสั่งคือ:

    รูปที่ 8 - ลำดับคำสั่งโปรโตคอล HTTP

    ลำดับคำสั่งนี้สร้างการเชื่อมต่อเทลเน็ต (นั่นคือการเชื่อมต่อ TCP) ไปยังพอร์ต 80 ของเว็บเซิร์ฟเวอร์ IETF ซึ่งอยู่ที่ www.ietf.org

    ผลลัพธ์ของเซสชันการสื่อสารจะถูกบันทึกไว้ในไฟล์บันทึก ซึ่งสามารถดูได้ ถัดมาเป็นคำสั่ง GET ชื่อของไฟล์ที่ร้องขอและโปรโตคอลการถ่ายโอนจะถูกระบุ ถัดมาเป็นบรรทัดที่จำเป็นพร้อมกับส่วนหัวของโฮสต์ จำเป็นต้องมีบรรทัดว่างที่ตามมาด้วย โดยจะส่งสัญญาณไปยังเซิร์ฟเวอร์ว่าส่วนหัวของคำขอหมดลง คำสั่ง close (นี่คือคำสั่งโปรแกรม telnet) จะปิดการเชื่อมต่อ

    ไฟล์บันทึกการเชื่อมต่อ บันทึก สามารถดูได้โดยใช้ไฟล์ใดก็ได้ โปรแกรมแก้ไขข้อความ- ควรเริ่มต้นโดยประมาณตามที่แสดงในรายการในรูปที่ 8 เว้นแต่จะมีการเปลี่ยนแปลงบางอย่างบนเว็บไซต์ IETF ในช่วงเวลานี้

    รูปที่ 9 - จุดเริ่มต้นของเอาท์พุตของไฟล์ “www.ietf.org/rfc.html”

    สามบรรทัดแรกในรายการนี้ถูกสร้างขึ้น โปรแกรมเทลเน็ตไม่ใช่ไซต์ระยะไกล แต่บรรทัดที่ขึ้นต้นด้วย HTTP/1.1 นั้นเป็นการตอบสนอง IETF อยู่แล้ว ซึ่งบ่งชี้ว่าเซิร์ฟเวอร์ต้องการสื่อสารกับคุณโดยใช้โปรโตคอล HTTP/1.1 ตามด้วยชุดส่วนหัวและสุดท้ายคือเนื้อหาของไฟล์ที่ร้องขอ ส่วนหัว ETag ซึ่งเป็นตัวระบุหน้าเฉพาะที่เกี่ยวข้องกับการแคช และ X-Pad ซึ่งเป็นส่วนหัวที่ไม่ได้มาตรฐานซึ่งช่วยต่อสู้กับข้อผิดพลาดของเบราว์เซอร์

    ในยุคที่มีการใช้อินเทอร์เน็ตอย่างแพร่หลาย ไวรัสที่ติดตั้งในเบราว์เซอร์กลายเป็นเรื่องปกติโดยเฉพาะ ในแหล่งข้อมูลของเรา คุณจะพบบทความหลายบทความเกี่ยวกับโปรแกรมที่เป็นอันตรายดังกล่าว แต่ Time to Read มีความโดดเด่นในบทความเหล่านั้น ไวรัสนี้สามารถเจาะคอมพิวเตอร์ของผู้ใช้ที่ไม่ตั้งใจและทำให้เสียความสุขในการทำงานกับเบราว์เซอร์อย่างมาก ผู้ใช้จะเห็นโฆษณาเขาจะเริ่มถูกโอนไปยังเว็บไซต์ Time to Read อย่างต่อเนื่องและปัญหาอื่น ๆ อีกมากมายจะเกิดขึ้นอย่างไรก็ตามสิ่งแรกอันดับแรก

    ชอบมากที่สุด ไวรัสโทรจัน, Time to Read ทำงานง่ายๆ - แสดงให้ผู้ใช้เห็น ปริมาณสูงสุดการโฆษณาเพื่อให้ผู้สร้างโปรแกรมได้รับเงินสำหรับการออกอากาศ คลิกที่รายการและโอนไปยังไซต์พันธมิตร บ่อยครั้งที่บริการโปรโมตเว็บไซต์โดยใช้ไวรัสนั้นถูกใช้โดยทรัพยากรหรือเพจที่ฉ้อโกงซึ่งติดไวรัสที่ร้ายแรงกว่าโทรจันโฆษณา

    เมื่อไวรัส Time to Read เข้าสู่คอมพิวเตอร์ของคุณ มันจะแสดงอาการด้วย “อาการ” ต่อไปนี้:

    • โฆษณาเพิ่มเติมจะปรากฏขึ้นบนเว็บไซต์อย่างต่อเนื่อง รวมถึงแบนเนอร์ป๊อปอัปที่บดบังเนื้อหาโดยสิ้นเชิงจนกว่าคุณจะคลิกโฆษณาเหล่านั้น
    • การตั้งค่าความปลอดภัยของคอมพิวเตอร์อาจมีการเปลี่ยนแปลง ซึ่งเป็นอันตรายต่อคอมพิวเตอร์ที่มี การเชื่อมต่อแบบถาวรไปยังอินเทอร์เน็ต
    • หน้าเริ่มต้นของเบราว์เซอร์ทั้งหมดจะเปลี่ยนเป็นไซต์ Time to Read โดยอัตโนมัติ ซึ่งพยายามวางตำแหน่งตัวเองเป็นแหล่งข้อมูลการค้นหาและข่าวสาร
    • การเปลี่ยนเส้นทางอัตโนมัติไปยังทรัพยากรของบุคคลที่สาม ข้อสำคัญ: จากไซต์ที่ไม่รู้จักซึ่งไวรัส Time to Read สามารถเปลี่ยนเส้นทางผู้ใช้ได้ มีความเสี่ยงสูงในการดาวน์โหลดไวรัสอื่น ๆ ลงในคอมพิวเตอร์

    หากคุณสังเกตเห็นอาการข้างต้นบนคอมพิวเตอร์ของคุณ แสดงว่าคอมพิวเตอร์ของคุณติดไวรัส Time to Read จะต้องลบออกอย่างเร่งด่วนเพื่อหลีกเลี่ยงไม่ให้ไปมากกว่านี้ ปัญหาร้ายแรงซึ่งสามารถนำไปสู่

    หากต้องการลบไวรัส Time to Read ออกจากคอมพิวเตอร์ของคุณ คุณจะต้องดาวน์โหลดและติดตั้งสองโปรแกรมก่อน: AdwCleaner และ CCleaner แอปพลิเคชันเหล่านี้จะช่วยคุณได้ โหมดอัตโนมัติรับมือกับไวรัสและผู้ใช้จะต้องทำงานที่ง่ายที่สุดในโหมด "กำหนดเอง" เท่านั้น

    กระบวนการลบไวรัส Time to Read ออกจากคอมพิวเตอร์ของคุณมีดังนี้:

    1. ขั้นตอนแรกคือการลบทุกอย่างออกจากคอมพิวเตอร์ของคุณ ไฟล์ชั่วคราวเพื่อให้โปรแกรมไวรัสไม่สามารถกู้คืนได้หลังจากการลบ โดยไปที่ส่วนที่เหมาะสม:
    บนวินโดวส์ 7:(ไดรฟ์ระบบ):\Users\ชื่อผู้ใช้\AppData\Local\Temp บนวินโดวส์ 10:(ไดรฟ์ระบบ):\Users\Administrator\AppData\Local\Temp

    คุณไม่ควรดำเนินการอย่างเลือกสรร คุณต้องลบไฟล์ทั้งหมดที่อยู่ในโฟลเดอร์ Temp เนื่องจากแต่ละไฟล์อาจเป็นอันตรายได้


    โปรดทราบว่าคุณต้องรีเซ็ตแคชตัวแก้ไขจากโปรไฟล์ผู้ดูแลระบบ


    วิธีติดตั้งและกำหนดค่า CCleaner อย่างถูกต้อง:


    ณ จุดนี้ การลบไวรัส Time to Read ออกจากคอมพิวเตอร์ของคุณถือว่าเสร็จสิ้นแล้ว เราขอแนะนำให้คุณรีสตาร์ทคอมพิวเตอร์ก่อนที่จะเริ่มใช้เบราว์เซอร์

    ส่วนใหญ่แล้วไวรัส Time to Read จะเข้าสู่คอมพิวเตอร์ของผู้ใช้เนื่องจากความประมาทเลินเล่อของเขา คำแนะนำพื้นฐานบางประการที่จะช่วยลดความเสี่ยงที่คอมพิวเตอร์ของคุณติดไวรัสโทรจันนี้ได้อย่างมาก:

    • ดาวน์โหลดโปรแกรมบนอินเทอร์เน็ตจากเว็บไซต์ที่เชื่อถือได้เท่านั้น หากแอปพลิเคชันเผยแพร่อย่างเสรี จะเป็นการดีกว่าถ้าดาวน์โหลดจากเว็บไซต์ของนักพัฒนา
    • เมื่อติดตั้งโปรแกรม ให้ใส่ใจกับ "เครื่องหมายถูก" ทั้งหมดในโปรแกรมติดตั้ง มักจะอยู่ภายใต้ " การติดตั้งเต็มรูปแบบโปรแกรม" นักพัฒนาเข้าใจการติดตั้งแอปพลิเคชันด้วยซอฟต์แวร์พันธมิตรซึ่งอาจแพร่ระบาดได้ เราขอแนะนำให้คุณทำความคุ้นเคยด้วย ข้อตกลงผู้ใช้ซึ่งอาจบ่งชี้ว่าโดยค่าเริ่มต้นโปรแกรมพันธมิตรนี้หรือโปรแกรมนั้นจะถูกติดตั้งบนคอมพิวเตอร์
    • อย่าดาวน์โหลดโปรแกรมจากอินเทอร์เน็ตจากนักพัฒนาที่ไม่รู้จักซึ่งมีฟังก์ชันการทำงานที่น่าทึ่ง

    ด้วยการปฏิบัติตามกฎง่ายๆ ที่อธิบายไว้ข้างต้น คุณสามารถลดความเสี่ยงที่คอมพิวเตอร์ของคุณติดไวรัส Time to Read ซึ่งอาจทำให้เกิดปัญหาได้อย่างมาก

    ข้อมูลทั้งหมดภายในเทคโนโลยีเว็บจะถูกส่งผ่านโปรโตคอล HTTP(โปรโตคอลการถ่ายโอนไฮเปอร์เท็กซ์) ข้อยกเว้นคือการแลกเปลี่ยนโดยใช้การเขียนโปรแกรม Java หรือการแลกเปลี่ยนจากแอปพลิเคชันปลั๊กอิน เมื่อพิจารณาถึงปริมาณการรับส่งข้อมูลจริงที่ส่งโดยเป็นส่วนหนึ่งของการแลกเปลี่ยนเว็บผ่าน HTTP เราจะพิจารณาเฉพาะโปรโตคอลนี้เท่านั้น ในการทำเช่นนั้น เราจะพิจารณาคำถามต่างๆ เช่น:

    โครงสร้างข้อความทั่วไป

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

    ส่วนหัวประกอบด้วยข้อมูลบริการที่จำเป็นในการประมวลผลเนื้อหาข้อความหรือควบคุมการแลกเปลี่ยน ส่วนหัวประกอบด้วยคำสั่งส่วนหัว ซึ่งโดยปกติจะเขียนแต่ละรายการขึ้นบรรทัดใหม่

    เนื้อหาข้อความเป็นทางเลือก แต่ส่วนหัวของข้อความเป็นตัวเลือก อาจมีข้อมูลข้อความ กราฟิก เสียง หรือวิดีโอ

    ด้านล่างนี้คือคำขอ HTTP:

    GET / HTTP/1.0 ยอมรับ: image/jpeg [บรรทัดว่าง]

    และการตอบสนอง:

    HTTP/1.0 200 ตกลง วันที่: ศุกร์ 24 กรกฎาคม 1998 21:30:51 GMT เซิร์ฟเวอร์: Apache/1.2.5 ประเภทเนื้อหา: ข้อความ/html ความยาวเนื้อหา: 21345 [บรรทัดว่าง]บริบทของหน้า

    ข้อความ "บรรทัดว่าง" เป็นเพียงการระบุถึงการมีอยู่ของบรรทัดว่างที่แยกส่วนหัวของข้อความ HTTP ออกจากเนื้อหา

    เซิร์ฟเวอร์ที่ได้รับการร้องขอจากไคลเอนต์จะแปลงส่วนหนึ่งของข้อมูลส่วนหัวคำขอ HTTP เป็น ตัวแปรสภาพแวดล้อมซึ่งพร้อมสำหรับการวิเคราะห์ด้วยสคริปต์ CGI หากคำขอมีเนื้อหา สคริปต์จะพร้อมใช้งานเนื้อหาดังกล่าวผ่านสตรีมอินพุตมาตรฐาน

    วิธีการเข้าถึง

    คำสั่งที่สำคัญที่สุดของคำขอ HTTP คือวิธีการเข้าถึง มันถูกระบุเป็นคำแรกในบรรทัดแรกของแบบสอบถาม ในตัวอย่างของเรา นี่คือ GET มีวิธีการเข้าถึงหลักสี่วิธี:

    นอกเหนือจากสี่วิธีนี้แล้ว ยังมีวิธีการเข้าถึงเพิ่มเติมอีกประมาณห้าวิธี แต่ในทางปฏิบัติไม่ค่อยได้นำมาใช้

    วิธีการรับ

    ไคลเอนต์ใช้เมธอด GET เมื่อทำการร้องขอไปยังเซิร์ฟเวอร์ตามค่าเริ่มต้น ด้วยวิธีนี้ ไคลเอ็นต์จะสื่อสารที่อยู่ทรัพยากร (URL) ที่ต้องการรับ เวอร์ชันโปรโตคอล HTTP ประเภทเอกสาร MIME ที่สนับสนุน และเวอร์ชันและชื่อของซอฟต์แวร์ไคลเอ็นต์ พารามิเตอร์ทั้งหมดเหล่านี้ระบุไว้ในส่วนหัวคำขอ HTTP ร่างกายไม่ได้ส่งไปตามคำขอ

    ในการตอบสนอง เซิร์ฟเวอร์จะรายงานเวอร์ชันโปรโตคอล HTTP, รหัสส่งคืน, ประเภทเนื้อหาเนื้อหาข้อความ, ขนาดเนื้อหาข้อความ และคำสั่งส่วนหัว HTTP ทางเลือกอื่น ๆ จำนวนหนึ่ง ทรัพยากรนั้นโดยปกติแล้วจะเป็นหน้า HTML จะถูกส่งไปในส่วนเนื้อหาของการตอบกลับ

    วิธีการ HEAD

    วิธี HEAD ใช้เพื่อลดการแลกเปลี่ยนเมื่อทำงานบนโปรโตคอล HTTP คล้ายกับวิธี GET ยกเว้นว่าเนื้อหาข้อความไม่ได้ถูกส่งไปในการตอบกลับ วิธีการนี้ใช้เพื่อตรวจสอบเวลาแก้ไขล่าสุดของทรัพยากร เพื่อตรวจสอบวันหมดอายุของทรัพยากรที่แคชไว้ เมื่อใช้โปรแกรมสแกนทรัพยากรโลก ไวด์เว็บ- กล่าวโดยย่อคือ วิธี HEAD ได้รับการออกแบบมาเพื่อลดปริมาณข้อมูลที่ส่งผ่านเครือข่ายโดยเป็นส่วนหนึ่งของการแลกเปลี่ยน HTTP

    วิธีการโพสต์

    วิธีการ POST เป็นอีกทางเลือกหนึ่งของวิธีการ GET เมื่อแลกเปลี่ยนข้อมูลโดยใช้วิธี POST คำขอของไคลเอ็นต์จะมีเนื้อหาข้อความ HTTP เนื้อหานี้สามารถสร้างขึ้นจากข้อมูลที่ป้อนในรูปแบบ HTML หรือจากไฟล์ภายนอกที่แนบมา โดยทั่วไปการตอบกลับจะมีทั้งส่วนหัวและเนื้อหาของข้อความ HTTP เพื่อเริ่มต้นการแลกเปลี่ยนโดยใช้วิธี POST ในแอตทริบิวต์ วิธีคอนเทนเนอร์ รูปร่างควรระบุค่า "โพสต์"

    วิธีการใส่

    วิธีการ PUT ใช้ในการเผยแพร่หน้า HTML ไปยังไดเร็กทอรีเซิร์ฟเวอร์ HTTP เมื่อส่งข้อมูลจากไคลเอนต์ไปยังเซิร์ฟเวอร์ ข้อความจะมีทั้งส่วนหัวของข้อความซึ่งระบุ URL ของทรัพยากรและเนื้อหา - เนื้อหาของทรัพยากรที่โฮสต์

    โดยปกติการตอบกลับจะไม่ส่งเนื้อหาทรัพยากร แต่ส่วนหัวของข้อความมีโค้ดส่งคืนที่กำหนดว่าการจัดสรรทรัพยากรสำเร็จหรือไม่สำเร็จ

    การเพิ่มประสิทธิภาพการแลกเปลี่ยน

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

    ข้อดีคือความสามารถในการให้บริการจำนวนมากพร้อมกัน คำถามสั้น ๆ- แม้กระทั่งบน เซิร์ฟเวอร์ยอดนิยมจำนวนการเชื่อมต่อที่เปิดต้องไม่เกินร้อยเมื่อให้บริการประมาณหนึ่งล้านคำขอต่อวัน ในกรณีนี้ ไคลเอนต์หนึ่งรายสามารถเปิดการเชื่อมต่อได้สูงสุด 40 รายการพร้อมกัน ซึ่งจากมุมมองของเซิร์ฟเวอร์ก็เท่ากัน ด้วยสายการสื่อสารความเร็วสูง ทำให้สามารถบรรลุเวลาตอบสนองที่สั้นต่อคำขอของลูกค้าสำหรับทั้งเพจ (ข้อความ กราฟิก ฯลฯ)

    ข้อเสียของโครงการแลกเปลี่ยนนี้ ได้แก่ ความจำเป็นในการสร้างการเชื่อมต่อสำหรับการแลกเปลี่ยนแต่ละครั้ง และไม่สามารถรักษาเซสชั่นการทำงานกับแหล่งข้อมูลได้ เมื่อเริ่มต้นการเชื่อมต่อด้วย โปรโตคอลการขนส่ง TCP และการยกเลิกการเชื่อมต่อนี้จำเป็นต้องมีการถ่ายโอนข้อมูลบริการจำนวนมากพอสมควร การขาดการสนับสนุนเซสชันใน HTTP ทำให้การทำงานกับทรัพยากร เช่น ฐานข้อมูลหรือทรัพยากรที่ต้องมีการตรวจสอบสิทธิ์มีความซับซ้อนอย่างมาก

    เพื่อเพิ่มประสิทธิภาพจำนวนการเชื่อมต่อ TCP ที่เปิดอยู่ โปรโตคอล HTTP เวอร์ชัน 1.0 และ 1.1 จึงมีโหมด Keep-alive ในโหมดนี้ การเชื่อมต่อจะเริ่มต้นได้เพียงครั้งเดียว และสามารถดำเนินการแลกเปลี่ยน HTTP หลายครั้งได้ตามลำดับ

    หากต้องการใช้การสนับสนุนเซสชัน "คุกกี้" จะถูกเพิ่มในคำสั่งส่วนหัว HTTP ช่วยให้คุณสามารถจำลองการสนับสนุนการเชื่อมต่อเมื่อทำงานผ่านโปรโตคอล HTTP

    การเข้ารหัสคำขอ GET และ POST

    การเข้ารหัสคำขอ HTTP มีสองประเภท ขั้นพื้นฐาน - urlencodedหรือที่เรียกว่าการเข้ารหัส URL มาตรฐาน ช่องว่างจะแสดงเป็น %20 ตัวอักษรภาษารัสเซียและอักขระพิเศษส่วนใหญ่จะถูกเข้ารหัส ส่วนตัวอักษรภาษาอังกฤษและขีดกลางจะยังคงเหมือนเดิม

    วิธีที่ควรเข้ารหัสข้อมูลแบบฟอร์มเมื่อส่งระบุไว้ในแท็ก HTML:

    // วิธีการ GET พร้อมการเข้ารหัสเริ่มต้น // enctype ตั้งค่าการเข้ารหัสอย่างชัดเจน // วิธี POST พร้อมการเข้ารหัสเริ่มต้น (urlencoded เหมือนแบบฟอร์มก่อนหน้า)

    หากส่งแบบฟอร์มด้วยวิธีปกติ เบราว์เซอร์จะเข้ารหัส (urlencode) ชื่อและค่าของแต่ละช่องข้อมูล (อินพุต ฯลฯ ) และส่งแบบฟอร์มไปยังเซิร์ฟเวอร์ในรูปแบบที่เข้ารหัส

    วิธีการเข้ารหัสที่สองคือไม่มีการเข้ารหัส ตัวอย่างเช่น ไม่จำเป็นต้องมีการเข้ารหัสเพื่อถ่ายโอนไฟล์ ระบุไว้ในแบบฟอร์ม (สำหรับ POST เท่านั้น) ดังนี้

    ในกรณีนี้ ไม่มีการเข้ารหัสใดๆ เมื่อส่งข้อมูลไปยังเซิร์ฟเวอร์ และในส่วนของเซิร์ฟเวอร์ เมื่อดูที่ “Content-Type: multipart/form-data” จะเข้าใจสิ่งที่มาถึง

    การเข้ารหัสข้อมูล

    หากคุณใช้เฉพาะ UTF-8 คุณไม่จำเป็นต้องใช้ส่วนนี้

    พารามิเตอร์ GET/POST ทั้งหมดที่ส่งไปยังเซิร์ฟเวอร์ ยกเว้นในกรณีของหลายส่วน/form-data จะถูกเข้ารหัสในรูปแบบ UTF-8 ไม่ได้อยู่ในการเข้ารหัสหน้า แต่เป็น UTF-8 ดังนั้น ตัวอย่างเช่น ใน PHP จำเป็นต้องเข้ารหัสใหม่ด้วยฟังก์ชัน iconv หากจำเป็น

    $name = iconv("UTF8","CP1251",$_GET["ชื่อ"]);

    เบราว์เซอร์ได้รับการตอบกลับจากเซิร์ฟเวอร์ทุกประการในการเข้ารหัสที่ระบุในส่วนหัวการตอบสนองประเภทเนื้อหา นั่นคืออีกครั้งใน PHP เพื่อให้เบราว์เซอร์ยอมรับการตอบสนองใน windows-1251 และโดยปกติจะแสดงข้อมูลบนเพจใน windows-1251 คุณต้องส่งส่วนหัวที่เข้ารหัสด้วยโค้ด php เช่น:

    ส่วนหัว ("ประเภทเนื้อหา: ข้อความ/ธรรมดา; charset=windows-1251");

    หรือเซิร์ฟเวอร์ต้องเพิ่มส่วนหัวดังกล่าว ตัวอย่างเช่น ใน apache การเข้ารหัสจะถูกเพิ่มโดยอัตโนมัติด้วยตัวเลือก:

    # ในการกำหนดค่า Apache AddDefaultCharset windows-1251
    .