Що таке багатозахисний запит http?


300

Я вже давно пишу додатки для iPhone, надсилаю дані на сервер, отримую дані (через протокол HTTP), не надто замислюючись про це. Здебільшого я теоретично знайомий з процесом, але частина, з якою я не настільки знайома, - це багатозахисний запит HTTP. Я знаю її основну структуру, але ядро ​​її ухиляється від мене.

Здається, що кожного разу, коли я надсилаю щось інше, ніж звичайний текст (наприклад, фотографії, музику), я повинен використовувати запит на багато частин. Чи може хтось коротко пояснити мені, для чого він використовується і які його переваги?

Якщо я його використовую, чому краще надіслати фотографії таким чином?


1
Інформацію див. За таким посиланням: http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2
zargarf

Відповіді:


286

Багатозахисний запит HTTP - це запит HTTP, який HTTP-клієнти будують для передачі файлів і даних на сервер HTTP. Він зазвичай використовується браузерами та HTTP-клієнтами для завантаження файлів на сервер.


4
Просто хотілося додати, що поля даних багаточастинкової форми надсилаються по порядку . Це не те, що відразу очевидно - я додав тут список посилань: github.com/balderdashy/skipper/blob/master/… Якщо у мене з’явиться час для складання тестового випадку за допомогою PhantomJS / webkit, я додам посилання також. Браузери підкоряються цій частині специфікації, навіть коли IE6.
mikermcneil

88
Важкою частиною є розуміння того, чому його називають багаточастинним запитом , а не чимось більш очевидним, як запит на завантаження файлу .
Рафаель Ейн

28
ОП хотів філософського підходу та відповіді. Ця відповідь не пояснює частину "чому". Це більше про "яку" частину. Я не є великим прихильником прихильності, але я стверджую, що ця відповідь - це не те, чого хотів ОП, і я шукав.
Саїд Неаматі

6
Тип вмісту "application / x-www-form-urlencoded" неефективний для надсилання великої кількості бінарних даних або тексту, що містить символи, що не містять ASCII. Тип вмісту "багаточастинні / форми-дані" слід використовувати для подання форм, що містять файли, дані, що не належать до ASCII, і двійкові дані. ОРИГІНАЛЬНИЙ ДЖЕРЕЛ
Aditya Aggarwal

2
Більш детально з скріншотами firebug тут: cubicrace.com/2016/05/upload-files-https-using-java.html
Піюш Чордія

22

Як зазначається в офіційній специфікації ( https://www.w3.org/Protocols/rfc1341/7_2_Multipart.html ), " один або кілька різних наборів даних об'єднані в одне тіло ". Отже, коли фотографії та музика обробляються як багаточастинні повідомлення, як зазначено у запитанні, ймовірно, є також деякі метадані простого тексту, пов'язані також, таким чином, запит містить різні типи даних (двійкові, текстові), що передбачає використання багаточастин.


2
Я не думаю, що це так. Під час завантаження зображення ціле зображення (включаючи метадані) буде одним набором даних в тілі запиту. Це все-таки багатозахисний запит, навіть якщо в тілі є лише одна деталь. Ви також можете створити запит на завантаження декількох файлів одночасно.
Даріо Сейдл

1
@DarioSeidl стандарт передбачає, що ви можете надсилати завантаження файлів із веб-форми, яка може включати інші поля даних, крім самого завантаження файлу. Наприклад, крім оригінального імені файлу, користувач може містити опис. Multipart також обробляє загальні двійкові краплі, від'єднані від концепції певного вихідного "файлу".
Іонокласт Брігам
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.