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

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



답변

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

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

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

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

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


답변

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

406은 서버가 요청에 지정된 수락 헤더로 응답 할 수 없을 때 발생합니다. 귀하의 경우 응답을위한 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

그리고 그것은 당신의 문제를 해결할 것입니다. 그것은 나를 위해 일했다 🙂


답변

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

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

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


답변

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

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


답변

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

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

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


답변

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