Yêu cầu nhiều phần của http là gì?


300

Tôi đã viết các ứng dụng iPhone một thời gian rồi, gửi dữ liệu đến máy chủ, nhận dữ liệu (thông qua giao thức HTTP) mà không suy nghĩ quá nhiều về nó. Hầu như tôi quen thuộc về mặt lý thuyết với quy trình, nhưng phần tôi không quen thuộc là yêu cầu nhiều phần HTTP. Tôi biết cấu trúc cơ bản của nó, nhưng cốt lõi của nó làm tôi khó hiểu.

Dường như bất cứ khi nào tôi gửi một cái gì đó khác với văn bản thuần túy (như ảnh, nhạc), tôi phải sử dụng một yêu cầu nhiều phần. Ai đó có thể giải thích ngắn gọn cho tôi tại sao nó được sử dụng và lợi thế của nó là gì?

Nếu tôi sử dụng nó, tại sao cách tốt hơn để gửi ảnh theo cách đó?


1
Xem liên kết sau để biết thông tin: http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2
zargarf

Câu trả lời:


286

Yêu cầu nhiều phần HTTP là một yêu cầu HTTP mà các máy khách HTTP xây dựng để gửi tệp và dữ liệu đến Máy chủ HTTP. Nó thường được sử dụng bởi các trình duyệt và máy khách HTTP để tải tệp lên máy chủ.


4
Chỉ muốn thêm rằng các trường dữ liệu mẫu nhiều phần được gửi theo thứ tự . Đây không phải là điều rõ ràng ngay lập tức-- Tôi đã thêm một danh sách các liên kết ở đây: github.com/balderdashy/skipper/blob/master/, Nếu tôi có thời gian để kết hợp một trường hợp thử nghiệm bằng PhantomJS / webkit, tôi sẽ thêm các liên kết ở đó là tốt. Các trình duyệt tuân theo phần này của thông số kỹ thuật, thậm chí xa như IE6.
mikermcneil

88
Phần khó là hiểu tại sao nó được gọi là yêu cầu nhiều phần , thay vì một cái gì đó rõ ràng hơn, như yêu cầu tải lên tệp .
Rafael Eyng 19/03/2015

28
OP muốn một cách tiếp cận triết học và câu trả lời. Câu trả lời này không giải thích phần "tại sao". Đó là phần "phần". Tôi không phải là một người hâm mộ cuồng nhiệt, nhưng tôi cho rằng câu trả lời này không phải là điều OP muốn và tôi đã tìm kiếm.
Saeed Neamati

6
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. NGUỒN GỐC - w3.org/TR/html401/interact/forms.html#h-17.13.4.2
Aditya Aggarwal

2
Thêm thông tin chi tiết với ảnh chụp màn hình firebird
Piyush Chordia

22

Như thông số kỹ thuật chính thức ( https://www.w3.org/Prot Protocol / rfc1341/7_2_Multipart.html ) nói, " một hoặc nhiều bộ dữ liệu khác nhau được kết hợp trong một cơ thể ". Vì vậy, khi ảnh và nhạc được xử lý dưới dạng tin nhắn nhiều phần như được đề cập trong câu hỏi, có thể có một số siêu dữ liệu văn bản đơn giản được liên kết, do đó, yêu cầu chứa các loại dữ liệu khác nhau (nhị phân, văn bản), ngụ ý việc sử dụng nhiều phần.


2
Tôi không nghĩ đó là trường hợp. Khi tải lên một hình ảnh, toàn bộ hình ảnh (bao gồm siêu dữ liệu) sẽ là một bộ dữ liệu trong thân yêu cầu. Đây vẫn là một yêu cầu nhiều phần, ngay cả khi chỉ có một phần trong cơ thể. Bạn cũng có thể tạo một yêu cầu để tải lên nhiều tệp cùng một lúc.
Dario Seidl

1
@DarioSeidl tiêu chuẩn giả định rằng bạn có thể gửi tệp tải lên từ một biểu mẫu web, có thể bao gồm các trường dữ liệu khác ngoài chính tệp tải lên. Chẳng hạn, ngoài tên tệp gốc, người dùng có thể bao gồm một mô tả. Multipart cũng xử lý các đốm nhị phân chung chung bị ngắt kết nối khỏi khái niệm "tệp" có nguồn gốc cụ thể.
Ionoclast Brigham
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.