Что такое "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) {
  ...
})