HTTP헤더의 중복되는 키값

myUrlConnction.setRequestProperty(“Accept”, “text/html”); myUrlConnction.addRequestProperty(“Accept”, “text/*”); Accept: text/html 만 보내지게 된다. 둘모두를 보내려면 코딩하는측에서 아래와 같이 2개의 항목을 합쳐서 설정해야 한다.

myUrlConnction.setRequestProperty(“Accept”, “text/html, text/*”);
하지만 그전에 알아두어야 할것은 HTTP헤더는 같은 항목을 2개 보낼 수 없다는것이다. 예를들어 Authorization헤더의 경우 클라이언트를 인증하는 Basic인증등에서 쓰이는데 여기에 값을 2개 설정한다고 가정해보자. Authorization: Basic aWQ6cHc= Authorization: Bearer mytoken 이 경우 위의 Basic인증은 Apache에서 설정된 htpasswd의 인증값이라 가정하고 뒤의 Bearer값은 실제 AP서버에서 필요로 하는 인증정보라 하자.(oauth등의 경우) 이때 재미있는것은 반드시 Basic이 먼저 와야 한다는 것이다. Authorization: Bearer mytoken,Basic aWQ6cHc= 만약 위와 같이 보내면 Apache에서 HTTP 401 에러가 발생한다. Authorization: Basic aWQ6cHc=,Bearer mytoken 위와 같이 보내면 Apache에서 컴머까지만 확인후 인증을 실시한다. 물론 AP서버에서도 Bearer이후를 기준으로 값을 가져와야 한다. 즉, HTTP헤더가 컴머나 세미콜론등으로 구분되어 있다고 해서 자동으로 헤더를 2개나 그 이상으로 인식해주지 않고 어플리케이션측에서 해당 헤더값을 판별해야 한다는것이다. 아래 RFC를 참조하자. http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html 어디에서 HTTP헤더가 여러가 존재한다는 내용은 없다. ]]>

Related Posts