Computer/LINUX

HTTP Request

알찬돌삐 2012. 8. 10. 16:19

 http://lab.zagia.com/developer_zone/bbs/link.php?bo_table=devzone_crawler&wr_id=4&no=1

Simple-Request  GET SP Request-URI CRLF
 
위와 같이 HTTP/0.9에서는 한 줄로 이루어진다. 그러나 HTTP/1.0이후부터는 여러 가지의 내용을 기술 할 수 있다. HTTP/1.1에서는 반드시 필요한 항목들도 있다.
CRLF는 새로운 라인을 말하며 C 언어상의 “\r\n”과 같다. SP는 공백을 의미한다.
 
Full-Request  Request-Line
                General-Header
                Request-Header
                Entity-Header
                CRLF
                Entity-Body
 
A. Request-Line
Method SP Request-URI SP HTTP-Version CRLF
 
Request-Line은 위의 형태로서 Method는 GET, POST, HEAD 등이 있다. 그러나 이러한 method들은 HTTP/1.0이라고 해서 반드시 지원하는 것은 아니다. 웹 서버로부터 501 오류 코드가 돌려지면 지원 예정이거나 아직 구현되지 않은 method임을 나타내고, 400오류 코드가 돌려지는 경우는 그 method를 지원하지 않는다는 뜻이다. 이는 웹서버를 코딩한 프로그래머가 정책적으로 어떤 method를 막아 서버 부하를 줄인다거나 기타 이유로 구현하지 않았기 때문이다. 역으로 생각한다면 새로운 Method를 구현한 웹서버 구성도 가능하다는 얘기겠다.
 
예) GET /help/helpindex.html HTTP/1.0
CRLF
 
HEAD: Get method와 같으나 내용은 보내지 않고 Request-URI의 특성에 대한 정보만을 즉 Entity-Header만을 돌려준다.

예) HEAD /help/helpindex.html HTTP/1.0
    CRLF
POST: Get method와의 차이점은 서버에 전달될 Entity-Body를 포함할 수 있다는 것이다. 즉 다양한 형태의 정보를 서버에게 전달하기 위하여 사용하는 method이다.

예) POST /cgi/test.cgi HTTP/1.0
    Content-Type: text/html
    Content-Length:10
    CRLF
    0123456789
 
Request-URI: URL에 기술되어진 identifier를 기술하면 된다. 즉 호스트의 이름 뒤에 붙어있는 부분을 나타낸다.

예) http://www.naver.com/help/help.html ==> /help/help.html
 
HTTP Version: HTTP/<major>.<minor>의 형태로 “HTTP/1.0”과 같이 기술된다.
B. Request Header
Field-name: SP field-value CRLF
 
Request에 대한 여분의 정보나 클라이언트에 관한 정보를 서버에게 전달하는 목적으로 사용한다.
 
Accept Request Header : 클라이언트가 처리할 수 있는 요구에 대한 응답형태를 지정할 수 있다.
예) Accept: text/html; text/plain
 
Authorization Request Header: 사용자의 이름과 암호를 전달하기 위하여 사용한다. 다음 예의 두번째 문자열은 user-id와 password가 base64인코딩 된 것이다.
예) Authorization: basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
 
From Request Header : 요구를 하는 사용자의 e-mail 주소등을 전송하기 위해 사용한다.
예) From: hcshim@yahoo.jp
 
IF-Modified-Since Request Header: 지정된 시간 이후에 변경된 경우 내용을 보내주고 그렇지 않은 경우 상태 코드 304를 보내준다. 잘못된 시간/날짜가 기술되었더라도 GET method의 동작은 올바르게 이루어 진다. 웹 로봇에서 최종 변경 시간/날짜를 관리한다면 이 헤더를 사용하면 많은 이익을 얻게 된다. 그러나 요즘 상용으로 사용되고 있는 서버들이 변경 시간/날짜를 제대로 관리하지 않는 듯 하다.
예) IF-Modified-Since: Tue, 04 Nov 2003 12:53:04 GMT
 
Referer Request Header: 현재 접속하고자 하는 웹 페이지가 연결되어 있는 웹 페이지의 정보가 들어가게 된다.
어떤 서버들은 이 Referrer를 체크하여 자신의 사이트에서 이동한 것인가를 검사한 후 그렇지 않고 외부에서 직접 들어온 사용자들에게 서비스를 제공하지 않는 경우가 있다.
Http 기술문서에 보면 헤더를 Referrer로 설정하지 않고 Referer로 설정되어 있다. 어떤 문서에서 본 기억이 있는데 프로토콜 기술 당시 오타 였다는 후문이 있다. 믿거나, 말거나.
 
User-Agent Request Header : 클라이언트 소프트웨어에 대한 정보를 나타내기 위한 헤더이다.
예) User-Agent: GoldenCrow/1.0
 
요구시에 사용되는 From, User-Agent 등의 내용은 웹 서버의 로그로 남겨지게 된다. 그러므로 이러한 내용은 웹 로봇을 작성할 경우에는 반드시 기술하여 웹 로봇의 신원을 밝히고, 웹서버 관리자로 하여금 오류나 기타 문제점에 대한 대비를 할 수 있도록 하여야 한다.
필자의 경우 신원을 숨기기 위해 IE의 Agent명을 카피해서 쓴 적이 있다. 이러면 안된다.

 

이 글은 스프링노트에서 작성되었습니다.

.

'Computer > LINUX' 카테고리의 다른 글

httpd.conf  (0) 2012.08.10
HTTP response  (0) 2012.08.10
HTTP ERROR  (0) 2012.08.10
http 1.0 막기  (0) 2012.08.10
.htaccess  (0) 2012.08.10