HTTP中的“ 406-不可接受的响应”是什么?


185

在我的Ruby on Rails应用程序中,我尝试通过POSTMAN REST客户端以Base64格式上传图像。发布图片时,我收到406不可接受的响应。当我检查数据库时,该图像在那里并且已成功保存。

此错误的原因是什么,我需要在标题中指定任何内容吗?

我的请求:

网址- 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*******"
}

Answers:


263

您的操作没有失败。

您的后端服务说您的客户端请求中的“ 接受 HTTP”标头中没有提供返回的响应类型。

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

  1. 找出服务返回的响应(内容类型)。
  2. 在您的请求Accept标头中提供此(内容类型)。

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


5
嗨,您说“找出服务返回的响应(内容类型)”吗?我该如何检查?我从php文件返回json,所以我想内容类型将是json(或者我是否需要在php文件的标头中指定此类型?)我也在请求标头中提供了此内容类型,例如“ Accept”: 'application / json'。这是正确的吗?谢谢
莎拉

41

406不可接受请求所标识的资源仅能够生成响应实体,该响应实体具有根据请求中发送的接受标头不可接受的内容特征。

当服务器无法使用请求中指定的接受标头响应时,会发生406。在您的情况下,服务器似乎无法接受响应的application / json。


7
您没有删除标头,则必须提供服务器可以接受的另一标头。en.wikipedia.org/wiki/...
Ashutosh说雷纳

7

您提到您使用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

它将解决您的问题。它对我有用:)


2

当浏览器中存储或引用了无效的cookie时,例如,在本地以Dev模式运行Rails服务器时,您也会收到406响应。

如果您碰巧在同一端口上运行两个不同的项目,则浏览器可能会引用来自不同本地主机会话的cookie。

这件事发生在我身上……绊倒了我一分钟。在浏览器中查看>开发人员模式>网络显示它。


2

“有时”这可能意味着服务器出现内部错误,并希望以错误消息(例如:带有JSON有效负载的500)进行响应,但是由于请求标头没有说它接受JSON,因此它返回了406。去搞清楚。(在这种情况下:spring boot webapp)。

在这种情况下,您的操作确实失败了。但是失败消息被另一个消息遮盖了。



1
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

如果您使用的是“ request.js”,则可以使用以下内容:

var options = {
  url: 'localhost',
  method: 'GET',
  headers:{
    Accept: '*/*'
  }
}

request(options, function (error, response, body) {
  ...
})

0

就.NET-Core中的API而言,该api设置为可与XML配合使用(默认情况下设置为使用JSON响应),因此我在Controller中添加了以下注释:

[Produces("application/xml")]
public class MyController : ControllerBase {...}

谢谢您让我走上正轨!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.