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