사용자가 로그인하지 않고 로그인이 필요한 페이지에 액세스하려고 시도하면 로그인 페이지로 리디렉션 할 때 올바른 HTTP 상태 코드는 무엇입니까?이로그인 페이지로 리디렉션 할 때 올바른 HTTP 상태 코드는 무엇입니까?
요청 된 자원이 세트 중 하나에 해당
10.3.1 300 Multiple Choices (복수 선택) : 3xx response codes set out by the W3C이을 보이는 것도이 요구 사항에 적합하지 있기 때문에
내가 부탁하고 표현은, 는 자신의 특정 위치, 및 나타나 에이전트가 주도하는 협상 정보 ((12))와 각각 프로 중입니다 vided 사용자 (또는 사용자 에이전트 )는 바람직 표현을 선택하고 해당 위치의 요청을 재 지정할 수 있도록. 그것은 HEAD 요청이 아니 었으면
는 응답은 사용자 또는 사용자 에이전트는 가장 적합한 것을 선택할 수 에서 리소스 특성 및 위치 (들)의리스트를 포함하는 엔티티 를 포함해야한다. 엔터티 포맷은 Content-Type 헤더 필드에 주어진 미디어 타입에 의해 지정됩니다. 형식과 기능에 따라
사용자 에이전트는 가장 적합한 선택을 중에서 선택하여 을 자동으로 수행 할 수 있습니다. 그러나이 사양에서는 이러한 자동 선택에 대해 표준을 정의하지 않습니다.
서버가 표현의 , 그것은 위치 필드에서 해당 표현에 대한 특정 URI를 포함해야 선호하는 선택의 여지가있는 경우; 사용자 에이전트는 자동 리다이렉션을 위해 위치 필드 값을 사용할 수있다. 이 응답은 그렇지 않으면 으로 표시하지 않는 한 캐시 할 수 있습니다.
10.3.2 (301)
영구적으로이전 요청한 리소스가 반환 된 URI 중 하나를 사용하는 것이 좋습니다이 자원 에 새로운 영구 URI 및 미래에 대한 참조를 할당하고있다. 링크 편집 기능이있는 클라이언트 Request-URI에 대한 참조를 이상의 새로운 참조로 자동으로 다시 연결해야 가능한 경우 서버에서 을 반환했습니다. 이 응답은 그렇지 않으면 으로 표시하지 않는 한 캐시 할 수 있습니다.
새로운 영구 URI
은 응답의 Location 필드가 을 부여해야한다. 요청 방법 HEAD, 새 URI (들)에 대한 하이퍼 링크 짧은 하이퍼 텍스트 주석을 함유한다 아니면 응답의 엔터티.그것이 사용자가 확인되지 않는 한 이것은이 변경 될 수 있기 때문에301 상태 코드가 또는 HEAD를 GET 이외의 요청에 응답 수신되면 사용자 에이전트는 자동으로 요청 을 리디렉션해서는 안 요청이 인 조건.
Note: When automatically redirecting a POST request after receiving a 301 status code, some existing HTTP/1.0 user agents will erroneously change it into a GET request.
10.3.3 302
발견 요청 된 자원이 일시적으로 다른 URI 상주. 경우에 따라 리디렉션이 으로 변경 될 수 있으므로 클라이언트는 향후 요청에 대해 Request-URI를 계속 사용해야합니다 (SHOULD ). 이 응답은 Cache-Control 또는 Expires 헤더 필드로 표시되는 경우에만 캐시 가능입니다.
임시 URI는 응답의 위치 필드로 지정해야합니다. 요청 방법이 HEAD가 아닌 한, 응답의 엔터티는 에 새로운 URI에 대한 하이퍼 링크가있는 짧은 하이퍼 텍스트 노트를 포함해야합니다. 그것이 사용자가 확인되지 않는 한 이것은이 변경 될 수 있기 때문에
302 상태 코드가 또는 HEAD를 GET 이외의 요청에 응답 수신되면 사용자 에이전트는 자동으로 요청 을 리디렉션해서는 안 요청이 인 조건.
관계없이 원래 요청 방법을 위치 필드 값에 GET을 수행하는 303 응답했다. 상태 코드 303 및 307에 이 추가되어 클라이언트에 대해 어떤 반응이 예상되는지 명확하게 밝히고 싶습니다.Note: RFC 1945 and RFC 2068 specify that the client is not allowed to change the method on the redirected request. However, most existing user agent implementations treat 302 as if it
10.3.4 303 참조 기타
요청에 대한 응답 가 상이한 URI에서 찾을 수 있으며 해당 리소스에 대한 GET 메소드를 사용하여 검색해야한다. 이 방법은 주로 이 존재하므로 POST 활성화 스크립트를 사용하여 사용자 에이전트를 선택한 자원으로 리디렉션 할 수 있습니다. 새 URI는 원래 요청한 리소스에 대한 대체 참조 이 아닙니다. 303 응답을 캐시하면 안됩니다. 두 번째 (리디렉션 됨) 요청에 대한 응답은 캐시 가능 일 수 있습니다.
다른 URI는 응답의 위치 필드로 지정해야합니다. 요청 방법이 HEAD가 아닌 한, 응답의 엔터티는 에 새로운 URI에 대한 하이퍼 링크가있는 짧은 하이퍼 텍스트 노트를 포함해야합니다.
Note: Many pre-HTTP/1.1 user agents do not understand the 303 status. When interoperability with such clients is a concern, the 302 status code may be used instead, since most user agents react to a 302 response as described here for 303.
10.3.5 (304)는 서버와 을 응답해야한다, 수정 클라이언트가 조건 적 GET 요구를 실행했고 접근 이 허용되는 경우
를 수정되지하지만 문서가되지 않았습니다 이 상태 코드. 304 응답은 메시지 본문을 포함해서는 안되기 때문에 헤더 필드 뒤에 첫 번째 빈 줄인 으로 끝나는 항상 입니다.
- Date, unless its omission is required by section 14.18.1 If a
클럭리스 원본 서버가 이러한 규칙을 순종하고, 지정된 이미 프락시와 클라이언트 ( 하나없이받은 응답 자신의 날짜를 추가
응답은 다음 헤더 필드를 포함해야한다 [RFC 2068], 섹션 14.19), 캐시가 올바르게 작동합니다.
- ETag and/or Content-Location, if the header would have been sent in a 200 response to the same request - Expires, Cache-Control, and/or Vary, if the field-value might differ from that sent in any previous response for the same variant If the conditional GET used a strong cache validator (see
섹션 13.3.3)에 응답 다른 엔티티 헤더를 포함해서는 안된다. 그렇지 않은 경우 (조건부 GET 이 약한 유효성 검사기를 사용함) 응답 은 다른 엔티티 헤더를 포함해서는 안됩니다. 이렇게하면 캐시 된 엔터티 본문과 업데이트 된 헤더간에 불일치가 발생하지 않습니다. 304 응답이 이 현재 캐시되지 않은 엔터티를 표시 할
, 다음 캐시 는 조건없이 요구를 응답을 무시하고 반복해야합니다. 캐시는 캐시 엔트리의 갱신에 수신 된 304 응답을 사용하는 경우
는 캐시는 항목이 응답에 주어진 새로운 필드 값을 반영하기 위해 업데이트해야합니다.
10.3.6 305 프록시 사용
요청한 리소스가 위치 필드에 지정된 프록시를 통해 를 액세스 할 수 있어야한다. 위치 필드 은 프록시의 URI를 제공합니다. 받는 사람은 프록시를 통해이 단일 요청을 반복해야합니다. 305 응답은 발신 서버 에 의해서만 생성되어야합니다.
Note: RFC 2068 was not clear that 305 was intended to redirect a single request, and to be generated by origin servers only. Not observing these limitations has significant security consequences.
10.3.7 306 (미사용)
306 상태 코드 사양의 이전 버전에서 사용 된, 는 더 이상 사용되지 않으며, 코드 소유입니다.
10.3.8 307 임시 리디렉션
요청한 리소스는 임시적으로 다른 URI로 에 있습니다. 경우에 따라 리디렉션을 변경할 수 있으므로 클라이언트는 향후 요청에 대해 Request-URI를 계속 사용해야합니다 (SHOULD ). 이 응답은 Cache-Control 또는 Expires 헤더 필드로 표시되는 경우에만 캐시 가능입니다.
임시 URI는 응답의 위치 필드로 지정해야합니다. 요청 방법은 많은 이전 HTTP/1.1 사용자 에이전트 이후 HEAD, 새로운 URI (들)에 하이퍼 링크와 짧은 하이퍼 텍스트 주석을 포함하고 있어야 응답의 엔티티가 아닌 이상 는 는 307 개 상태를 이해하지 못하는 . 따라서 주에는 사용자에게 필요한 정보가 포함되어 있어야합니다. 은 새로운 URI에서 원래 요청을 반복해야합니다. 그것이 사용자가 확인되지 않는 한 이것은이 변경 될 수 있기 때문에
307 상태 코드가 또는 HEAD를 GET 이외의 요청에 응답 수신되면 사용자 에이전트는 자동으로 요청 을 리디렉션해서는 안 요청이 인 조건.
나는 정답을 찾을 때까지 지금 302를 사용하고 있습니다.
업데이트 & 결론 : (302)는 고객/브라우저와 최고의 호환성을하는 것으로 알려져 있기 때문에 더
HTTP.
내가 절대적으로 책 방법으로는 리디렉션없이 401 로그인 페이지를 반환하는 것입니다 말할 것이다 :
당신은 (302)를 사용하는 경우, 캐싱이 비활성화되어 다시 한 번 확인하는 것을 잊지 마세요 그러나 나는 당신의 선택이 무엇인지 모르겠습니다. –
@ 좋은 지적이지만 고전적인 로그인 시스템을 구축한다면 부작용이 생길 수 있습니다. –
@Pekka - 절대적으로 동의합니다. 인터넷에 기반한 인트라넷과 인터넷에 연결되는 방식에 대해 어떤 플랫폼을 사용하는지에 따라 다릅니다. 인트라넷에서 다른 방식으로 인증을 수행하는 것이 일반적입니다. , 적어도 내 경험에. –