file_get_contents («php: // input») или $ HTTP_RAW_POST_DATA, какой из них лучше получить тело запроса JSON?

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" .

Ссылка: http://php.net/manual/en/wrappers.php.php

php: // input – это поток только для чтения, который позволяет вам считывать необработанные данные из тела запроса. В случае запросов POST предпочтительнее использовать вход php: // вместо $ HTTP_RAW_POST_DATA, поскольку он не зависит от специальных директив php.ini . Более того, для тех случаев, когда по умолчанию HTTP_RAW_POST_DATA не заполняется по умолчанию, это потенциально менее энергоемкая альтернатива активации always_populate_raw_post_data.

Источник: http://php.net/manual/en/wrappers.php.php .

file_get_contents (php: // input) – получает необработанные данные POST, и вам нужно использовать это при написании API-интерфейсов и необходимости ввода XML / JSON / …, который не может быть декодирован в $ _POST с помощью PHP :

отправить по почте JSON string

 <input type="button" value= "click" onclick="fn()"> <script> function fn(){ var js_obj = {plugin: 'jquery-json', version: 2.3}; var encoded = JSON.stringify( js_obj ); var data= encoded $.ajax({ type: "POST", url: '1.php', data: data, success: function(data){ console.log(data); } }); } </script> 

1.php

 //print_r($_POST); //empty!!! don't work ... var_dump( file_get_contents('php://input')); 

Обычные правила должны применяться для отправки запроса. Если запрос заключается в получении информации (например, результат «поиска» частичного поиска или новая страница для отображения и т. Д.), Вы можете использовать GET. Если отправляемые данные являются частью запроса на изменение (обновление базы данных, удаление записи и т. Д.), Используйте POST.

На стороне сервера нет оснований использовать исходный ввод, если вы не хотите захватить весь блок сообщений / получения данных за один раз. Вы можете получить нужную информацию с помощью массивов _GET / _POST, как обычно. Библиотеки AJAX, такие как MooTools / jQuery, будут обрабатывать сложную часть выполнения фактических вызовов AJAX и данных формы кодирования в соответствующие форматы для вас.

Для данных JSON намного проще ПОСТ-ТАК как «тип приложения / json». Если вы используете GET, вам нужно URL-кодировать JSON в параметре, и это довольно грязно. Кроме того, при POST не существует ограничения по размеру. Размер GET, если он ограничен (максимум 4K).

Ваш второй вопрос прост, GET имеет ограничение по размеру в 1-2 килобайта как на стороне сервера, так и на стороне браузера, поэтому любые большие объемы данных, которые вы должны были бы отправлять через POST.