일부 URL에서 HTTP Basic Auth를 요청하면 브라우저는이 URL과 다른 URL에 대해서만 Authorization
헤더를 보냅니다. PHP로 작성된브라우저가 루트 url에 깊은 URL에 설정된`Authorization` 헤더를 보내지 않았습니다.
테스트 케이스 스크립트 : 자격 증명을 요구하는 세 가지 URL이 있습니다 http://testauth.veadev.tk/
(당신은 어떤 임의 사용할 수 있습니다) . 로그 아웃 링크 (Internet Explorer에서 작동하지 않는 브라우저 인증 양식에서 "취소"버튼을 누른 후 현재 자격 증명을 삭제합니다). 루트 URL 및 일부 더 깊은 URL 테스트에 연결됩니다.
질문 : HTTP/1.0 401 Unauthorized
이 /system/dev
에서 전송 된 경우
왜
/
URL에서Authorization
헤더를 전송하지 브라우저? 반복하려면 : http://testauth.veadev.tk/을 열고Auth2
을 클릭하고 자격 증명을 입력하면 그 후에/
으로 전달됩니다.Auth: null
은 브라우저에서 인증서 헤더를 보내지 않았 음을 의미합니다.HTTP/1.0 401 Unauthorized
이/dev
에서 전송 된 경우왜 브라우저
/
에서Authorization
헤더를 보낼 수 있습니까? 반복하려면 http://testauth.veadev.tk/을 열고Auth1
을 클릭하고 자격 증명을 입력하면 그 후/
으로 전달됩니다.Auth: string 'Basic dHQ6dHQ=' (length=14)
과 같은 것을 볼 수 있는데 이는 브라우저에서 자격 정보 헤더를 보냈다는 의미입니다.당신은 첫 번째 경우를 반복 한 다음
Root
에서 자격 증명 및 기타 모든 페이지를해야합니다Auth1
을 클릭합니다. 왜?당신은
Auth3
(/some/deep/and/long/url
)를 클릭하면 다른 곳Page3
(/some/deep/and/long/3
)과에서 자격 증명을해야합니다. 왜?
Logout
,
Cancel
및
Root
을 클릭합니다.
Authorization
헤더를 보내는 규칙은 무엇입니까?
정말 좋은 질문입니다. 경로 요소의 수와 관련이있을 수 있습니다. 탐색이 이루어지는 방식 (주소 표시 줄에 URI를 입력 할 때 대 링크를 따르는 방향으로 리디렉션)은 관련성이 있습니다. –
줄리안 (Julian)이 말한 것에 더하여, 스크립트에 따라'/'에 401을 보내지 않으므로 브라우저는 자격 증명을 보낼 동기가 없어야합니다. (브라우저가 자격 증명을 보내기 전에 _Every_ 새로운 보호 된 리소스가 먼저 401을 보내야합니다.) 게다가 PHP가 인증 데이터에 대한 _access_를 가지고 있는지 여부에 따라 테스트 케이스가 신뢰할 수있는 데이터를 제공하는지는 의심스럽지 않습니다 여러 요인. – CBroe
브라우저가 401에 요청한 URL에 대해서만 자격 증명을 보내면 의미가 있습니다. 그러나 브라우저는 401 근처의 일부 URls에 대한 자격 증명을 보내지 않습니다. 귀하의 진술에있는 리소스 란 무엇입니까? _ 브라우저가 신임장을 보내기 전에 먼저 새로운 보호 된 리소스가 모두 401을 보내야합니다. '? PHP의 경우 실제로는 다르지만이 특별한 경우는 아닙니다. HTTP 스니퍼는 PHP가 얻는 것을 확인합니다. – vearutop