web-dev-qa-db-ja.com

HTTPの "406 - Not Acceptable Response"とは何ですか?

私のRuby on Railsアプリケーションでは、POSTMAN _ rest _ clientを通して Base64 形式で画像をアップロードしようとしました。 I POSTイメージが表示されるときは、 406 Not Acceptable Response が返されます。データベースを確認したところ、画像はそこにあり、正常に保存されました。

このエラーの原因は何ですか?ヘッダーに指定する必要があるものはありますか?

私の要求:

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*******"
}
165
Cyber

あなたの操作は失敗しませんでした。

あなたのバックエンドサービスはそれが返しているレスポンスタイプがあなたのクライアントリクエストの Accept HTTPヘッダで提供されていないと言っています。

参照: http://en.wikipedia.org/wiki/List_of_HTTP_header_fields

  1. Serviceから返されたレスポンス(コンテンツタイプ)を見つけます。
  2. リクエストのAcceptヘッダーにこれ(コンテンツタイプ)を入力します。

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

237
TheWhiteRabbit

406受け入れられない要求によって識別されたリソースは、要求で送信された受け入れヘッダーに従って受け入れられないコンテンツ特性を持つ応答エンティティを生成することができるだけです。

406は、要求で指定されたaccept-headerでサーバーが応答できないときに発生します。あなたの場合、応答に対するapplication/jsonはサーバーには受け入れられないかもしれません。

38
ashutosh raina

あなたは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

そしてそれはあなたの問題を解決します。それは私のために働きました:)

7
itamaryu

「時々」これはサーバに内部エラーがあり、エラーメッセージ(JSONペイロードの場合は500)で応答したいことを意味しますが、リクエストヘッダはJSONを受け入れなかったので、代わりに406を返します。図に行きます。 (この場合は、スプリングブートWebアプリケーション)。

その場合、あなたの操作は失敗しました。しかし、失敗のメッセージは他の人によって隠されていました。

2
rogerdpack

私の場合は、私が追加しました:

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

私の問題を完全に解決しました。

2
Kadir Erturk

無効なCookieがブラウザに保存または参照されている場合(たとえば、DevモードでRailsサーバーをローカルで実行している場合など)にも406応答を受け取ることがあります。

同じポートで2つの異なるプロジェクトを実行した場合、ブラウザは異なるlocalhostセッションからのcookieを参照する可能性があります。

これは私に起こった...ちょっと私をつまずいた。ブラウザで見る>開発者モード>ネットワークはそれを示した。

2
etusm
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);
});
0
JP Ventura