RESTful API 메서드 헤드 및 옵션


93

저는 PHP로 애플리케이션을위한 RESTful API 모듈을 작성하고 있으며 동사 HEADOPTIONS.

  • OPTIONS  주어진 리소스에 대해 사용 가능한 HTTP 동사를 검색하는 데 사용됩니까?
  • HEAD 주어진 리소스를 사용할 수 있는지 여부를 결정하는 데 사용됩니까?

누군가이 동사들을 명확히 * 할 수 있다면, 그것은 대단히 감사 할 것입니다.

* 설명은 HTTP 동사의 용도를 변경하는 RESTful API 아키텍처에 관한 것입니다. 나는 이후 모두 그 실현에 왔어요 HEAD하고 OPTIONS해야 하지 다시 작정, 그리고 어떤 HTTP 응용 프로그램이 정상적으로 대신 예상대로 작동합니다. 오, 우리가 2 년 안에 어떻게 성장하는지.


HTTP 사양은 웹에서 쉽게 사용할 수 있기 때문일 수 있습니다.
고든

@Gordon-충분히 공평하고 RESTful API 서비스가 기존 HTTP 사양을 활용하기위한 것이라는 것을 이해하지만 구현 세부 사항에 대해 일부 편차가 있다고 가정했습니다. 내 잘못이야.
Dan Lugg 2011

15
대부분의 사양은 웹에서 쉽게 확인할 수 있습니다. SO에 대한 질문은 문서 이상의 설명을위한 것입니다. 이것이 맞습니다.
Andrew Ensley 2012-09-25

답변:


60

기준 : http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

9.2 옵션

OPTIONS 메소드는 Request-URI로 식별되는 요청 / 응답 체인에서 사용할 수있는 통신 옵션에 대한 정보 요청을 나타냅니다. 이 방법을 사용하면 클라이언트가 리소스 작업을 암시하거나 리소스 검색을 시작하지 않고도 리소스와 관련된 옵션 및 / 또는 요구 사항 또는 서버의 기능을 결정할 수 있습니다.

이 메서드에 대한 응답은 캐시 할 수 없습니다.

OPTIONS 요청에 엔티티 본문이 포함 된 경우 (Content-Length 또는 Transfer-Encoding의 존재로 표시됨) 미디어 유형은 Content-Type 필드로 표시되어야합니다. 이 사양은 이러한 본문에 대한 용도를 정의하지 않지만 HTTP에 대한 향후 확장은 OPTIONS 본문을 사용하여 서버에서 더 자세한 쿼리를 만들 수 있습니다. 그러한 확장을 지원하지 않는 서버는 요청 본문을 버릴 수 있습니다.

Request-URI가 별표 ( "*") 인 경우 OPTIONS 요청은 특정 자원이 아닌 일반적으로 서버에 적용됩니다. 서버의 통신 옵션은 일반적으로 리소스에 따라 다르므로 "*"요청은 "ping"또는 "no-op"유형의 방법으로 만 유용합니다. 클라이언트가 서버의 기능을 테스트하도록 허용하는 것 외에는 아무것도하지 않습니다. 예를 들어 HTTP / 1.1 준수 (또는 부족)에 대해 프록시를 테스트하는 데 사용할 수 있습니다.

Request-URI가 별표가 아닌 경우 OPTIONS 요청은 해당 리소스와 통신 할 때 사용할 수있는 옵션에만 적용됩니다.

200 응답은 서버에 의해 구현되고 해당 자원에 적용 할 수있는 선택적 기능 (예 : 허용)을 나타내는 헤더 필드를 포함해야합니다 (이 사양에 정의되지 않은 확장을 포함). 응답 본문이 있으면 통신 옵션에 대한 정보도 포함해야합니다 (SHOULD). 이러한 본문의 형식은이 사양에 정의되어 있지 않지만 향후 HTTP 확장에 의해 정의 될 수 있습니다. 콘텐츠 협상은 적절한 응답 형식을 선택하는 데 사용될 수 있습니다. 응답 본문이 포함되지 않은 경우 응답은 필드 값이 "0"인 Content-Length 필드를 포함해야합니다.

Max-Forwards 요청 헤더 필드는 요청 체인의 특정 프록시를 대상으로하는 데 사용될 수 있습니다. 프록시가 요청 전달이 허용 된 absoluteURI에 대한 OPTIONS 요청을 수신하면 프록시는 Max-Forwards 필드를 확인해야합니다. Max-Forwards 필드 값이 0 ( "0")이면 프록시는 메시지를 전달하지 않아야합니다. 대신 프록시는 자체 통신 옵션으로 응답해야합니다. Max-Forwards 필드 값이 0보다 큰 정수이면 프록시는 요청을 전달할 때 필드 값을 줄여야합니다. 요청에 Max-Forwards 필드가없는 경우 전달 된 요청은 Max-Forwards 필드를 포함하지 않아야합니다.

9.4 헤드

HEAD 메서드는 서버가 응답에서 메시지 본문을 반환하지 않아야한다는 점을 제외하고 GET과 동일합니다. HEAD 요청에 대한 응답으로 HTTP 헤더에 포함 된 메타 정보는 GET 요청에 대한 응답으로 전송 된 정보와 동일해야합니다 (SHOULD). 이 방법은 엔티티 바디 자체를 전송하지 않고 요청이 암시하는 엔티티에 대한 메타 정보를 얻는 데 사용할 수 있습니다. 이 방법은 유효성, 접근성 및 최근 수정을 위해 하이퍼 텍스트 링크를 테스트하는 데 자주 사용됩니다.

HEAD 요청에 대한 응답은 응답에 포함 된 정보가 해당 리소스에서 이전에 캐시 된 엔티티를 업데이트하는 데 사용될 수 있다는 점에서 캐시 가능할 수 있습니다. 새 필드 값이 캐시 된 엔티티가 현재 엔티티와 다르다는 것을 나타내는 경우 (Content-Length, Content-MD5, ETag 또는 Last-Modified의 변경으로 표시됨) 캐시는 캐시 항목을 오래된 것으로 취급해야합니다.


1
포괄적 인 견적에 대해 @sdolgy에게 감사드립니다. 그러나, 실제로 (을 해야 많은 성공의 RESTful API 모듈이 HTTP의 모든 표준을 준수하거나 허용이)는 슬림 이러한 작업에 대한 반응은? 게으름 때문이 아니라 호기심 때문입니다. 준수하는 데 필요한 모든 것을 구현할 것입니다.
Dan Lugg 2011

2
당신이 당신의 삶을 더 쉽게 만들기 위해 문서화 된 표준과 어느 정도의 일치를 유지하려고 노력해야합니다. RFC 년대 함께 정렬에 좋은 것입니다
sdolgy

감사합니다 @sdolgy. 링크 된 문서를 브리핑 한 후 마지막에 CONNECT동사가 있음을 알았습니다 . RESTful 인증을 위해 해당 방법을 사용하는 것이 좋지 않은 선택입니까?
Dan Lugg 2011

그것이 의도 된 목적인지 확실하지 않습니다. "이 사양은 터널로 동적으로 전환 할 수있는 프록시 (예 : SSL 터널링 [44])와 함께 사용하기 위해 CONNECT 메소드 이름을 예약합니다."... 다른 질문을 게시하는 데 도움이 될 수 있습니다. 그것에 대해 stackexchange.com 사이트의 ...
sdolgy

2
@DanLugg 애플리케이션이 CONNECTSSL 터널링 방식으로 활용되지 않을 수 있지만 애플리케이션 소비자가 CONNECTRFC에 지정된 방식으로 구현 된 프록시를 보유하고 있다면 어떤 일이 발생할지 상상해 보십시오. 신청.
Steve Buzonas 2014 년

82

OPTIONS메서드는 API 에 대한 정보를 반환 합니다 (메서드 / 콘텐츠 유형).

HEAD메서드는 리소스 에 대한 정보 (버전 / 길이 / 유형)를 반환합니다.

서버 응답

옵션

HTTP/1.1 200 OK
Allow: GET,HEAD,POST,OPTIONS,TRACE
Content-Type: text/html; charset=UTF-8
Date: Wed, 08 May 2013 10:24:43 GMT
Content-Length: 0

머리

HTTP/1.1 200 OK
Accept-Ranges: bytes
Content-Type: text/html; charset=UTF-8
Date: Wed, 08 May 2013 10:12:29 GMT
ETag: "780602-4f6-4db31b2978ec0"
Last-Modified: Thu, 25 Apr 2013 16:13:23 GMT
Content-Length: 1270
  • OPTIONS 리소스가 지원하는 HTTP 메서드 식별, 예를 들어 PUT를 통해 삭제하거나 업데이트 할 수 있습니까?
  • HEAD자원이 변경되었는지 확인합니다. 이것은 리소스의 캐시 된 버전을 유지할 때 유용합니다.
  • HEAD 비용이 많이 드는 검색을 수행하기 전에 리소스에 대한 메타 데이터 (예 : 미디어 유형 또는 크기) 검색
  • HEAD, OPTIONS리소스가 존재하고 액세스 가능한지 테스트합니다. 예를 들어, 응용 프로그램에서 사용자가 제출 한 링크의 유효성 검사

다음 은 HEAD 및 OPTIONS가 RESTful 아키텍처에 어떻게 적용되는지에 대한 훌륭하고 간결한 기사입니다.


9
대단한 대답, 너무 나쁘면 파티에 늦은 벌금을 지불합니다. 복사 붙여 넣기 허용 답변은 RESTful 아키텍처에서 이러한 동사의 위치를 ​​구체적으로 다루기 시작하지도 않습니다.
Todd Menier

1
당신의 링크는 죽었습니다. 여기에 마지막 스냅 샷입니다 : web.archive.org/web/20160528151316/https://...
kolobok

29

OPTIONS는 "이 자원에 대해 허용되는 메소드"와 같은 것을 알려줍니다.

HEAD는 GET 요청을 한 경우 얻을 수있는 HTTP 헤더를 가져 오지만 본문은 없습니다. 이를 통해 클라이언트는 캐싱 정보, 반환되는 콘텐츠 유형, 반환 될 상태 코드를 결정할 수 있습니다. 가용성은 그것의 작은 부분 일뿐입니다.


감사합니다 @Quentin; OPTIONS내가 생각한 것이었고 이러한 구현은 기존 접근 방식으로 쉽게 수행 될 것입니다. sdolgy의 RFC 인용 OPTIONS에 따라 형식에 표준을 정의하지 않습니다. 응답 형식이 다른 응답과 동일하다고 가정합니까? ( 예를 들어, JSON, XML 등 )
댄 Lugg

@Tomcat RFC 인용 : "콘텐츠 협상은 적절한 응답 형식을 선택하는 데 사용될 수 있습니다." 즉, 응답은 요청이 헤더에서 요청한 것이어야합니다.
고든
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.