Что такое "406-Не приемлемый ответ" в HTTP?
В моем приложении Ruby on Rails я попытался загрузить изображение через клиент POSTMAN REST в Base64. Когда я отправляю изображение, я получаю 406 недопустимый ответ. Когда я проверил свою базу данных, изображение было там и было успешно сохранено.
В чем причина этой ошибки, есть ли что-нибудь, что мне нужно указать в моем заголовке?
Мой запрос:
URL --- http://localhost:3000/exercises.json
Заголовок:
Content-Type - application/json
Исходные данные:
{
"exercise": {
"subbodypart_ids": [
"1",
"2"
],
"name": "Exercise14"
},
"image_file_name": "Pressurebar Above.jpg",
"image":"******base64 Format*******"
}
Ответы
Ответ 1
Ваша операция не сработала.
В вашей серверной службе указано, что возвращаемый тип ответа не указан в заголовке Accept HTTP в запросе вашего клиента.
Ссылка: http://en.wikipedia.org/wiki/List_of_HTTP_header_fields
- Узнайте ответ (тип контента), возвращаемый службой.
- Предоставьте это (тип содержимого) в своем заголовке Accept Accept.
http://en.wikipedia.org/wiki/HTTP_status_code → 406
Ответ 2
406 Неприемлемо Ресурс, идентифицированный запросом, способен генерировать объекты ответа, которые имеют характеристики контента, а не приемлемый в соответствии с принимаемыми заголовками, отправленными в запросе.
406 происходит, когда сервер не может ответить заголовком accept, указанным в запросе.
В вашем случае кажется, что приложение /json для ответа может быть неприемлемым для сервера.
Ответ 3
Вы упомянули, что используете Ruby on Rails в качестве бэкэнд. Вы не разместили код для соответствующего метода, но я предполагаю, что он выглядит примерно так:
def create
post = Post.create params[:post]
respond_to do |format|
format.json { render :json => post }
end
end
Измените его на:
def create
post = Post.create params[:post])
render :json => post
end
И это решит вашу проблему. Это сработало для меня:)
Ответ 4
Вы также можете получить ответ 406, когда недействительные файлы cookie сохраняются или ссылаются в браузере - например, при запуске сервера Rails в режиме Dev локально.
Если вам удалось запустить два разных проекта на одном и том же порту, браузер может ссылаться на файл cookie с другого сеанса localhost.
Это случилось со мной... помогло мне на минутку. В браузере > Режим разработчикa > Сеть показала его.
Ответ 5
В моем случае я добавил:
Content-Type: application/x-www-form-urlencoded
полностью разрешил мою проблему.
Ответ 6
"Иногда" это может означать, что на сервере произошла внутренняя ошибка, и он хотел ответить сообщением об ошибке (например, 500 с полезной нагрузкой JSON), но поскольку заголовки запроса не сказали, что он принял JSON, вместо этого он возвращает 406. Пойди разберись. (в данном случае: веб-приложение с весенней загрузкой).
В этом случае ваша операция не удалась. Но сообщение об ошибке было скрыто другим.
Ответ 7
const request = require('request');
const headers = {
'Accept': '*/*',
'User-Agent': 'request',
};
const options = {
url: "https://example.com/users/6",
headers: headers
};
request.get(options, (error, response, body) => {
console.log(response.body);
});
Ответ 8
Если вы используете request.js, вы можете использовать следующее:
var options = {
url: 'localhost',
method: 'GET',
headers:{
Accept: '*/*'
}
}
request(options, function (error, response, body) {
...
})