HTTP - คำขอ
ไคลเอนต์ HTTP ส่งคำขอ HTTP ไปยังเซิร์ฟเวอร์ในรูปแบบของข้อความร้องขอซึ่งรวมถึงรูปแบบต่อไปนี้:
- A Request-line
- Zero or more header (General|Request|Entity) fields followed by CRLF
- An empty line (i.e., a line with nothing preceding the CRLF) indicating the end of the header fields
- Optionally a message-body
ส่วนต่อไปนี้อธิบายแต่ละเอนทิตีที่ใช้ในข้อความคำร้องขอ HTTP
คำขอ - บรรทัด
Request-Line เริ่มต้นด้วยโทเค็นเมธอดตามด้วย Request-URI และเวอร์ชันโปรโตคอลและลงท้ายด้วย CRLF องค์ประกอบถูกคั่นด้วยอักขระ SP เว้นวรรค
Request-Line = Method SP Request-URI SP HTTP-Version CRLF
เรามาดูแต่ละส่วนที่กล่าวถึงใน Request-Line
วิธีการขอ
คำขอ method ระบุวิธีการที่จะดำเนินการกับทรัพยากรที่ระบุโดยที่กำหนด Request-URI. วิธีนี้คำนึงถึงตัวพิมพ์เล็กและใหญ่และควรกล่าวถึงตัวพิมพ์ใหญ่เสมอ ตารางต่อไปนี้แสดงวิธีการที่รองรับทั้งหมดใน HTTP / 1.1
SN | วิธีการและคำอธิบาย |
---|---|
1 | GET เมธอด GET ใช้เพื่อดึงข้อมูลจากเซิร์ฟเวอร์ที่กำหนดโดยใช้ URI ที่กำหนด คำขอโดยใช้ GET ควรดึงข้อมูลเท่านั้นและไม่ควรมีผลกระทบอื่นใดกับข้อมูล |
2 | HEAD เหมือนกับ GET แต่จะโอนสายสถานะและส่วนหัวเท่านั้น |
3 | POST คำขอ POST ใช้เพื่อส่งข้อมูลไปยังเซิร์ฟเวอร์ตัวอย่างเช่นข้อมูลลูกค้าการอัปโหลดไฟล์ ฯลฯ โดยใช้แบบฟอร์ม HTML |
4 | PUT แทนที่การแสดงปัจจุบันทั้งหมดของทรัพยากรเป้าหมายด้วยเนื้อหาที่อัปโหลด |
5 | DELETE ลบการแสดงปัจจุบันทั้งหมดของทรัพยากรเป้าหมายที่กำหนดโดย URI |
6 | CONNECT สร้างอุโมงค์ไปยังเซิร์ฟเวอร์ที่ระบุโดย URI ที่กำหนด |
7 | OPTIONS อธิบายตัวเลือกการสื่อสารสำหรับทรัพยากรเป้าหมาย |
8 | TRACE ทำการทดสอบข้อความวนกลับพร้อมกับเส้นทางไปยังทรัพยากรเป้าหมาย |
คำขอ -URI
Request-URI เป็น Uniform Resource Identifier และระบุทรัพยากรที่จะใช้คำขอ ต่อไปนี้เป็นแบบฟอร์มที่ใช้บ่อยที่สุดในการระบุ URI:
Request-URI = "*" | absoluteURI | abs_path | authority
SN | วิธีการและคำอธิบาย |
---|---|
1 | เครื่องหมายดอกจัน *ใช้เมื่อคำขอ HTTP ไม่ได้ใช้กับทรัพยากรใดทรัพยากรหนึ่ง แต่ใช้กับเซิร์ฟเวอร์เองและได้รับอนุญาตก็ต่อเมื่อวิธีการที่ใช้ไม่จำเป็นต้องใช้กับทรัพยากร ตัวอย่างเช่น: OPTIONS * HTTP/1.1 |
2 | absoluteURIใช้เมื่อมีการร้องขอ HTTP ไปยังพร็อกซี พร็อกซีถูกร้องขอเพื่อส่งต่อคำขอหรือบริการจากแคชที่ถูกต้องและส่งคืนการตอบกลับ ตัวอย่างเช่น: GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1 |
3 | รูปแบบที่พบบ่อยที่สุดของ Request-URI คือที่ใช้เพื่อระบุทรัพยากรบนเซิร์ฟเวอร์ต้นทางหรือเกตเวย์ ตัวอย่างเช่นไคลเอ็นต์ที่ต้องการดึงทรัพยากรโดยตรงจากเซิร์ฟเวอร์ต้นทางจะสร้างการเชื่อมต่อ TCP ไปยังพอร์ต 80 ของโฮสต์ "www.w3.org" และส่งบรรทัดต่อไปนี้: GET /pub/WWW/TheProject.html HTTP/1.1 Host: www.w3.org โปรดทราบว่าเส้นทางสัมบูรณ์ต้องไม่ว่างเปล่า หากไม่มีอยู่ใน URI ดั้งเดิมจะต้องกำหนดเป็น "/" (รูทเซิร์ฟเวอร์) |
ขอฟิลด์ส่วนหัว
เราจะศึกษา General-header และ Entity-header ในบทแยกต่างหากเมื่อเราจะเรียนรู้ฟิลด์ส่วนหัว HTTP ในตอนนี้เรามาตรวจสอบว่าฟิลด์ส่วนหัวของคำขอคืออะไร
ฟิลด์ส่วนหัวของคำร้องขออนุญาตให้ไคลเอ็นต์ส่งข้อมูลเพิ่มเติมเกี่ยวกับคำร้องขอและเกี่ยวกับไคลเอนต์ไปยังเซิร์ฟเวอร์ ฟิลด์เหล่านี้ทำหน้าที่เป็นตัวปรับเปลี่ยนคำขอนี่คือรายการของฟิลด์ส่วนหัวคำขอที่สำคัญบางฟิลด์ที่สามารถใช้ได้ตามข้อกำหนด:
Accept-Charset
Accept-Encoding
Accept-Language
Authorization
Expect
From
Host
If-Match
If-Modified-Since
If-None-Match
If-Range
If-Unmodified-Since
Max-Forwards
Proxy-Authorization
Range
Referer
TE
User-Agent
คุณสามารถแนะนำฟิลด์ที่กำหนดเองของคุณในกรณีที่คุณกำลังจะเขียนไคลเอนต์และเว็บเซิร์ฟเวอร์ที่กำหนดเองของคุณเอง
ตัวอย่างข้อความร้องขอ
ตอนนี้มารวมกันเพื่อสร้างคำขอ HTTP เพื่อดึงข้อมูล hello.htm จากเว็บเซิร์ฟเวอร์ที่ทำงานบน tutorialspoint.com
GET /hello.htm HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.tutorialspoint.com
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
ที่นี่เราไม่ได้ส่งข้อมูลคำขอใด ๆ ไปยังเซิร์ฟเวอร์เนื่องจากเรากำลังดึงหน้า HTML ธรรมดาจากเซิร์ฟเวอร์ การเชื่อมต่อเป็นส่วนหัวทั่วไปและส่วนหัวที่เหลือเป็นส่วนหัวของคำขอ ตัวอย่างต่อไปนี้แสดงวิธีการส่งข้อมูลแบบฟอร์มไปยังเซิร์ฟเวอร์โดยใช้เนื้อหาข้อความคำขอ:
POST /cgi-bin/process.cgi HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.tutorialspoint.com
Content-Type: application/x-www-form-urlencoded
Content-Length: length
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
licenseID=string&content=string&/paramsXML=string
ที่นี่ URL ที่ระบุ/cgi-bin/process.cgiจะถูกใช้เพื่อประมวลผลข้อมูลที่ส่งผ่านดังนั้นการตอบกลับจะถูกส่งกลับ ที่นี่content-type บอกเซิร์ฟเวอร์ว่าข้อมูลที่ส่งผ่านเป็นข้อมูลแบบฟอร์มบนเว็บอย่างง่ายและ lengthจะเป็นความยาวจริงของข้อมูลที่ใส่ในเนื้อหาข้อความ ตัวอย่างต่อไปนี้แสดงวิธีส่ง XML ธรรมดาไปยังเว็บเซิร์ฟเวอร์ของคุณ:
POST /cgi-bin/process.cgi HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)
Host: www.tutorialspoint.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://clearforest.com/">string</string>