私の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*******"
}
あなたの操作は失敗しませんでした。
あなたのバックエンドサービスはそれが返しているレスポンスタイプがあなたのクライアントリクエストの Accept HTTPヘッダで提供されていないと言っています。
参照: http://en.wikipedia.org/wiki/List_of_HTTP_header_fields
406受け入れられない要求によって識別されたリソースは、要求で送信された受け入れヘッダーに従って受け入れられないコンテンツ特性を持つ応答エンティティを生成することができるだけです。
406は、要求で指定されたaccept-headerでサーバーが応答できないときに発生します。あなたの場合、応答に対する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
そしてそれはあなたの問題を解決します。それは私のために働きました:)
「時々」これはサーバに内部エラーがあり、エラーメッセージ(JSONペイロードの場合は500)で応答したいことを意味しますが、リクエストヘッダはJSONを受け入れなかったので、代わりに406を返します。図に行きます。 (この場合は、スプリングブートWebアプリケーション)。
その場合、あなたの操作は失敗しました。しかし、失敗のメッセージは他の人によって隠されていました。
私の場合は、私が追加しました:
Content-Type: application/x-www-form-urlencoded
私の問題を完全に解決しました。
無効なCookieがブラウザに保存または参照されている場合(たとえば、DevモードでRailsサーバーをローカルで実行している場合など)にも406応答を受け取ることがあります。
同じポートで2つの異なるプロジェクトを実行した場合、ブラウザは異なるlocalhostセッションからのcookieを参照する可能性があります。
これは私に起こった...ちょっと私をつまずいた。ブラウザで見る>開発者モード>ネットワークはそれを示した。
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);
});