วิธีการร้องขอ HTTP ที่ระบุไว้ในโปรโตคอล HTTP/1.1 คือตัวเลือก, Get, Head, Post, Put, DELETE, Trace, Connect โดยทั่วไปแล้วโพสต์จะใช้เพื่อส่งข้อมูลไปยังเซิร์ฟเวอร์
เรารู้ว่าโปรโตคอล HTTP ถูกส่งโดยรหัส ASCII และข้อมูลจำเพาะของเลเยอร์แอปพลิเคชันตามโปรโตคอล TCP/IP ข้อมูลจำเพาะแบ่งการร้องขอ HTTP ออกเป็นสามส่วน: สถานะสถานะ, หัวคำขอและหัวเรื่องข้อความ คล้ายกับต่อไปนี้:
<Emod> <repkest-url> <ision> <ส่วนหัว> <entity-body> </entity-body> </headers> </version> </request-url> </method> </method> </method > </food>
ข้อตกลงกำหนดว่าข้อมูลที่ส่งโดยโพสต์จะต้องอยู่ในเอนทิตี-ร่างกาย แต่ข้อตกลงไม่ได้ระบุว่าต้องใช้ข้อมูลอะไร ในความเป็นจริงนักพัฒนาสามารถกำหนดรูปแบบของหัวเรื่องข้อความด้วยตนเอง
อย่างไรก็ตามหากมีการส่งข้อมูลออกไปก็มีความหมายที่จะประสบความสำเร็จในเซิร์ฟเวอร์ ภาษาเซิร์ฟเวอร์ทั่วไปเช่น Java และเฟรมเวิร์กของพวกเขาได้สร้างฟังก์ชั่นในการวิเคราะห์แบบอัตโนมัติของรูปแบบข้อมูลทั่วไป เซิร์ฟเวอร์มักจะเรียนรู้จากฟิลด์ประเภทเนื้อหาในหัวคำขอเพื่อเรียนรู้ว่าข้อความในคำขอถูกเข้ารหัสในคำขอแล้ววิเคราะห์เรื่องอย่างไร ดังนั้นเมื่อพูดถึงการโพสต์รูปแบบข้อมูลที่ส่งมันมีสองส่วน: การเข้ารหัสหัวข้อประเภทเนื้อหาและข้อความ นี่คือการแนะนำอย่างเป็นทางการสำหรับพวกเขา
แอปพลิเคชัน/x-www-form-urlencodedนี่ควรเป็นวิธีที่พบได้บ่อยที่สุดในการส่งข้อมูล หากแบบฟอร์มแบบฟอร์มดั้งเดิมของเบราว์เซอร์หากไม่ได้ตั้งค่าแอตทริบิวต์ Enctype ข้อมูลจะถูกส่งโดย Application/X-WWW-FORM-URLENCODED คำขอคล้ายกับต่อไปนี้ (ส่วนหัวคำขอที่ไม่เกี่ยวข้องถูกละไว้ในบทความนี้):
โพสต์ http://www.example.com http/1.1content-ype: แอปพลิเคชัน/x-www-forlem-urlencoded; 5B%5D = 3
ก่อนอื่นประเภทเนื้อหาถูกระบุเป็นแอปพลิเคชัน/X-WWW-FORM-URLENCODED; ภาษาเซิร์ฟเวอร์ส่วนใหญ่มีการสนับสนุนที่ดีสำหรับวิธีนี้ ตัวอย่างเช่นใน PHP, โพสต์ [title title ′] สามารถรับค่าของชื่อได้
หลายครั้งเมื่อเราส่งข้อมูลกับ AJAX เราใช้วิธีนี้ด้วย ตัวอย่างเช่น AJAX ของ JQuery ค่าเริ่มต้นของประเภทเนื้อหาคือ "Application/X-WWW-FORM-URLENCODED; charset = UTF-8"
มัลติพาร์ท/ฟอร์มข้อมูลนี่เป็นอีกวิธีทั่วไปในการโพสต์ข้อมูล เมื่อเราอัปโหลดไฟล์ด้วยแบบฟอร์มเราจะต้องสร้างสิ่งที่เข้ารหัสของฟอร์มเท่ากับค่านี้ มาที่ตัวอย่างคำขอโดยตรง:
โพสต์ http://www.example.com http/1.1content-ype: multipart/form-data; --- webkitformboundaryrgkcby7qhfd3trwacontent-disposition: form-data;
ตัวอย่างนี้ซับซ้อนเล็กน้อย ก่อนอื่นขอบเขตจะใช้ในการแบ่งเขตข้อมูลที่แตกต่างกัน จากนั้นประเภทเนื้อหาบ่งชี้ว่าข้อมูลถูกเข้ารหัสโดย Mutipart/Form-Data ขอบเขตที่ร้องขอในครั้งนี้คืออะไร หัวเรื่องข้อความแบ่งออกเป็นส่วนที่คล้ายกันโดยมีโครงสร้างที่คล้ายกันตามจำนวนส่วนต่างๆ ). หากไฟล์ถูกส่งจะมีข้อมูลชื่อไฟล์และประเภทไฟล์ หัวเรื่องข้อความจบลงด้วย-ขอบเขต- สำหรับคำจำกัดความโดยละเอียดของ Mutipart/Form-Data โปรดไปที่ RFC1867 เพื่อดู
วิธีนี้ใช้โดยทั่วไปในการอัปโหลดไฟล์และภาษาเซิร์ฟเวอร์ที่สำคัญยังได้รับการสนับสนุนที่ดี
วิธีการโพสต์สองวิธีที่กล่าวถึงข้างต้นเป็นการสนับสนุนแบบเนทีฟสำหรับเบราว์เซอร์และแบบฟอร์มแบบฟอร์มดั้งเดิมสนับสนุนวิธีการทั้งสองนี้ในขั้นตอนนี้เท่านั้น อย่างไรก็ตามเนื่องจากเว็บไซต์มากขึ้นเรื่อย ๆ โดยเฉพาะอย่างยิ่ง WebApp ทุกคนใช้ AJAX สำหรับการโต้ตอบข้อมูลเราสามารถกำหนดวิธีการส่งข้อมูลใหม่ได้อย่างสมบูรณ์เพื่อนำความสะดวกในการพัฒนามาใช้
แอปพลิเคชัน/JSONแอปพลิเคชัน/JSON ประเภทเนื้อหาไม่ได้ไม่คุ้นเคยกับส่วนหัวการตอบสนองอย่างแน่นอน ในความเป็นจริงตอนนี้ผู้คนจำนวนมากขึ้นใช้เป็นหัวคำขอเพื่อบอกข้อความเซิร์ฟเวอร์ว่าร่างกายหลักเป็นสตริง JSON ที่เป็นอนุกรม เนื่องจากความนิยมของข้อกำหนดของ JSON เบราว์เซอร์ที่สำคัญยกเว้นรุ่นต่ำ IE นั้นมีถิ่นกำเนิดใน JSON.Stringify และภาษาเซิร์ฟเวอร์ยังมีฟังก์ชั่นที่จะจัดการกับ JSON และ JSON จะไม่ประสบปัญหาใด ๆ
รูปแบบ JSON รองรับข้อมูลที่มีโครงสร้างที่ซับซ้อนกว่าค่าคีย์ซึ่งมีประโยชน์เช่นกัน ฉันจำได้ว่าเมื่อฉันทำโครงการเมื่อไม่กี่ปีที่ผ่านมาระดับข้อมูลที่ฉันต้องส่งนั้นลึกมาก อย่างไรก็ตามในเวลานั้นฉันใช้สตริง JSON เป็นค่าและฉันยังคงใส่ในคู่ค่าคีย์และส่งไปใน X-WWW-FORM-URLENCODED
ฟังก์ชั่น AJAX ใน AngularJS ของ Google คือการส่งสตริง JSON ตามค่าเริ่มต้น ตัวอย่างเช่นรหัสต่อไปนี้:
var data = {'title': 'test', 'sub': [1,2,3]};
คำขอสุดท้ายคือ:
โพสต์ http://www.example.com http/1.1content-ype: แอปพลิเคชัน/json;
โครงการนี้สามารถส่งข้อมูลที่มีโครงสร้างที่ซับซ้อนได้อย่างง่ายดายโดยเฉพาะอย่างยิ่งเหมาะสำหรับส่วนต่อประสาน เครื่องมือบรรจุภัณฑ์ที่สำคัญเช่นเครื่องมือนักพัฒนาของ Chrome Firebug และ Fiddler จะแสดงข้อมูล JSON ด้วยโครงสร้างต้นไม้ซึ่งเป็นมิตรมาก อย่างไรก็ตามยังมีภาษาเซิร์ฟเวอร์บางภาษาที่ไม่ได้รองรับวิธีนี้ ในเวลานี้คุณต้องจัดการด้วยตัวเอง: เมื่อเนื้อหาประเภทคือแอปพลิเคชัน/JSON ในส่วนหัวคำขอรับสตรีมอินพุตดั้งเดิมจาก PHP: // อินพุตจากนั้น JSON_DECODE เฟรมเวิร์ก Java บางตัวเริ่มทำ
แน่นอนว่า AngularJS ยังสามารถกำหนดค่าให้ส่งข้อมูลด้วย X-WWW-FORM-URLENCODED
ข้อความ/xmlXML-RPC (การโทรขั้นตอนระยะไกล XML) มันเป็นข้อกำหนดการโทรระยะไกลโดยใช้ HTTP เป็นโปรโตคอลการส่งและ XML เป็นวิธีการเข้ารหัส คำขอ XML-RPC ทั่วไปคือ: โพสต์ http://www.example.com http/1.1content-ype: text/xml <!-? /methodName> <params> <param> <value> <i4> 41 </i4> </alue> </params> </methodcall>
โปรโตคอล XML-RPC นั้นง่ายและเต็มไปด้วยฟังก์ชั่นและมีการใช้งานภาษาต่าง ๆ นอกจากนี้ยังมีการใช้กันอย่างแพร่หลายเช่น XML-RPC API ของ WordPress, บริการ ping ของเครื่องมือค้นหาและอื่น ๆ ใน JavaScript ยังมีไลบรารีสำเร็จรูปเพื่อรองรับการโต้ตอบข้อมูลด้วยวิธีนี้ซึ่งสามารถรองรับบริการ XML-RPC ที่มีอยู่ได้ดี อย่างไรก็ตามโดยส่วนตัวแล้วฉันคิดว่าโครงสร้าง XML ยังคงป่องเกินไปโดยทั่วไป JSON จะมีความยืดหยุ่นและสะดวกกว่า