Sự khác biệt giữa
request.ContentType = "application / json; charset = utf-8";
và
webRequest.ContentType = "application / x-www-form-urlencoding";
Sự khác biệt giữa
request.ContentType = "application / json; charset = utf-8";
và
webRequest.ContentType = "application / x-www-form-urlencoding";
Câu trả lời:
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
application/x-www-form-urlencoded
sẽ 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/json
nên là sự lựa chọn chính xác trong trường hợp này.
webRequest.ContentType = "application / x-www-form-urlencoding";
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-
urlencoded
tê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
Đó 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
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";
Axios và superagent , 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 } }
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.
x-www-form-urlencoded
cho 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.