HTTP에서“406-Not Acceptable Response”란 무엇입니까?


185

Ruby on Rails 애플리케이션에서 POSTMAN REST 클라이언트를 통해 이미지를 Base64 형식 으로 업로드하려고했습니다 . 이미지를 게시하면 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*******"
}

답변:


263

작업이 실패하지 않았습니다.

백엔드 서비스가 리턴하는 응답 유형이 클라이언트 요청의 HTTP 승인 헤더에 제공되지 않는다고 말합니다.

참조 : http://en.wikipedia.org/wiki/List_of_HTTP_header_fields

  1. 서비스에서 반환 한 응답 (콘텐츠 유형)을 찾으십시오.
  2. 요청 수락 헤더에이 (콘텐츠 유형)을 제공하십시오.

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


6
안녕하세요, "서비스가 반환 한 응답 (컨텐츠 유형)을 찾으십시오"라고 말할 때? 이것을 어떻게 확인할 수 있습니까? 나는 PHP 파일에서 json을 반환하므로 콘텐츠 유형이 json이라고 가정합니다 (또는 PHP 파일의 헤더에 이것을 지정해야합니까?) 또한 요청 헤더 에이 내용 유형을 'Accept'와 같이 제공했습니다. 'application / json'. 이것이 맞습니까? 감사합니다
Sarah

41

406 Not Acceptable 요청에 의해 식별 된 리소스는 요청에서 전송 된 accept 헤더에 따라 허용 할 수없는 컨텐트 특성을 가진 응답 엔터티 만 생성 할 수 있습니다.

406은 서버가 요청에 지정된 수락 헤더로 응답 할 수 없을 때 발생합니다. 귀하의 경우 응답을위한 application / json이 서버에 적합하지 않을 수 있습니다.


7
헤더를 제거하지 않은 경우 서버에 적합한 다른 헤더를 제공해야합니다. en.wikipedia.org/wiki/…
ashutosh raina

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

유효하지 않은 쿠키가 브라우저에 저장되거나 참조 될 때 (예 : Dev 모드에서 Rails 서버를 로컬로 실행할 때) 406 응답을받을 수도 있습니다.

동일한 포트에서 두 개의 다른 프로젝트를 실행 한 경우 브라우저는 다른 로컬 호스트 세션에서 쿠키를 참조 할 수 있습니다.

이것은 나에게 일어났다. .. 나를 잠시 동안 위로 ipped 다. 브라우저> 개발자 모드> 네트워크를 보면 그것을 보여줍니다.


2

"때로는"이것은 서버에 내부 오류가 있고 오류 메시지 (예 : JSON 페이로드가있는 500)로 응답하려고했지만 요청 헤더가 JSON을 수락한다고 말하지 않았기 때문에 대신 406을 반환합니다. 그림을 이동. (이 경우 : spring boot webapp).

이 경우 작업이 실패했습니다. 그러나 실패 메시지는 다른 사람에 의해 가려졌습니다.


1

제 경우에는 다음을 추가했습니다.

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

내 문제를 완전히 해결했습니다.


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으로 응답하도록 설정되어 있음) 컨트롤러 에이 주석을 추가합니다.

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

길을 열어 주셔서 감사합니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.