Подтвердить что ты не робот

Загрузка файлов с использованием метода GET

Как мы все знаем, загрузка файлов чаще всего выполняется с использованием метода POST. Итак, почему метод GET не может использоваться для загрузки файлов? Существует ли конкретный запрет на загрузку HTTP GET?

4b9b3361

Ответ 1

Запросы GET могут содержать тело объекта

RFC 2616 не препятствует тому, чтобы тело объекта было частью запроса GET. Это часто неправильно понимается, потому что PHP путает воды с его слабо названным супертонбалом $_GET. $_GET технически не имеет ничего общего с методом запроса HTTP GET - это не что иное, как список значений ключа-значения параметров, кодированных по URL-адресу, из строки запроса запроса URI. Вы можете получить доступ к массиву $_GET, даже если запрос был выполнен через POST/PUT/etc. Странно, правда? Не очень хорошая абстракция, не так ли?

Почему тело объекта GET является плохой идеей

Итак, что говорит о методе GET... хорошо:

В частности, была установлена ​​конвенция о том, что методы GET и HEAD НЕ ДОЛЖНЫ иметь значение принятия иного действия, кроме поиска. Эти методы следует считать безопасными.

Поэтому важно, чтобы GET был уверен, что любой запрос GET безопасен. Тем не менее, запрет только "НЕ ДОЛЖЕН"... технически HTTP по-прежнему позволяет запросам GET приводить к действию, которое не является строго основанный на "поиске".

Конечно, с семантической точки зрения, используя метод с именем GET для выполнения действия, отличного от "получение" ресурса тоже не имеет особого смысла.

Когда тело объекта GET ошибочно ошибочно

Что касается идемпотенции, спецификация говорит:

Методы могут также иметь свойство "идемпотенции" в этом (помимо ошибок или проблем с истечением срока) побочные эффекты N > 0 одинаковых запросов такие же, как для одного запроса. Методы GET, HEAD, PUT и DELETE делятся этим свойством.

Это означает, что метод GET не должен иметь разных побочных эффектов для нескольких запросов для тот же ресурс. Таким образом, независимо от тела объекта, присутствующего как часть запроса GET, побочные эффекты всегда должны быть одинаковыми. В условиях неспециалиста это означает, что если вы отправляете GET с телом лица 100 раз сервер не может создать 100 новых ресурсов. Отправляемый раз или 100 раз запрос должен имеют тот же результат. Это серьезно ограничивает полезность метода GET для отправки тела сущностей.

Когда вы сомневаетесь, всегда возвращайтесь к испытаниям безопасности/идемпотенции при оценке эффективности метода и его побочных эффектов.

Ответ 2

В случае GET-метода

  • Добавляет данные формы в URL-адрес в парах имя/значение, а длина URL-адреса ограничена (3000 символов).
  • Содержимое файла не может быть помещено в параметр URL с помощью формы. Используйте POST
  • В методе Get метод value, добавляет `? ' к нему, затем добавляет набор данных формы, закодированный с использованием типа контента "application/x-www-form-urlencoded". Затем пользовательский агент пересекает ссылку на этот URI. В этом случае данные формы ограничены кодами ASCII.

Итак, эта загрузка файла невозможна в методе GET

Ответ 3

В случае необходимости использовать $_GET['input_name'] с методом post в PHP просто передайте параметры в действии, например

<form action="pageName.php?parameterName=<?php echo $values;?>" 
method="post" enctype="multipart/form-data">