2012-11-07 3 views
0

, POSTPATCHx-www-form-urlencoded 및 JSON 형식 모두에서 자원 표현을 허용 할 수있는 웹 응용 프로그램을 구축 중입니다. 다른 형식으로 요청 본문을 수신 한 경우 415 응답과 함께 허용 할 형식을 선언하는 추가 데이터 (응답의 필수 항목 인 Allow: 헤더와 유사한 방식으로)를 보내고 싶습니다. 나는 한 사람의 대답을 HTTP 406 and 415 error codes에 보았습니다. 응답하는 사람이 그런 메커니즘이 정의되어 있는지 알지 못했습니다. RFC 2616은이 점에 관해서 아무 것도 언급하지 않았고 일부 인터넷 검색은 아무 것도 나타나지 않습니다.RESTful 웹 응용 프로그램에서 415 오류로 적절히 응답

요청 헤더로 정의되어 있더라도 Accept:을 사용하고 싶습니다. 이 응답을 위해 다시 사용하는 것이 가장 적합한 것처럼 보입니다. 사람들은 동의합니까? 누구든지 더 좋은 제안이 있습니까?

편집 : 나는 Specify supported media types when sending "415 unsupported media type"을 발견했는데 특별히 이에 대한 표준이 있는지 묻습니다. 정확하고 받아 들여진 대답은 기본적으로 이 아니고이지만 응답자도 저와 동일한 아이디어를 가지고 있습니다. Accept는이 정보를 제공하는 데 사용할 좋은 헤더 일 것입니다. 그러면 a messageJulian Reschke에서 HTTP 작업 그룹으로 연결되어 응답에 Accept: 헤더를 전송해야한다는 것을 정의해야하는지 묻는 메시지가 표시됩니다. 그 이메일은 오직 하나의 응답만을 받았고, 그것이 필요하고 Accept는 적절하다고 생각했다. 내가 는이 Accept 헤더를 보낼 허용 오전 만약 내가 요구 하진 않았어

참고, 모든 헤더는, 어느 방향으로 전송 될 수 있지만 사양에 정의 된 중개인에 의미 (의미)가있다 X-이라는 접두어가 붙지 않은 예상치 못한 헤더는 HTTP의 향후 버전과 충돌 할 수 있습니다. 이것은 나를 괴롭히지 않는다.

+0

내 모든 열린 질문은 여전히 ​​수용 가능한 대답을 기다리고 있습니다. 나는 그들에게 게시 된 새로운 답변을보고 싶어합니다. –

+0

그러면 아마도 받아 들일 수있는 방식으로 대답 할 수있는 질문을해야 할 것입니다. –

답변

1

앞서 말씀 드렸듯이 Accept은 요청 헤더입니다. 응답에 사용하는 것은 입니다.입니다. quote Wikipedia으로

,

내용 협상이되도록 동일한 URI에서 (보다 일반적으로 또는 리소스 표현) 다른 문서의 버전을 제공하기 위해 그것을 가능하게하는 HTTP 사양에 정의 된 메커니즘입니다 사용자 에이전트는 자신의 능력에 가장 적합한 버전을 지정할 수 있습니다.

그래서 그것은 어떤 미디어 유형 그가 Accept을 할 수있는 요청에 말한다 클라이언트입니다. 서버가이 미디어 유형을 전달할 수없는 경우 그는 406 Not Acceptable으로 응답합니다.

클라이언트는 요청 된 리소스의 반환 된 표현을 처리 할 수 ​​있어야하므로 이해할 수있는 미디어 유형을 지정해야합니다.클라이언트가 정말 어떤 미디어 유형을 적용하려는 경우이 서버도에 대한 적절한 Content-Type 응답 헤더를 설정합니다

Accept: */* 

을 설정할 수 있습니다

Accept: application/json, application/xml, x-www-form-urlencoded 

: 그것은 여러 미디어 유형에서 지정할 수 있습니다 그러한 요청.

+0

_ "요청에 따라 수락 할 수있는 미디어 유형을 알려주는 클라이언트가 있습니다. 서버가이 미디어 유형을 제공 할 수없는 경우에는 415 지원되지 않는 미디어 유형으로 응답합니다."_ -하지만 _server_가 주어진 'Content-Type'을 이해하지 못한다고 응답한다. – CodeCaster

+0

서버는 상태를 415로 설정합니다. 원하는 것은 서버가 이해할 수있는 것을 말해주는 것입니다. HTTP에는이 방법이 없습니다. –

+1

@Tichodroma 아니요, @CodeCaster가 답변에서 실수를 수정하고 있습니다. 당신이 말했습니다 _ "서버가이 미디어 유형을 전달할 수 없다면 그는 '415 지원되지 않는 미디어 유형'으로 응답합니다."_ 서버는 Accept 요청 헤더 조건을 이행 할 수없는 경우 대신 '406 Not Acceptable'을 보내야합니다. 415 응답은 내가 설명한 상황에서 정확합니다. –

0

인식 할 수없는 콘텐츠 유형을받는 것은 대부분 현재 클라이언트를 서비스에 구현 한 개발자가 제공 한 것입니다. 서버가 지원되는 콘텐츠 형식을 알리는 메커니즘이 없으므로 메시지 본문에서 지원하는 형식을 언급 할 수 있습니다.

0

나는 이것을하기위한 표준 메커니즘을 알지 못하지만 대체물 헤더 http://www.ietf.org/rfc/rfc2295.txt을 약간 재사용하여 원하는 것을 할 수 있습니다.

+0

어떻게 작동하는지 이해할 수 없습니다. Alternates는 다른 표현의 URI를 제공합니다. 클라이언트에게 요청 본문이 어떤 형식인지 알려주는 방법을 찾고 있습니다. 아이디어를 더 자세히 설명하려면 대답을 확장하십시오. –

관련 문제