sự khác biệt trong ứng dụng / json và ứng dụng / x-www-form-urlencoding


Câu trả lời:


187

Trường hợp đầu tiên là thông báo cho máy chủ web rằng bạn đang đăng dữ liệu JSON như trong:

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

Tùy chọn thứ hai là thông báo cho máy chủ web rằng bạn sẽ mã hóa các tham số trong URL như trong:

Name=John+Smith&Age=23

17
Nó có ý nghĩa gì về phía máy chủ. Tôi thấy các trang web như stackoverflow & Twitter sử dụng x-www-form-urlencodedcho các yêu cầu AJAX như bỏ phiếu, v.v ... Phản hồi được gửi lại là JSON. Tôi nghĩ rằng tốt hơn là có một cặp yêu cầu / phản hồi đối xứng, tức là cả JSON.
người dùng

@buffer Tôi cũng tò mò muốn biết câu trả lời cho câu hỏi đối xứng của bạn.
Adam Johns

1
@AdamJohns: Blog này đáng để đọc mặc dù nó không trả lời chính xác "tại sao": homakov.blogspot.in/2012/06/iêu
người dùng

21
@buffer Sự hiểu biết của tôi là sử dụng JSON làm contentType giúp khi dữ liệu được gửi phức tạp hơn và liên quan đến nhiều hệ thống phân cấp .. trong khi đó, mã hóa mẫu rất tốt để gửi các thông số đơn giản trong url có thể đọc được ở phần phụ trợ mà không cần nhiều mã. .. Tôi đoán điều này trả lời tại sao một phần của nó.
Ankit Srivastava

@Medorator Một bình luận muộn. Ví dụ, khi bạn gửi một đối tượng JSON phức tạp với một mảng các đối tượng trong đó, việc sử dụng application/x-www-form-urlencodedsẽ gây nhầm lẫn cho máy chủ (Elixir sử dụng Poison trong trường hợp của tôi) và dẫn đến một số phân tích đối tượng không phù hợp (bằng cách nào đó nó đã chuyển đổi mảng lồng nhau của các đối tượng trên bản đồ, thay vì danh sách). Sử dụng application/jsonnên là sự lựa chọn chính xác trong trường hợp này.
xji

6

webRequest.ContentType = "application / x-www-form-urlencoding";

  1. Tên của ứng dụng / x-www-form-urlencoding đến từ đâu?

    Nếu bạn gửi yêu cầu HTTP GET , bạn có thể sử dụng các tham số truy vấn như sau:

    http://example.com/path/to/page? name = ferret & color = tím

    Nội dung của các trường được mã hóa dưới dạng chuỗi truy vấn. Các application/x-www-form- urlencodedtên 's đến từ các tham số truy vấn url trước nhưng các thông số truy vấn là ở nơi thân thể của yêu cầu thay vì url.

    Toàn bộ dữ liệu biểu mẫu được gửi dưới dạng chuỗi truy vấn dài. Chuỗi truy vấn chứa các cặp tên-giá trị được phân tách bằng & ký tự

    ví dụ: trường1 = value1 & field2 = value2

  2. Đó có thể là yêu cầu đơn giản gọi là đơn giản - không kích hoạt kiểm tra trước

    Yêu cầu đơn giản phải có một số tính chất. Bạn có thể xem tại đây để biết thêm. Một trong số đó là chỉ có ba giá trị được phép cho tiêu đề Kiểu nội dung cho các yêu cầu đơn giản

    • application / x-www-form-urlencoding
    • nhiều dữ liệu / biểu mẫu
    • văn bản / đồng bằng

3.Đối với hầu hết các cây param phẳng, ứng dụng / x-www-form-urlencoding đã được thử và kiểm tra.

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

  1. Dữ liệu sẽ là định dạng json .

Axiossuperagent , hai trong số những NPM phổ biến hơn HTTP thư viện, làm việc với các cơ quan JSON theo mặc định.

{
  "id": 1,
  "name": "Foo",
  "price": 123,
  "tags": [
    "Bar",
    "Eek"
  ],
  "stock": {
    "warehouse": 300,
    "retail": 20
  }
}
  1. "application / json" Content-Type là một trong những yêu cầu được Preflighted .

Bây giờ, nếu yêu cầu không đơn giản là yêu cầu , trình duyệt sẽ tự động gửi yêu cầu HTTP trước yêu cầu ban đầu bằng phương thức TÙY CHỌN để kiểm tra xem có an toàn để gửi yêu cầu ban đầu hay không. Nếu nó ổn, sau đó gửi yêu cầu thực tế. Bạn có thể xem tại đây để biết thêm.

  1. ứng dụng / json là thân thiện với người mới bắt đầu. Mảng mã hóa URL có thể là một cơn ác mộng!
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.