什么是HTTP中的“406-Not Accepled Response”?

时间:2013-01-10 06:13:43

标签: json rest http http-response-codes http-status-code-406

在我的Ruby on Rails应用程序中,我尝试以REST格式通过POSTMAN Base64客户端上传图像。当我发布图像时,我得到 406 Not Acceptable Response 。当我检查我的数据库时,图像就在那里并成功保存。

出现此错误的原因是什么,我需要在标题中指定哪些内容?

我的要求:

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

9 个答案:

答案 0 :(得分:238)

您的操作没有失败。

您的后端服务表示客户端请求中的接受 HTTP标头中未提供它返回的响应类型。

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

  1. 找出服务返回的响应(内容类型)。
  2. 在您的请求中提供此内容类型(内容类型)。
  3. http://en.wikipedia.org/wiki/HTTP_status_code - > 406

答案 1 :(得分:38)

  

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

当服务器无法使用请求中指定的accept-header进行响应时,会发生

406。 在您的情况下,服务器可能无法接受响应的application / json。

答案 2 :(得分: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

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

答案 3 :(得分:2)

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

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

这发生在我身上......绊了我一会儿。在浏览器中查看>开发者模式>网络显示了它。

答案 4 :(得分:2)

就我而言,我补充道:

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

完全解决了我的问题。

答案 5 :(得分:2)

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

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

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

谢谢你让我走上了路!

答案 8 :(得分:-1)

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

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

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