Python - ส่วนหัว HTTP
คำขอและการตอบสนองระหว่างไคลเอนต์และเซิร์ฟเวอร์เกี่ยวข้องกับส่วนหัวและเนื้อหาในข้อความ ส่วนหัวประกอบด้วยข้อมูลเฉพาะของโปรโตคอลที่ปรากฏที่จุดเริ่มต้นของข้อความดิบที่ส่งผ่านการเชื่อมต่อ TCP เนื้อหาของข้อความจะแยกออกจากส่วนหัวโดยใช้บรรทัดว่าง
ตัวอย่างส่วนหัว
ส่วนหัวในการตอบกลับ http สามารถแบ่งออกเป็นประเภทต่อไปนี้ ด้านล่างนี้คือคำอธิบายของส่วนหัวและตัวอย่าง
การควบคุมแคช
ฟิลด์ Cache-Control general-header ใช้เพื่อระบุคำสั่งที่ระบบแคชทั้งหมดต้องปฏิบัติตาม ไวยากรณ์มีดังนี้:
Cache-Control : cache-request-directive|cache-response-directive
ไคลเอ็นต์ HTTP หรือเซิร์ฟเวอร์สามารถใช้ไฟล์ Cache-controlส่วนหัวทั่วไปเพื่อระบุพารามิเตอร์สำหรับแคชหรือเพื่อขอเอกสารบางประเภทจากแคช คำสั่งการแคชถูกระบุไว้ในรายการที่คั่นด้วยเครื่องหมายจุลภาค ตัวอย่างเช่น:
Cache-control: no-cache
การเชื่อมต่อ
ฟิลด์ Connection general-header อนุญาตให้ผู้ส่งระบุอ็อพชันที่ต้องการสำหรับการเชื่อมต่อนั้น ๆ และต้องไม่สื่อสารโดยพร็อกซีผ่านการเชื่อมต่อเพิ่มเติม ต่อไปนี้เป็นไวยากรณ์ง่ายๆสำหรับการใช้ส่วนหัวการเชื่อมต่อ:
Connection : "Connection"
HTTP / 1.1 กำหนดตัวเลือกการเชื่อมต่อ "ปิด" สำหรับผู้ส่งเพื่อส่งสัญญาณว่าการเชื่อมต่อจะถูกปิดหลังจากเสร็จสิ้นการตอบสนอง ตัวอย่างเช่น:
Connection: close
โดยค่าเริ่มต้น HTTP 1.1 จะใช้การเชื่อมต่อแบบต่อเนื่องโดยที่การเชื่อมต่อจะไม่ปิดโดยอัตโนมัติหลังจากทำธุรกรรม ในทางกลับกัน HTTP 1.0 ไม่มีการเชื่อมต่อแบบถาวรตามค่าเริ่มต้น หากไคลเอนต์ 1.0 ต้องการใช้การเชื่อมต่อแบบถาวรจะใช้ไฟล์keep-alive พารามิเตอร์ดังนี้:
Connection: keep-alive
วันที่
การประทับวันที่ / เวลา HTTP ทั้งหมดต้องแสดงเป็นเวลามาตรฐานกรีนิช (GMT) โดยไม่มีข้อยกเว้น แอปพลิเคชัน HTTP ได้รับอนุญาตให้ใช้การแสดงวันที่ / เวลาสามรายการต่อไปนี้:
Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123
Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036
Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format
โอน - เข้ารหัส
Transfer-Encodingสนามส่วนหัวทั่วไปแสดงให้เห็นว่าสิ่งที่ประเภทของการเปลี่ยนแปลงได้ถูกนำไปใช้กับเนื้อหาของข้อความในการสั่งซื้อเพื่อความปลอดภัยในการถ่ายโอนระหว่างผู้ส่งและผู้รับ สิ่งนี้ไม่เหมือนกับการเข้ารหัสเนื้อหาเนื่องจากการเข้ารหัสการถ่ายโอนเป็นคุณสมบัติของข้อความไม่ใช่ของเอนทิตี - เนื้อหา ไวยากรณ์ของฟิลด์ส่วนหัว Transfer-Encoding มีดังนี้:
Transfer-Encoding: chunked
ค่า Transfer-coding ทั้งหมดไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่
อัพเกรด
อัพเกรดทั่วไปส่วนหัวช่วยให้ลูกค้าสามารถระบุสิ่งที่โปรโตคอลการสื่อสารเพิ่มเติมจะสนับสนุนและต้องการที่จะใช้ถ้าพบเซิร์ฟเวอร์มันเหมาะสมที่จะโปรโตคอลสวิทช์ ตัวอย่างเช่น:
Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11
ฟิลด์ส่วนหัวของการอัพเกรดมีไว้เพื่อจัดเตรียมกลไกง่ายๆสำหรับการเปลี่ยนจาก HTTP / 1.1 ไปเป็นโปรโตคอลอื่นที่เข้ากันไม่ได้
ผ่าน
Viaทั่วไปส่วนหัวจะต้องนำมาใช้โดยเกตเวย์และผู้รับมอบฉันทะเพื่อระบุโปรโตคอลกลางและผู้รับ ตัวอย่างเช่นข้อความคำร้องขออาจถูกส่งจากเอเจนต์ผู้ใช้ HTTP / 1.0 ไปยังรหัสพร็อกซีภายในชื่อ "fred" ซึ่งใช้ HTTP / 1.1 เพื่อส่งต่อคำขอไปยังพร็อกซีสาธารณะที่ nowhere.com ซึ่งดำเนินการตามคำขอโดย ส่งต่อไปยังเซิร์ฟเวอร์ต้นทางที่ www.ics.uci.edu คำขอที่ได้รับโดย www.ics.uci.edu จะมีฟิลด์ส่วนหัว Via ต่อไปนี้:
Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)
ฟิลด์ส่วนหัวของการอัพเกรดมีไว้เพื่อจัดเตรียมกลไกง่ายๆสำหรับการเปลี่ยนจาก HTTP / 1.1 ไปเป็นโปรโตคอลอื่นที่เข้ากันไม่ได้
คำเตือน
คำเตือนหัวทั่วไปจะใช้ในการดำเนินการข้อมูลเพิ่มเติมเกี่ยวกับสถานะหรือการเปลี่ยนแปลงของข้อความซึ่งอาจจะไม่ได้สะท้อนให้เห็นในข้อความ คำตอบอาจมีส่วนหัวคำเตือนมากกว่าหนึ่งรายการ
Warning : warn-code SP warn-agent SP warn-text SP warn-date
ตัวอย่าง
ในตัวอย่างด้านล่างเราใช้โมดูล urllib2 เพื่อรับคำตอบโดยใช้ urlopen ต่อไปเราจะใช้วิธี info () เพื่อรับข้อมูลส่วนหัวสำหรับการตอบกลับนั้น
import urllib2
response = urllib2.urlopen('http://www.tutorialspoint.com/python')
html = response.info()
print html
เมื่อเรารันโปรแกรมข้างต้นเราจะได้ผลลัพธ์ดังต่อไปนี้ -
Access-Control-Allow-Headers: X-Requested-With
Access-Control-Allow-Origin: *
Cache-Control: max-age=2592000
Content-Type: text/html; charset=UTF-8
Date: Mon, 02 Jul 2018 11:06:07 GMT
Expires: Wed, 01 Aug 2018 11:06:07 GMT
Last-Modified: Sun, 01 Jul 2018 21:05:38 GMT
Server: ECS (tir/CDD1)
Vary: Accept-Encoding
X-Cache: HIT
Content-Length: 22063
Connection: close