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

в моем приложении Ruby on Rails я попытался загрузить изображение через почтальона остальное клиент в 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*******"
}

7 ответов


Ваша операция не удастся.

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

Ref:http://en.wikipedia.org/wiki/List_of_HTTP_header_fields

  1. узнайте ответ (тип контента), возвращаемый службой.
  2. укажите это (тип контента) в вашем запросе Accept заголовок.

http://en.wikipedia.org/wiki/HTTP_status_code -> 406


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

406 происходит, когда сервер не может ответить с заголовком accept, указанным в запросе. В вашем случае кажется, что application / 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

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


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

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

Это случилось со мной...подставил мне подножку на минуту. Просмотр в браузере > режим разработчика > сеть показал это.


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

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

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


"иногда" это может означать, что сервер имел внутреннюю ошибку и хотел ответить сообщением об ошибке (например, 500 с полезной нагрузкой JSON), но поскольку заголовки запросов не сказали, что он принял JSON, он возвращает 406 вместо этого. Иди разберись. (в этом случае: spring boot webapp).

в этом случае, ваша операция не удастся. Но сообщение об отказе было затемнено другим.


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