HTTPQUERY
한국어

506 Variant Also Negotiates

사용법

506 Variant Also Negotiates 상태 코드는 투명 콘텐츠 협상 중에 발생합니다. 투명 콘텐츠 협상은 대상 리소스의 변형이 여럿 있을 때 프로토콜이 클라이언트에 가장 적합한 변형을 선택하는 방식입니다.

변형은 해당 리소스의 서로 다른 버전을 말합니다. 예를 들어 여러 언어로 제공되는 리소스는 언어마다 하나씩 변형을 갖습니다. 투명 콘텐츠 협상은 GET이나 HEAD 요청이 들어오면 가장 적합한 변형을 자동으로 선택합니다.

506 오류는 선택된 변형 자체가 다시 협상하도록 설정되어 있어 루프가 생겼고, 서버가 이를 중단시켰다는 뜻입니다.

참고

이 프로토콜은 1998년에 실험적이라고 기술되었으며 표준으로 공식 채택되지 않았습니다.

SEO 영향

검색 엔진은 506을 다른 5xx 서버 오류와 동일하게 취급합니다. 실패가 지속되면 크롤링 속도가 줄고 결국 해당 URL이 색인에서 제거됩니다.

예시

클라이언트가 Accept 헤더를 담아 GET 요청을 보냅니다. 서버는 콘텐츠 협상을 시도하지만 선택된 변형이 다시 협상을 참조한다는 것을 발견하고, 그 결과 순환 설정 오류가 발생합니다.

요청

GET /docs HTTP/1.1
Host: example.com
Accept: text/html, application/xhtml+xml

응답

HTTP/1.1 506 Variant Also Negotiates
Content-Type: text/html; charset=UTF-8
Content-Length: 191

<html>
  <head>
    <title>Variant Also Negotiates</title>
  </head>
  <body>
    <p>Content negotiation for the requested
    resource resulted in a circular reference.</p>
  </body>
</html>

해결 방법

서버의 콘텐츠 협상 설정에 순환 참조가 있습니다. 선택된 변형 자체가 다시 협상하도록 설정되어 있는 것입니다. 모든 변형이 구체적인 표현을 가리키도록 하여 루프를 끊으세요.

Apache 전용 해결책:

일반적인 해결책:

이 상태 코드는 실험적이며 운영 환경에서는 거의 볼 수 없습니다. 대부분의 현대 애플리케이션은 콘텐츠 협상을 애플리케이션 계층에서 처리하므로 서버 수준의 투명 협상 메커니즘을 아예 사용하지 않습니다.

코드 참고

.NET

HttpStatusCode.VariantAlsoNegotiates

Rust

http::StatusCode::VARIANT_ALSO_NEGOTIATES

Rails

:variant_also_negotiates

Go

http.StatusVariantAlsoNegotiates

Symfony

Response::HTTP_VARIANT_ALSO_NEGOTIATES_EXPERIMENTAL

Python3.5+

http.HTTPStatus.VARIANT_ALSO_NEGOTIATES

Apache HttpComponents Core

org.apache.hc.core5.http.HttpStatus.SC_VARIANT_ALSO_NEGOTIATES

Angular

@angular/common/http/HttpStatusCode.VariantAlsoNegotiates