ฉันใช้ส่วนขยายบุรุษไปรษณีย์ Chrome สำหรับทดสอบบริการเว็บ
มีสามตัวเลือกสำหรับป้อนข้อมูล
ฉันเดาว่าraw
สำหรับการส่ง JSON
ความแตกต่างระหว่างอีกสองคืออะไรform-data
และx-www-form-urlencoded
?
ฉันใช้ส่วนขยายบุรุษไปรษณีย์ Chrome สำหรับทดสอบบริการเว็บ
มีสามตัวเลือกสำหรับป้อนข้อมูล
ฉันเดาว่าraw
สำหรับการส่ง JSON
ความแตกต่างระหว่างอีกสองคืออะไรform-data
และx-www-form-urlencoded
?
คำตอบ:
เหล่านี้เป็นชนิดเนื้อหาแบบฟอร์มอื่นที่กำหนดโดย W3C หากคุณต้องการส่งข้อความ / ข้อมูล ASCII แบบง่ายx-www-form-urlencodedจะทำงาน นี่คือค่าเริ่มต้น
แต่ถ้าคุณต้องส่งข้อความที่ไม่ใช่ ASCII หรือข้อมูลไบนารี่ขนาดใหญ่form-dataจะเป็นข้อมูลนั้น
คุณสามารถใช้Rawหากคุณต้องการส่งข้อความธรรมดาหรือ JSON หรือสตริงอื่น ๆ เช่นเดียวกับชื่อที่แนะนำบุรุษไปรษณีย์ส่งข้อมูลสตริงดิบของคุณเนื่องจากไม่มีการแก้ไข ประเภทของข้อมูลที่คุณกำลังส่งสามารถตั้งค่าได้โดยใช้ส่วนหัวของชนิดเนื้อหาจากดรอปดาวน์
สามารถใช้ไบนารีได้เมื่อคุณต้องการแนบข้อมูลที่ไม่ใช่ข้อความไปยังคำขอเช่นไฟล์วิดีโอ / เสียงรูปภาพหรือไฟล์ไบนารีอื่น ๆ
อ้างอิงถึงลิงค์นี้สำหรับการอ่านเพิ่มเติม: แบบฟอร์มในเอกสาร HTML
สิ่งนี้จะอธิบายได้ดีกว่า: บุรุษไปรษณีย์
คำขอร่างกาย
ในขณะที่สร้างคำขอคุณจะต้องจัดการกับตัวแก้ไขคำร้องขอจำนวนมาก บุรุษไปรษณีย์ให้คุณส่งคำขอ HTTP เกือบทุกชนิด (หากคุณไม่สามารถส่งอะไรได้โปรดแจ้งให้เราทราบ!) ตัวแก้ไขเนื้อหาแบ่งออกเป็น 4 ส่วนและมีการควบคุมที่แตกต่างกันไปตามประเภทของร่างกาย
ข้อมูลแบบฟอร์ม
multipart / form-data เป็นการเข้ารหัสเริ่มต้นที่เว็บฟอร์มใช้เพื่อถ่ายโอนข้อมูลสิ่งนี้จำลองการกรอกแบบฟอร์มบนเว็บไซต์และส่ง ตัวแก้ไขข้อมูลฟอร์มช่วยให้คุณสามารถตั้งค่าคู่คีย์ / ค่า (ใช้ตัวแก้ไขคีย์ - ค่า) สำหรับข้อมูลของคุณ คุณสามารถแนบไฟล์เข้ากับกุญแจได้เช่นกัน โปรดทราบว่าเนื่องจากข้อ จำกัด ของข้อกำหนด HTML5 ไฟล์จะไม่ถูกเก็บไว้ในประวัติหรือคอลเลกชัน คุณจะต้องเลือกไฟล์อีกครั้งในเวลาที่ส่งคำขอurlencoded
การเข้ารหัสนี้เหมือนกับที่ใช้ในพารามิเตอร์ URL คุณเพียงแค่ต้องใส่คู่คีย์ / ค่าและบุรุษไปรษณีย์จะเข้ารหัสคีย์และค่าอย่างถูกต้อง โปรดทราบว่าคุณไม่สามารถอัปโหลดไฟล์ผ่านโหมดการเข้ารหัสนี้ อาจมีความสับสนระหว่าง form-data และ urlencoded ดังนั้นโปรดตรวจสอบกับ API ของคุณก่อน
ดิบ
คำขอดิบสามารถมีอะไรก็ได้ บุรุษไปรษณีย์ไม่ได้สัมผัสสตริงที่ป้อนในโปรแกรมแก้ไขข้อมูลดิบยกเว้นการแทนที่ตัวแปรสภาพแวดล้อม สิ่งที่คุณใส่ในพื้นที่ข้อความจะถูกส่งไปพร้อมกับคำขอ ตัวแก้ไข raw ให้คุณตั้งค่าประเภทการจัดรูปแบบพร้อมกับส่วนหัวที่ถูกต้องที่คุณควรส่งพร้อมกับเนื้อความดิบ คุณสามารถตั้งค่าส่วนหัวของ Content-Type ได้เช่นกัน โดยปกติคุณจะส่งข้อมูล XML หรือ JSON ที่นี่
ไบนารี่
ข้อมูลไบนารีช่วยให้คุณสามารถส่งสิ่งที่คุณไม่สามารถป้อนในบุรุษไปรษณีย์ ตัวอย่างเช่นไฟล์รูปภาพเสียงหรือวิดีโอ คุณสามารถส่งไฟล์ข้อความได้เช่นกัน ดังที่กล่าวไว้ก่อนหน้านี้ในส่วนของแบบฟอร์มข้อมูลคุณจะต้องแนบไฟล์อีกครั้งหากคุณกำลังโหลดคำขอผ่านประวัติหรือการรวบรวม
UPDATE
ในฐานะที่เป็นออกแหลมโดยVkkที่WHATWG specพูด urlencoded เป็นประเภทการเข้ารหัสเริ่มต้นสำหรับรูปแบบ
ค่าเริ่มต้นที่ไม่ถูกต้องสำหรับแอตทริบิวต์เหล่านี้คือสถานะแอปพลิเคชัน / x-www-form-urlencoded ค่าเริ่มต้นที่ขาดหายไปสำหรับแอตทริบิวต์ enctype ก็เป็นสถานะแอปพลิเคชัน / x-www-form-urlencoded
Content-Type: application/json
header และข้อมูลดิบที่ป้อนเป็น json เช่นเดียว{foo: bar}
กับContent-Type: application/json
ส่วนหัวเดียวกัน?
multipart / form ข้อมูล
บันทึก. โปรดปรึกษาRFC2388สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการอัปโหลดไฟล์รวมถึงปัญหาความเข้ากันได้ย้อนหลังความสัมพันธ์ระหว่าง "multipart / form-data" และประเภทเนื้อหาอื่น ๆ ปัญหาประสิทธิภาพการทำงาน ฯลฯ
โปรดปรึกษาภาคผนวกสำหรับข้อมูลเกี่ยวกับปัญหาด้านความปลอดภัยสำหรับแบบฟอร์ม
ประเภทเนื้อหา "application / x-www-form-urlencoded" นั้นไม่มีประสิทธิภาพในการส่งข้อมูลไบนารีหรือข้อความจำนวนมากที่มีอักขระที่ไม่ใช่ ASCII ควรใช้ชนิดเนื้อหา "multipart / form-data" สำหรับการส่งแบบฟอร์มที่มีไฟล์ข้อมูลที่ไม่ใช่ ASCII และข้อมูลไบนารี
ชนิดเนื้อหา "multipart / form ข้อมูล" ตามกฎของข้อมูล multipart MIME ทั้งหมดลำธารที่ระบุไว้ในRFC2045 คำจำกัดความของ "หลายส่วน / แบบฟอร์มข้อมูล" มีอยู่ในรีจิสทรี [IANA]
ข้อความ "multipart / form-data" มีชุดของชิ้นส่วนแต่ละอันแสดงถึงการควบคุมที่สำเร็จ ชิ้นส่วนจะถูกส่งไปยังตัวแทนการประมวลผลในลำดับเดียวกันการควบคุมที่เกี่ยวข้องปรากฏในสตรีมเอกสาร ขอบเขตส่วนหนึ่งไม่ควรเกิดขึ้นกับข้อมูลใด ๆ วิธีการนี้ทำอยู่นอกขอบเขตของข้อกำหนดนี้
เช่นเดียวกับประเภท MIME หลายส่วนแต่ละส่วนมีส่วนหัว "ประเภทเนื้อหา" ที่เป็นตัวเลือกซึ่งมีค่าเริ่มต้นเป็น "text / plain" ตัวแทนผู้ใช้ควรระบุส่วนหัว "Content-Type" พร้อมด้วยพารามิเตอร์ "charset"
แอพลิเคชัน / x-www ฟอร์ม urlencoded
นี่คือประเภทเนื้อหาเริ่มต้น แบบฟอร์มที่ส่งมาพร้อมกับประเภทเนื้อหานี้จะต้องได้รับการเข้ารหัสดังนี้:
ชื่อและค่าควบคุมจะถูกหลีกหนี อักขระช่องว่างจะถูกแทนที่ด้วย+', and then reserved characters are escaped as described in [RFC1738], section 2.2: Non-alphanumeric characters are replaced by
% HH 'เครื่องหมายเปอร์เซ็นต์และเลขฐานสิบหกสองหลักแทนรหัส ASCII ของอักขระ ตัวแบ่งบรรทัดจะแสดงเป็นคู่ "CR LF" (เช่น%0D%0A').
The control names/values are listed in the order they appear in the document. The name is separated from the value by
= 'และคู่ชื่อ / ค่าจะถูกแยกออกจากกันโดย `&'
application/x-www-form-urlencoded
เนื้อความของข้อความ HTTP ที่ส่งไปยังเซิร์ฟเวอร์นั้นเป็นสตริงการสืบค้นขนาดยักษ์หนึ่งคู่ - ชื่อ / ค่าจะถูกคั่นด้วยเครื่องหมายและ (&) และชื่อจะถูกแยกออกจากค่าด้วยสัญลักษณ์เท่ากับ (=) ตัวอย่างของสิ่งนี้จะเป็น:
MyVariableOne=ValueOne&MyVariableTwo=ValueTwo
เนื้อหาประเภท "application / x-www ฟอร์ม urlencoded"จะไม่มีประสิทธิภาพในการส่งข้อมูลจำนวนมากไบนารีหรือข้อความที่มีอักขระที่ไม่ใช่ ASCII ควรใช้ชนิดเนื้อหา "multipart / form-data" สำหรับการส่งแบบฟอร์มที่มีไฟล์ข้อมูลที่ไม่ใช่ ASCII และข้อมูลไบนารี
นี่คือตัวอย่างเพิ่มเติมเพื่อดูข้อความดิบที่บุรุษไปรษณีย์ส่งผ่านในคำขอ คุณสามารถเห็นสิ่งนี้ได้โดยเปิดคอนโซลบุรุษไปรษณีย์:
หัวข้อ
content-type: multipart/form-data; boundary=--------------------------590299136414163472038474
ร่างกาย
key1=value1key2=value2
หัวข้อ
Content-Type: application/x-www-form-urlencoded
ร่างกาย
key1=value1&key2=value2
หัวข้อ
Content-Type: text/plain
ร่างกาย
This is some text.
หัวข้อ
Content-Type: application/json
ร่างกาย
{"key1":"value1","key2":"value2"}
binary
-