HTTP의 숨겨진 기능


85

언급 할 가치가 있다고 생각하는 HTTP의 숨겨진 기능은 무엇입니까?

숨겨진 기능이란 이미 표준의 일부이지만 널리 알려지지 않았거나 사용되지 않은 기능을 의미합니다.

답변 당 하나의 기능 만주세요.

답변:


124

Hyper Text Coffee Pot Control Protocol (HTTP의 확장)의 일부인 418 I 'm a teapot 상태 코드 여야합니다 . 매번 나를 웃게 만든다.

2.3.2 418 나는 주전자입니다

주전자로 커피를 추출하려고하면 오류 코드 "418 I 'm a teapot"이 표시됩니다. 결과 엔티티 본문은 짧고 튼튼 할 수 있습니다.


6
굉장합니다!
Josh

3
실제로 다른 상태가 적절하지 않은 경우 스크립트에서이 상태를 구현했습니다.
눈꺼풀 없음

4
RFC에서 : "결과 엔티티 본문은 짧고 튼튼 할 수 있습니다."
Piskvor는

2
나는 내 자신의 HTTP 서버를 작성하고 이것을 구현했는지 확인했습니다.
Matt Joiner

이것이 커피 머신에 명령을 보내기 위해 작성한 실제 프로토콜이 아니 었습니까? -그들은이 프로토콜을 통해 명령을 받아들이 기 위해 커피 머신을 만들었 기 때문에 실제로는 합법적 인 프로토콜입니다
RobertPitt


42

명확한 답변 : PUT, DELETE, TRACE, OPTIONS, CONNECT 메서드

대부분의 사람들은 양식을 작성할 때 사용하는 GET 및 POST 메서드에 대해 알고 있습니다. 브라우저는 또한 HEAD를 많이 사용합니다. 다른 방법은 잘 알려져 있지 않습니다. 그들은 주로 더 구체적인 응용 프로그램에서 사용됩니다.


1
좋은 대답입니다. 모든 방법에 대해 더 많은 정보를 제공 할 수 있습니까?
Louis

2
당신은 같은 다양한 사이트에 대한 모든 것을 읽을 수 있습니다 en.wikipedia.org/wiki/Hypertext_Transfer_Protocol
마티

1
불행히도 이러한 방법을 지원하는 브라우저는 몇 개입니까? (알아요, 유감입니다)
Pascal Qyy 2010

왜 모든 사람이이 목록에 PATCH를 포함하지 않습니까?
tobib 2014

29

402 지불 필요를 본 사람이 있습니까?


17
예. HTTP <-> SMS 게이트웨이에서. 선불 크레딧이 부족하면 402 개의 응답을 받기 시작합니다.
Kornel

26
@ zildjohn01 : 즉 ... 극적인 일시 정지 ... 우리가 미래에 살고 있다는 것을 의미합니다 ! )
Piskvor 건물 왼쪽

6
@Piskvor : 훌륭한 관찰입니다. 나는 또한 내가이 미래를 거부하고, 그것은 한심한 소프트웨어 스택임을 지적 할 것이다.
Matt Joiner

3
"미래는 이미 여기에 있으며 균등하게 분배되지 않았습니다."
XTL

25

204 내용 없음

204는 표시 할 내용이없는 경우에만 해당한다고 생각했지만 사양 은 사용자 에이전트가 "문서보기를 변경하지 않는"추가 동작이있는 것처럼 보입니다.

HOWTO 에 따르면 : AJAX 용 HTTP 204 (콘텐츠 없음)를 반환하도록 Apache 구성

FWIW, Google은 실제로 비슷한 일을합니다. 사용자가 검색 결과의 링크를 클릭 할 때마다 Google은 클릭을 기록하기 위해 자체적으로 핑을 보냅니다. 핑의 응답 코드는 HTTP 204입니다.

또한 204 No Content 는 네트워크 트래픽의 모든 마지막 바이트를 절약하려는 경우 "웹 버그"또는 "비콘"에 대한 좋은 기술이라고 제안합니다.



16

동적 콘텐츠에서 Last_Modified 또는 ETag 헤더 사용

크기가 크고 / 또는 생성하는 데 비용이 많이 들고 요청마다 변경되지 않는 동적 콘텐츠가있는 경우가 있습니다. 생성 된 응답에 Last_Modified 또는 ETag 헤더를 추가 할 수 있습니다.

값 비싼 동적 코드의 맨 위에서 If_Modified_Since 또는 If_None_Match를 사용하여 이미 콘텐츠 요청자가 아직 최신 상태인지 확인할 수 있습니다. 응답 상태를 "304 Unmodified"로 변경하고 요청을 종료하십시오.

일부 서버 측 기술은 이러한 기능을 공식적으로 제공하지만 낮은 ASP-Classic에서도 위의 작업을 수행 할 수 있습니다.

클라이언트가 항상 최신 정보를 갖도록 보장한다는 점에서 Cache-Control, Expires 헤더를 설정하는 것과 다릅니다.


13

지정된 바이트 범위와 고유 한 파일 식별자 또는 파일 수정 타임 스탬프와 함께 및 요청 헤더를 사용하여 (대용량) HTTP 응답 (예 : 파일 다운로드) 을 재개 하도록 요청할 수 있습니다 . 이는 서버가 바이트 범위 요청, 고유 파일 식별자 및 파일 수정 타임 스탬프를 지원한다는 알림과 함께 초기 응답 에서 및 또는 응답 헤더를 각각 보낸 경우 가능합니다 .RangeIf-RangeAccept-Ranges: bytesETagLast-Modified

초기 응답은 다음과 같을 수 있습니다 ( ETag일반적으로 파일 이름, 크기 및 마지막 수정 타임 스탬프로 구성됨).

Accept-Ranges: bytes
ETag: file.ext_1234_1234567890
Content-Range: bytes 0-1233/1234

예를 들어 1KB (1024 바이트)에서 다운로드가 중단되면 클라이언트는 다음과 같이 다시 시작할 수 있습니다.

If-Range: file.ext_1234_1234567890
Range: bytes=1024-

본문에 적절한 바이트와 함께이 응답을 반환해야합니다.

Accept-Ranges: bytes
ETag: file.ext_1234_1234567890
Content-Range: bytes 1024-1233/1234

1MB = 1024KB, 1KB = 1024 바이트, 즉 1MB = 1024 * 1024 바이트
Maerlyn

12

ReST 는 인터페이스 프로토콜로서 HTTP를 한계까지 밀어 붙이려 고합니다.

그것은 아니다 숨겨진 기능을 하지만, 잘 정의 된 REST API를보고에서 하나는 HTTP의 간단한 조합 방법, 상태 코드와 헤더를 달성 할 수있는 멋진 예를 HTTP이 작업에 의미 방법에 대한 아주 좋은 그립을 얻을 찾을 수 있습니다 그리고 이리저리.



8

이 프로토콜을 사용하면 사용자 정의 필드를 정의 할 수 있습니다. 쿠키를 사용하지 않으려는 경우 다른 정보를 전달하는 데 사용할 수 있습니다.


1
나는 그것을 몰랐다!
netrox

6

HTTP 100 (계속) 상태

클라이언트는 요청 본문과 함께 요청 메시지를 보내 원본 서버가 요청을 수락 할 의사가 있는지 확인할 수 있습니다.

어떤 경우에는 서버가 본문을 보지 않고 메시지를 거부 할 경우 클라이언트가 본문을 보내는 것이 부적절하거나 매우 비효율적 일 수 있습니다 .

불량 클라이언트의 트래픽피하는 데 사용될 수 있습니다 . 그리고 / 또는 대역폭 이 소중한 상품 인 경우.

그러나이 기능을 완전히 사용하려면 HTTP1.1 클라이언트, 서버 및 프록시에 대한 몇 가지 기준이 있습니다. HTTP 연결에 대한 자세한 내용은 HTTP / 1.1 RFC 2616 을 참조하십시오 .


3

상태 코드 :

  • URI http://www.domain.invalid/index.php?id=44 가 호출 될 때 쿼리 ( id=44)가 리소스를 반환 할 수없는 경우 상태 코드를 반환하지 않는 이유는 404무엇입니까?
  • URI가 http://www.domain.invalid/index.php?id=foo 있는 반면라고 id정수만을 받아, 왜 상태 코드를 반환하지 400?
  • 잘못된 로그인 / 비밀번호를 입력하면 거의 모든 웹 응용 프로그램이 "인증 실패" 와 같은 메시지를 반환하고 상태 코드 200(좋아요, 문제 없습니다. 잘합니다) instade를 반환합니다 401.

예, 상태 코드 는 일부 웹 개발자에게 HTTP 의 일종의 비밀 기능인 것 같습니다 ...하지만이 프로토콜의 모든 "기능"중 가장 신비로운 것이 RFC 가 아닌지 궁금합니다 !


2
나는 401다른 종류가 아닌 HTTP 인증만을위한 것이라고 생각한다 . Afaik은 대부분의 브라우저에서 사용자에게 http 암호를 요청합니다.
CodesInChaos 2010

당신 말이 맞아요, 이것이 요점입니다! 다음은 HTTP의 다른 "숨겨진"기능입니다. HTTP-Authentication... ^^ 바퀴를 재발 명하는 대신 사용하기가 그렇게 어렵습니까?
Pascal Qyy 2010

1
@지. Qyy : 웹 애플리케이션의 경우 사용자 데이터베이스가 쉽게 조작 할 수있는 일부 SQL 데이터베이스에 저장되는지 아니면 Apache의 .htaccess파일 과 같은 일부 (상당히 정적 인) 웹 서버 구성 파일에 저장되는지에 따라 큰 차이가 있습니다 . 웹 마스터는 업데이트 할 수 있습니다. 따라서 HTTP 인증은 실제로 응용 프로그램의 사용자 권한 및 로그인 / 로그 오프를 관리하는 데 적합하지 않습니다.
stakx-더 이상 2011 년

4
@stakx : MySQL ( howtoforge.com/mod_auth_mysql_apache2_debian ), LDAP 등을 사용하여 정보를 저장하는 HTTP-Authentication것은 쉽습니다 . 그리고 PHP도 처리 할 수 ​​있습니다 HTTP-Authentication( php.net/manual/en/features.http-auth.php ). 웹 개발자라면 안전상의 이유로 서버 관리의 기초를 익혀야합니다! 웹 개발자는 웹 마스터 / 시스템 관리자 기술이 있어야하므로이 작업을 쉽게 수행 할 수 있습니다.
Pascal Qyy 2010

1
그러나 어쨌든 이것은 내 대답에 관한 것이 아닙니다. 나에게 주요 문제는 HTTP 인증을 제쳐두고 웹 앱이 반환하는 거의 체계적인 incorect 상태 코드로 남아 있습니다.
Pascal Qyy 2010
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.