В моем приложении 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*******"
}
Ваша операция не сработала.
В вашей серверной службе указано, что возвращаемый тип ответа не указан в заголовке Accept HTTP в запросе вашего клиента.
Ссылка: http://en.wikipedia.org/wiki/List_of_HTTP_header_fields
406 Неприемлемо Ресурс, идентифицированный запросом, способен генерировать объекты ответа, которые имеют характеристики контента, а не приемлемый в соответствии с принимаемыми заголовками, отправленными в запросе.
406 происходит, когда сервер не может ответить заголовком accept, указанным в запросе. В вашем случае кажется, что приложение /json для ответа может быть неприемлемым для сервера.
Вы упомянули, что используете 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
И это решит вашу проблему. Это сработало для меня:)
В моем случае я добавил:
Content-Type: application/x-www-form-urlencoded
полностью разрешил мою проблему.
Вы также можете получить ответ 406, когда недействительные файлы cookie сохраняются или ссылаются в браузере - например, при запуске сервера Rails в режиме Dev локально.
Если вам удалось запустить два разных проекта на одном и том же порту, браузер может ссылаться на файл cookie с другого сеанса localhost.
Это случилось со мной... помогло мне на минутку. В браузере > Режим разработчикa > Сеть показала его.
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);
});