HTTP 응답 헤더의 명세

,
HTTP 응답 헤더의 명세

Allow: 서버가 어떤 요청 메소드 (GET, POST, etc.) 를 지원하는가?

Content-Encoding : 문서를 인코딩 하는 데 어떤 메소드가 쓰였는가? Content-Type
헤더에 명시된 타입을 얻기 위해서는 이것을 해독해야 한다. gzip을 써서 문서를
압축하면 HTML 파일을 다운로드 하는 데 드는 시간을 꽤 많이 줄일 수 있다. 하지만
유닉스의 Netscape와 윈도의 IE4와 IE5만 이것이 지원된다. 여기에 대해 자바의 GZIPOutputStream을 사용하면 매우 쉽게 이용할 수 있다. 따라서 브라우저가 Accept-Encoding 헤더를 지원하는지 체크해 봐야 한다 (request.getHeader("Accept-Encoding")를 통해 할 수 있다). 이 방법을 쓰면 gzip을 지원하는 브라우저에 대해서는 gzip으로 압축 된 페이지를 넘겨주고 그렇게 않은 브라우저에 대해서는 일반 페이지를 넘겨주도록 할 수 있다.

Content-Length : 몇 바이트가 올 것인가? 이 정보는 브라우저가 HTTP연결을
계속 유지시키려 할 때 필요하다. 만약 브라우저가 이를 지원하고 서블릿에서 이것을
이용하려면, ByteArrayOutputStream에 문서를 써 넣어서 크기가 얼마나 되는지 살펴보고 그 값을 Content-Length 필드에 써 넣은 뒤 내용을 byteArrayStream.writeTo(response.getOutputStream())을 통해 보내야 한다.

Content-Type : 문서가 어떤 MIME content-type인가? 서블릿에서 기본적으로는
text/plain로 설정돼 있다. 하지만 보통 text/html로 설정해서 쓴다. 일반적으로
이 헤더를 자주 설정하기 때문에 서블릿에는 이를 위한 HttpServletResponse의 setContentType이라는 특별한 메소드가 있다.

Date : 현재 시간은(GMT로)? 이 헤더를 설정하기 위해 setDateHeader 메소드를
사용하는 것이 좋다. setDateHeader 메소드는 올바로 날짜 문자열로 만들어야 하는
수고를 덜어준다.

Expires : 언제 내용이 만료되어 더 이상 캐싱할 필요가 없는가?

Last-Modified: 언제 이 문서가 수정되었는가? 클라이언트는 If-Modified-Since  헤더를
통해 날짜를 적용할 수 있다. 이것은 조건적인 GET로 다뤄진다. 왜냐하면 명시된
날짜보다 Last-Modified의 날짜가 더 나중이어야 이 페이지를 보여주기 때문이다.
그렇지 않을 경우 304 (Not Modified) 상태 라인이 반환된다. 이 헤더를 설정하기
위해서는 setDateHeader를 쓴다.

Location : 문서를 보기 위해 클라이언트는 어디로 가야 하는가? 보통
Location 헤더는 3-2 상태코드나 HttpServletResponse의 sendRedirect 메소드를 통해
간접적으로 설정된다.

Refresh : 얼마 후에 브라우저가 업데이트된 페이지를 요청해야 하는가(초단위)?
현재 페이지를 단순히 리로딩 하는 것 이외에도 setHeader("Refresh",
"5; URL=http://host/path")을 통해 특정 페이지를 로드하도록 지정할
수 있다. 이것은 HTML의 HEAD 부분에서 <META HTTP-EQUIV="Refresh"
CONTENT="5; URL=http://host/path"> 를 써서 설정한다. 왜냐하면 자동
리로딩이나 포워딩은 CGI나 서블릿을 사용하지 않는 HTML 제작자도 종종 원하는 기능이기 때문이다. 그러나 서블릿에서는 헤더를 직접적으로 설정하기 때문에 더 쉽고 명료하다.
이 헤더는 ‘N초 후에 이 페이지를 리로드 하거나 명세된 URL로 간다’는 것을 뜻하지,
‘N초 마다 이 페이지를 리로드 하거나 명세된 URL로 간다’는 것을 뜻하지 않는다.
따라서 계속 페이지를 리로드 하려면 Refresh 헤더를 매번 보내야 한다. 그리고 204(No
Content) 상태 코드를 보내면 Refresh 헤더를 쓰건<META HTTP-EQUIV="Refresh"
...>를 쓰건 관계없이 리로드가 중지되게 된다. 이 헤더는 HTTP 1.1의 공식적인
부분은 아니지만 Netscape와 Internet Explorer에서 확장적으로 지원해 주는 부분이다.

Server : 어떤 서버를 쓰고 있는가? 서블릿은 보통 이 설정을 사용하지 않는다. 웹 서버 자체로 설정되기 때문이다.

Set-Cookie : 이 페이지는 어떤 쿠키와 관련 있는가? 서블릿은response.setHeader("Set-Cookie", ...)을 쓰지 말아야 한다. 대신 특별한 목적으로 만든 HttpServletResponse의 addCookie를 쓰면 된다. 쿠키 다루기 편을 참고하라.
WWW-Authenticate : 클라이언트가 Authorization  헤더에서 어떤

보안 형태와 영역을 제공해야 하는가? 이 헤더는 401 (Unauthorized) 상태 불에 대한
응답으로 필요하다. response.setHeader("WWW-Authenticate", "BASIC realm="executives"")와 같이 쓸 수 있다. 그리고 서블릿은 이 헤더를 이 자체만으로 다루지 않고 웹 서버의 특화된 방법으로 암호가 걸린 웹 페이지를 다루는 데 쓴다 (e.g. .htaccess).

모든 HTTP헤더에 관한 정보를 보려면 (http://www.w3.org/Protocols/) 를 참조


옛글을 옮기는 중...
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)

Posted by XO


Trackback URL : http://taez.net/blog/trackback/4

Leave a comment
« Previous : 1 : ... 82 : 83 : 84 : 85 : 86 : 87 : 88 : 89 : Next »

Popular articles

Calendar

«   2008/11   »
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            
Statistics Graph