Что такое «406-неприемлемый ответ» в HTTP?

129

В моем приложении 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*******"
}
Теги:
rest
http

6 ответов

193
Лучший ответ

Ваша операция не сработала.

В вашей серверной службе указано, что возвращаемый тип ответа не указан в заголовке Accept HTTP в запросе вашего клиента.

Ссылка: http://en.wikipedia.org/wiki/List_of_HTTP_header_fields

  • Узнайте ответ (тип контента), возвращаемый службой.
  • Предоставьте это (тип содержимого) в своем заголовке Accept Accept.

http://en.wikipedia.org/wiki/HTTP_status_code → 406

  • 3
    Привет, Когда вы говорите: «Узнайте ответ (тип контента), возвращаемый службой»? Как я могу проверить это? Я возвращаю json из php-файла, поэтому я предполагаю, что тип содержимого будет json (или мне нужно указать это в заголовках php-файла?), Также я предоставил этот тип содержимого в заголовке моего запроса, например, «Accept»: "приложения / JSON. это будет правильно? Спасибо
30

406 Неприемлемо         Ресурс, идентифицированный запросом, способен генерировать объекты ответа, которые имеют характеристики контента, а не приемлемый в соответствии с принимаемыми заголовками, отправленными в запросе.

406 происходит, когда сервер не может ответить заголовком accept, указанным в запросе. В вашем случае кажется, что приложение /json для ответа может быть неприемлемым для сервера.

  • 0
    если я удаляю заголовок, я получаю ошибку ........
  • 6
    Вы не должны удалять заголовок, вам придется указать другой, приемлемый для сервера. en.wikipedia.org/wiki/...
5

Вы упомянули, что используете 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

И это решит вашу проблему. Это сработало для меня:)

1

В моем случае я добавил:

Content-Type: application/x-www-form-urlencoded

полностью разрешил мою проблему.

1

Вы также можете получить ответ 406, когда недействительные файлы cookie сохраняются или ссылаются в браузере - например, при запуске сервера Rails в режиме Dev локально.

Если вам удалось запустить два разных проекта на одном и том же порту, браузер может ссылаться на файл cookie с другого сеанса localhost.

Это случилось со мной... помогло мне на минутку. В браузере > Режим разработчикa > Сеть показала его.

0
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);
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню