file_get_contents("php://input")
или $HTTP_RAW_POST_DATA
- какой лучше для получения тела запроса JSON?
И которые запрашивают тип (GET
или POST
) если я использую для отправки данных JSON при использовании стороны клиента XmlHTTPRequest
?
Мой вопрос был вдохновлен этим ответом: Как отправить JSON на PHP с завихрением
Кавычка из того ответа:
С точки зрения протокола
file_get_contents("php://input")
на самом деле более корректно, так как Вы действительно не обрабатываете http многослойные данные формы так или иначе.
Фактически php: // input
позволяет вам читать необработанные данные POST.
Это менее ресурсоемкая альтернатива $ HTTP_RAW_POST_DATA и не требует каких-либо специальных директив php.ini .
php: // input
недоступен с enctype = "multipart / form-data"
.
Для отправки запроса должны применяться обычные правила. Если запрос предназначен для получения информации (например,частичный результат поиска «подсказка» или новая страница, которая будет отображаться и т. д.), вы можете использовать GET. Если отправляемые данные являются частью запроса на изменение чего-либо (обновление базы данных, удаление записи и т. Д.), Используйте POST.
На стороне сервера нет причин использовать необработанный ввод, если только вы не хотите получить весь блок данных post / get за один раз. Вы можете получить конкретную информацию, которую хотите, через массивы _GET / _POST, как обычно. Библиотеки AJAX, такие как MooTools / jQuery, будут обрабатывать сложную часть выполнения фактических вызовов AJAX и кодирования данных формы в подходящие для вас форматы.
Ваш второй вопрос прост: GET имеет ограничение на размер в 1-2 килобайта как на стороне сервера, так и на стороне браузера, поэтому любые большие объемы данных вам придется отправлять через POST.
Для данных JSON гораздо проще отправить их на POST как тип содержимого "application / json". Если вы используете GET, вам нужно URL-кодировать JSON в параметре, и это немного беспорядочно. Кроме того, при выполнении POST нет ограничений по размеру. Размер GET, если он очень ограничен (максимум 4K).