ความแตกต่างใน application / json และ application / x-www-form-urlencoded


คำตอบ:


187

กรณีแรกคือบอกเว็บเซิร์ฟเวอร์ว่าคุณกำลังโพสต์ข้อมูล JSON ดังต่อไปนี้:

{ Name : 'John Smith', Age: 23}

ตัวเลือกที่สองกำลังบอกเว็บเซิร์ฟเวอร์ว่าคุณจะเข้ารหัสพารามิเตอร์ใน URL เช่นเดียวกับใน:

Name=John+Smith&Age=23

17
สิ่งใดที่เกี่ยวข้องกับเซิร์ฟเวอร์ ฉันเห็นเว็บไซต์เช่น StackOverflow และการใช้งานทวิตเตอร์x-www-form-urlencodedสำหรับการร้องขอ AJAX เช่นการลงคะแนนเสียง ฯลฯ JSONกลับมาส่งคำตอบคือ ฉันคิดว่ามันจะดีกว่าถ้ามีคู่ขอ / ตอบสนองแบบสมมาตรเช่น JSON ทั้งคู่
ผู้ใช้

@buffer ฉันยังอยากรู้คำตอบสำหรับคำถามสมมาตรของคุณ
Adam Johns

1
@AdamJohns: บล็อกนี้มีค่าการอ่านแม้ว่าจะไม่ตอบว่า "ทำไม": homakov.blogspot.in/2012/06/…
ผู้ใช้

21
@buffer ความเข้าใจของฉันคือการใช้ JSON เป็น contentType ช่วยเมื่อข้อมูลที่จะส่งมีความซับซ้อนมากขึ้นและเกี่ยวข้องกับลำดับชั้นจำนวนมาก .. ในขณะที่การเข้ารหัสรูปแบบเป็นสิ่งที่ดีในการส่ง params ง่าย ๆ ใน url ซึ่งสามารถอ่านได้ .. ฉันเดาว่านี่เป็นคำตอบว่าทำไมส่วนหนึ่งของมัน
Ankit Srivastava

@Medorator ความคิดเห็นที่ล่าช้า แม้ว่าตัวอย่างเช่นเมื่อคุณส่งวัตถุ JSON ที่ซับซ้อนด้วยอาร์เรย์ของวัตถุในนั้นการใช้application/x-www-form-urlencodedจะสร้างความสับสนให้เซิร์ฟเวอร์ (Elixir ใช้ Poison ในกรณีของฉัน) และทำให้การแยกวิเคราะห์วัตถุที่ไม่เหมาะสม ของวัตถุไปยังแผนที่แทนที่จะเป็นรายการ) การใช้application/jsonควรเป็นตัวเลือกที่ถูกต้องในกรณีนี้
xji

6

webRequest.ContentType = "แอปพลิเคชัน / x-www-form-urlencoded";

  1. สถานที่ที่ไม่application / x-www ฟอร์ม urlencodedชื่อมาจากไหน?

    หากคุณส่งคำขอHTTP GETคุณสามารถใช้พารามิเตอร์การสืบค้นดังนี้

    http://example.com/path/to/page? name = คุ้ยเขี่ยและสี = สีม่วง

    เนื้อหาของฟิลด์ถูกเข้ารหัสเป็นสตริงเคียวรี application/x-www-form- urlencodedชื่อ 's มาจากพารามิเตอร์การค้นหา URL ก่อนหน้านี้ แต่พารามิเตอร์การค้นหาที่อยู่ในที่ร่างกายของคำขอแทนของ URL

    ข้อมูลในแบบฟอร์มทั้งหมดจะถูกส่งเป็นสตริงแบบสอบถามแบบยาวสตริงแบบสอบถามมีคู่ค่าชื่อที่คั่นด้วย&อักขระ

    เช่น field1 = value1 & field2 = value2

  2. อาจเป็นคำของ่ายที่เรียกว่าง่าย - อย่าเปิดการตรวจสอบล่วงหน้า

    คำร้องขอแบบง่ายจะต้องมีคุณสมบัติบางอย่าง คุณสามารถดูที่นี่สำหรับข้อมูลเพิ่มเติม หนึ่งในนั้นคือมีเพียงสามค่าที่อนุญาตสำหรับส่วนหัว Content-Type สำหรับการร้องขออย่างง่าย

    • แอพลิเคชัน / x-www ฟอร์ม urlencoded
    • multipart / form ข้อมูล
    • ข้อความ / ธรรมดา

3. สำหรับต้น param ที่แบนส่วนใหญ่จะใช้และทดสอบ x-www-form-urlencoded

request.ContentType = "application / json; charset = utf-8";

  1. ข้อมูลจะเป็นรูปแบบjson

axiosและsuperagentซึ่งเป็นหนึ่งในสองไลบรารี HTTP ที่ได้รับความนิยมมากขึ้นทำงานร่วมกับเนื้อความ JSON โดยค่าเริ่มต้น

{
  "id": 1,
  "name": "Foo",
  "price": 123,
  "tags": [
    "Bar",
    "Eek"
  ],
  "stock": {
    "warehouse": 300,
    "retail": 20
  }
}
  1. "application / JSON"ประเภทเนื้อหาเป็นหนึ่งใน การร้องขอ preflighted

ตอนนี้ถ้าคำขอไม่ใช่คำของ่าย ๆเบราว์เซอร์จะส่งคำขอ HTTP โดยอัตโนมัติก่อนที่จะส่งคำขอดั้งเดิมโดยวิธีOPTIONSเพื่อตรวจสอบว่าปลอดภัยหรือไม่ที่จะส่งคำขอดั้งเดิม ถ้ามันตกลงแล้วส่งคำขอจริง คุณสามารถดูที่นี่สำหรับข้อมูลเพิ่มเติม

  1. application / jsonเป็นมิตรกับผู้ใช้ อาร์เรย์ที่เข้ารหัส URL อาจเป็นฝันร้าย!
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.