418“I 'm a teapot”이 실제로 HTTP 응답 코드입니까?


답변:


122

이 코드를 사용합니다. 두 개의 개별 HTTP 서버에 nginx 리버스 프록시 요청이 있습니다. 하나는 인증되지 않은 사용자에 대한 요청을 처리하고 두 번째는 인증 된 사용자에 대한 요청을 처리합니다. 이 특별한 경우의 문제는 첫 번째 서버가 사용자의 인증 여부를 결정하는 서버라는 것입니다. 이유를 묻지 마십시오.

따라서 첫 번째 서버가 사용자가 인증되었음을 확인하면 418 I'm a teapot. 그런 다음 NGINX는 트래픽을 내부적으로 두 번째 서버로 다시 라우팅합니다. 브라우저에 관한 한 그것은 단일 요청이었습니다.

이것은 HTCPCP 코드 418 의 정신에 따릅니다 . 주전자로 BREW를 시도하면 적절한 응답은 "나는 해당 요청을 처리 할 수있는 유형이 아니지만 다른 요청이있을 수 있습니다."입니다. .. 즉, "나는 주전자입니다. 커피 메이커를 찾으십시오." (두 번째 서버는 커피 메이커입니다).

궁극적으로 418은 RFC 7231에 명시 적으로 정의되어 있지 않지만 여전히 4xx (Client Error).

6. 응답 상태 코드

  • 4xx (클라이언트 오류) : 요청에 잘못된 구문이 포함되어 있거나 수행 할 수 없습니다.

6.5. 클라이언트 오류 4xx

  • 상태 코드의 4xx (클라이언트 오류) 클래스는 클라이언트에 오류가 있음을 나타냅니다. HEAD 요청에 응답 할 때를 제외하고 서버는 오류 상황에 대한 설명과 그것이 일시적 또는 영구적 인 상태인지를 포함하는 표현을 보내야합니다. 이러한 상태 코드는 모든 요청 방법에 적용 할 수 있습니다. 사용자 에이전트는 포함 된 표현을 사용자에게 표시해야합니다 (SHOULD).

2
Accept 헤더가 누락 된 경우 418로 응답 할 타사 공급자 (정말 나쁜 공급자)가 있습니다. 나는 항상 그들이 단지 나쁘기 때문이라고 생각했지만 실제로 무슨 일이 일어나고 있는지 설명합니다. 아직 불구하고 자신의 서버의 상태 코드를 누출 그들을 용서하지 않습니다
호프만

7
@Hoffmann 400 Bad Request 또는 415 Unsupported Media Type으로 응답하는 것이 적절했을 수 있습니다. 4xx 코드는 클라이언트 오류를 ​​나타내므로 그렇게 해석 할 수 있습니다.
wizulus

1
이 상태 코드는 httpPython 3.9 의 표준 라이브러리 모듈 에 추가됩니다 .
BramAppel

61

HTTP 응답 코드 418은 원래 RFC 2324 ( "Hyper Text Coffee Pot Control Protocol (HTCPCP / 1.0)") 및 RFC 7168 ( "The Hyper Text Coffee Pot Control Protocol for Tea Efflux Appliances (HTCPCP-TEA)") 프로토콜에서 정의되었습니다.

Wikipedia 기준 : HTTP 상태 코드 목록 : # 418

이 코드는 중 하나로 1998 년에 정의 된 기존의 IETF 만우절 농담 에, RFC 2324 , 하이퍼 텍스트 커피 주전자 제어 프로토콜이 되고 실제 HTTP 서버에 의해 구현 될 것으로 예상되지 . RFC는 커피를 끓 이도록 요청한 주전자에서이 코드를 반환해야한다고 지정합니다. 이 HTTP 상태는 Google.com을 비롯한 일부 웹 사이트에서 이스터 에그로 사용됩니다 .


10
실제 상태 코드가 아니라는 점을 분명히 할 가치가 있습니다. 공식 목록은 여기에 있습니다 : iana.org/assignments/http-status-codes/…
Evert

@Evert RFC의 어떤 것이 "공식적"이되는지 여부에 영향을 미치는 것은 무엇입니까? 내가 받아 들일 수 있도록 당신의 의견을 답변으로 만들 수 있습니까?
모한

@Mohan IETF 및 표준화 프로세스를 작은 주석에 작성하려는 시도에 대해 기분이 좋지 않습니다. 궁극적으로 저는 이것이 관련 IETF 작업 그룹에 있다고 믿습니다.
Evert

웹 앱을 빌드 할 때 자리 표시 자 또는 '할 일'로 사용합니다. com.org.uk/phones-telecoms-and-internet/ 의 가상 전화 번호와 다소 유사한 아이디어입니다. 나는 그것이 결코 심각하게 사용되지 않을 것이라고 확신 할 수 있습니다.
Chris Huang-Leaver

15

여기에 이미지 설명 입력

예, 실제 프로덕션 서버에서 HTTP 418이 돌아 오는 것을 확인했습니다. 존재합니다.


6
WebException 클래스는 요청에서 반환되는 응답 코드 및 상태 텍스트를 표시합니다. 응답 헤더의 첫 번째 줄이 "432 One Zero"인 경우 메시지는 "The remote server returned an error : (432) One Zero"입니다. 이 오류가 발생했을 때 호출 한 서버와 실행중인 소프트웨어를 아는 것이 더 도움이 될 수 있습니다.
wizulus

6

예, 실제로 인터넷 엔지니어링 태스크 포스에서 공식 RFC로 게시 한 "실제"코드이지만 RFC는 4 월 1 일에 게시되었으며 만우절 농담 (나머지 Hyper Text Coffee Pot Control과 함께)을 의미했습니다. 프로토콜), 합법적 인 구현을위한 것이 아닙니다. 이것이 대부분의 사이트에서 이스터 에그를 사용하지만 그렇지 않은 경우에는 사용하지 않는 이유입니다. 이 의견 에서 언급했듯이 400 (잘못된 요청)과 같은 더 적절한 상태가있는 경우가 많습니다. 즉, IT 커뮤니티 덕분에 이제 예약 된 코드가되었으므로 조만간 어디로 든 갈 것이라고 기대하지 마십시오.

특히, Larry Masinter (Wikipedia에서 언급 한 RFC의 저자)에 따르면, 문제의 HTTP 확장은 실제로 (풍자적 인) 목적을 수행합니다. "이것은 HTTP가 부적절하게 확장 된 많은 방법을 식별합니다."


1

나는 418을 한때 공식적인 의미를 가지고 있었지만 이제는 공식적으로 "할당되지 않은"예약 된 코드로 취급하는 것이 더 안전하다고 생각합니다.

나는 역사적으로 이러한 코드에 대해 지금과 다르게 생각한 것이 있다고 생각합니다. 이것은 오늘날 무의미하고 재미있게 들립니다. 아마 아닐까요?

즉,이 코드를 사용하지 않을 것입니다.


"아마도 아니었다"아니, 사실 그것은 거의 만우절 농담 일 뿐이다. RFC가 나간 4 월의 어느 날에 관심을 기울이지 않는 사람들은 그것이 심각한 일이라고 생각했을 수도 있습니다!
Twisted Code
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.