Người đưa thư Chrome: Sự khác biệt giữa dữ liệu biểu mẫu, x-www-form-urlencoding và raw


222

Tôi đang sử dụng tiện ích mở rộng Postman Chrome để thử nghiệm dịch vụ web.

Có ba tùy chọn có sẵn để nhập dữ liệu.

Tôi đoán rawlà để gửi JSON.

Sự khác biệt giữa hai người kia là gì form-datax-www-form-urlencoded?


11
Cho đến hôm nay, có một tùy chọn thứ 4 cũng như để gửi dữ liệu trong công cụ postman - binary.
RBT

Câu trả lời:


237

Đây là các loại nội dung Mẫu khác nhau được xác định bởi W3C. Nếu bạn muốn gửi dữ liệu văn bản / ASCII đơn giản, thì x-www-form-urlencoding sẽ hoạt động. Đây là mặc định.

Nhưng nếu bạn phải gửi văn bản không phải ASCII hoặc dữ liệu nhị phân lớn, dữ liệu biểu mẫu là dành cho điều đó.

Bạn có thể sử dụng Raw nếu bạn muốn gửi văn bản thuần túy hoặc JSON hoặc bất kỳ loại chuỗi nào khác. Giống như tên cho thấy, Postman gửi dữ liệu chuỗi thô của bạn như không có sửa đổi. Loại dữ liệu mà bạn đang gửi có thể được đặt bằng cách sử dụng tiêu đề loại nội dung từ trình đơn thả xuống.

Nhị phân có thể được sử dụng khi bạn muốn đính kèm dữ liệu phi văn bản vào yêu cầu, ví dụ: tệp video / âm thanh, hình ảnh hoặc bất kỳ tệp dữ liệu nhị phân nào khác.

Tham khảo liên kết này để đọc thêm: Biểu mẫu trong tài liệu HTML


Còn nhị phân thì sao?
RBT

Bây giờ tôi có một biểu mẫu có 4 trường văn bản và 1 trường tải lên tệp, vui lòng gợi ý cho tôi tùy chọn nào (dữ liệu biểu mẫu Hoặc x-www-form-urlencoding) sẽ được sử dụng để gửi 5 giá trị trường này trong postman? Cảm ơn trước.
Kam Meat

@Kam Meat, xin lỗi vì trả lời trễ, trường khóa của dữ liệu biểu mẫu trong Postman có danh sách thả xuống nơi bạn có thể chọn xem đó là trường văn bản hoặc tệp. Bạn có thể thiết lập nó thành tập tin và sau đó duyệt một tập tin để đính kèm vào cơ thể. Mong rằng sẽ giúp.
Basant Singh

87

Điều này giải thích rõ hơn: Tài liệu của Postman

Yêu cầu cơ thể

Trong khi xây dựng các yêu cầu, bạn sẽ phải đối phó với trình soạn thảo thân yêu cầu rất nhiều. Người đưa thư cho phép bạn gửi hầu hết mọi loại yêu cầu HTTP (Nếu bạn không thể gửi thứ gì đó, hãy cho chúng tôi biết!). Trình chỉnh sửa cơ thể được chia thành 4 khu vực và có các điều khiển khác nhau tùy thuộc vào loại cơ thể.

mẫu dữ liệu

nhiều dữ liệu / biểu mẫu dữ liệu là mã hóa mặc định mà biểu mẫu web sử dụng để truyền dữ liệu. Điều này mô phỏng điền vào một mẫu trên một trang web và gửi nó. Trình chỉnh sửa dữ liệu biểu mẫu cho phép bạn đặt các cặp khóa / giá trị (sử dụng trình chỉnh sửa khóa-giá trị) cho dữ liệu của bạn. Bạn có thể đính kèm tập tin vào một khóa là tốt. Xin lưu ý rằng do các hạn chế của thông số HTML5, các tệp không được lưu trữ trong lịch sử hoặc bộ sưu tập. Bạn sẽ phải chọn lại tệp tại thời điểm gửi yêu cầu.

urlencoding

Mã hóa này giống như mã hóa được sử dụng trong các tham số URL. Bạn chỉ cần nhập các cặp khóa / giá trị và Postman sẽ mã hóa các khóa và giá trị đúng cách. Lưu ý rằng bạn không thể tải lên các tệp thông qua chế độ mã hóa này. Có thể có một số nhầm lẫn giữa dữ liệu biểu mẫu và urlencoding, vì vậy hãy đảm bảo kiểm tra API của bạn trước.

nguyên

Một yêu cầu thô có thể chứa bất cứ điều gì. Người đưa thư không chạm vào chuỗi được nhập trong trình soạn thảo thô ngoại trừ thay thế các biến môi trường. Bất cứ điều gì bạn đặt trong vùng văn bản sẽ được gửi với yêu cầu. Trình chỉnh sửa thô cho phép bạn đặt loại định dạng cùng với tiêu đề chính xác mà bạn nên gửi với phần thân thô. Bạn cũng có thể đặt tiêu đề Kiểu nội dung theo cách thủ công. Thông thường, bạn sẽ gửi dữ liệu XML hoặc JSON ở đây.

nhị phân

dữ liệu nhị phân cho phép bạn gửi những thứ mà bạn không thể nhập trong Postman. Ví dụ: tập tin hình ảnh, âm thanh hoặc video. Bạn có thể gửi các tập tin văn bản là tốt. Như đã đề cập trước đó trong phần dữ liệu biểu mẫu, bạn sẽ phải gắn lại một tệp nếu bạn đang tải một yêu cầu thông qua lịch sử hoặc bộ sưu tập.

CẬP NHẬT

Như VKK đã chỉ ra , thông số WHATWG cho biết urlencoding là loại mã hóa mặc định cho các biểu mẫu.

Giá trị mặc định không hợp lệ cho các thuộc tính này là trạng thái ứng dụng / x-www-form-urlencoding. Giá trị mặc định bị thiếu cho thuộc tính enctype cũng là trạng thái ứng dụng / x-www-form-urlencoding.


5
Tài liệu Postman là sai. Thông số HTML5 của WHATWG có sẵn tại html.spec.whatwg.org/multipage/ tựa xác định rõ giá trị mặc định của "application / x-www-form-urlencoding" cho thuộc tính enctype của phần tử biểu mẫu. Nói cách khác, "application / x-www-form-urlencoding" là mã hóa mặc định (theo thuật ngữ HTTP Kiểu nội dung) một biểu mẫu web sử dụng để truyền dữ liệu, không phải dữ liệu đa dữ liệu / biểu mẫu. Để gửi yêu cầu bài đăng HTTP khi gửi biểu mẫu với Loại nội dung của dữ liệu đa dữ liệu / biểu mẫu, người ta phải xác định rõ ràng đây là giá trị mã hóa.
VKK

Vì vậy, sự khác biệt giữa dữ liệu biểu mẫu (được nhập với các cặp khóa-giá trị trong Giao diện người dùng Postman) được gửi với Content-Type: application/jsontiêu đề; và dữ liệu thô được nhập dưới dạng json như {foo: bar}với cùng một Content-Type: application/jsontiêu đề?
Inigo

Với dữ liệu biểu mẫu là cặp giá trị khóa, kiểu nội dung là dữ liệu biểu mẫu nhiều phần ngay cả khi bạn chỉ định các tiêu đề & với kiểu nội dung thô sẽ là văn bản hoặc bất cứ điều gì bạn đã chỉ định trong các tiêu đề.
avck

20

nhiều dữ liệu / biểu mẫu

Ghi chú. Vui lòng tham khảo RFC2388 để biết thêm thông tin về tải lên tệp, bao gồm các vấn đề tương thích ngược, mối quan hệ giữa "đa dữ liệu / biểu mẫu dữ liệu" và các loại nội dung khác, các vấn đề về hiệu suất, v.v.

Vui lòng tham khảo phụ lục để biết thông tin về các vấn đề bảo mật cho các biểu mẫu.

Loại nội dung "application / x-www-form-urlencoding" không hiệu quả để gửi số lượng lớn dữ liệu nhị phân hoặc văn bản có chứa các ký tự không phải ASCII. Loại nội dung "nhiều dữ liệu / biểu mẫu dữ liệu" nên được sử dụng để gửi biểu mẫu có chứa tệp, dữ liệu không phải ASCII và dữ liệu nhị phân.

Loại nội dung "nhiều dữ liệu / biểu mẫu dữ liệu" tuân theo các quy tắc của tất cả các luồng dữ liệu MIME nhiều phần như được nêu trong RFC2045 . Định nghĩa của "nhiều dữ liệu / biểu mẫu dữ liệu" có sẵn tại sổ đăng ký [IANA].

Thông báo "nhiều dữ liệu / biểu mẫu dữ liệu" chứa một loạt các phần, mỗi phần đại diện cho một điều khiển thành công. Các phần được gửi đến tác nhân xử lý theo cùng thứ tự các điều khiển tương ứng xuất hiện trong luồng tài liệu. Ranh giới một phần không nên xảy ra trong bất kỳ dữ liệu nào; làm thế nào điều này được thực hiện nằm ngoài phạm vi của đặc điểm kỹ thuật này.

Như với tất cả các loại MIME nhiều phần, mỗi phần có một tiêu đề "Kiểu nội dung" tùy chọn mặc định là "văn bản / thuần túy". Tác nhân người dùng nên cung cấp tiêu đề "Kiểu nội dung", kèm theo tham số "bộ ký tự".

ứng dụng / x-www-form-urlencoding

Đây là loại nội dung mặc định. Các biểu mẫu được gửi với loại nội dung này phải được mã hóa như sau:

Tên và giá trị kiểm soát được thoát. Các ký tự không gian được thay thế bằng +', and then reserved characters are escaped as described in [RFC1738], section 2.2: Non-alphanumeric characters are replaced by% HH ', ký hiệu phần trăm và hai chữ số thập lục phân đại diện cho mã ASCII của ký tự. Các ngắt dòng được biểu diễn dưới dạng các cặp "CR LF" (nghĩa là, %0D%0A'). The control names/values are listed in the order they appear in the document. The name is separated from the value bycác cặp tên / giá trị được phân tách với nhau bằng `& '.

application/x-www-form-urlencodedPhần thân của thông điệp HTTP được gửi đến máy chủ về cơ bản là một chuỗi truy vấn khổng lồ - các cặp tên / giá trị được phân tách bằng ký hiệu (&) và các tên được phân tách khỏi các giá trị bằng ký hiệu bằng (=). Một ví dụ về điều này sẽ là:

MyVariableOne=ValueOne&MyVariableTwo=ValueTwo

Các loại nội dung "application / x-www-form-urlencoded" là không hiệu quả cho việc gửi một lượng lớn dữ liệu nhị phân hoặc văn bản có chứa các ký tự ASCII. Loại nội dung "nhiều dữ liệu / biểu mẫu dữ liệu" nên được sử dụng để gửi biểu mẫu có chứa tệp, dữ liệu không phải ASCII và dữ liệu nhị phân.


15

Dưới đây là một số ví dụ bổ sung để xem văn bản thô mà Postman chuyển trong yêu cầu. Bạn có thể thấy điều này bằng cách mở bảng điều khiển Postman:

nhập mô tả hình ảnh ở đây

mẫu dữ liệu

Tiêu đề

content-type: multipart/form-data; boundary=--------------------------590299136414163472038474

Thân hình

key1=value1key2=value2

x-www-form-urlencoding

Tiêu đề

Content-Type: application/x-www-form-urlencoded

Thân hình

key1=value1&key2=value2

Văn bản thô / đơn giản

Tiêu đề

Content-Type: text/plain

Thân hình

This is some text.

Nguyên json

Tiêu đề

Content-Type: application/json

Thân hình

{"key1":"value1","key2":"value2"}
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.