- 통신절차
@HTTP 송수신 과정
웹 브라우저는 사용자 IP를 웹 서버에 전달하면서 상호 간 통신(TCP 세션 연결)은 시작된다. 일단 세션이 연결되면 HTTP Request Header와 Body에 주소와 요청 데이터를 포함하여 웹 서버에 전달한다. 이때 웹 서버는 사용자 요청의 유효성을 검증한 후 이상이 없다면 HTTP Response Header 및 Response Body에 문서를 만들어 사용자에게 전달하게 된다.
@HTTP over TCP
HTTP는 TCP 프로토콜 기반 위에서 회선(세션) 연결, 데이터 전송, 회선 종결의 절차를 거친다. 다만, 기존 TCP프로토콜(TELNET, FTP 등)과의 차이는 세션을 계속 유지하지 않고(State-Less) 사용자에게 정보를 전달한 후 바로 끊어버린다는 점이다.
@HTTP 세션 연결 및 데이터 전송 과정
1. Listen : 웹 서버가 포트를 열어놓고 사용자 요청을 대기 중인 상태이다. (서버대기)
2. SYN-Send : 사용자가 웹 서버에 접속 요청을 시도하는 단계이다. (클라 ---> 서버)
3. SYN-Received : 사용자 요청에 대한 응답으로 ACK 와 SYN을 전송한다. (서버 ---> 클라)
4. ACK : 사용자는 다시 한 번 웹 서버의 응답(SYN, ACK)에 확인 메시지인 ACK를 전송한다. (클라--->서버)
이상으로 세션 연결이 되었으면 상호 간(웹 브라우저와 웹 서버)데이터를 주고받게 된다
5. GET Document-PUSH : TCP 스택에서는 PUSH 옵션을 통해 빠른 처리를 요구할 수 있으며
상위 프로토콜인 HTTP에서는 GET 메소드를 이용하여 기본 페이지(index.html 등)를 요청하게 된다. (클라-->서버)
6. TCP Checksum 루틴, ACK : 웹 서버는 사용자 요청 데이터에 대한 손실 및 훼손을 점검하고
이상 없다는 ACK 메시지를 전송한다. (서버 ---> 클라)
7. 요청 문서 제공 - PUSH : 웹 서버는 요청 문서를 사용자에게 전송한다. ( 서버 ---> 클라)
8. TCP Checksum , ACK : 마찬가지로 사용자 측에도 웹 서버 전송 데이터에 대한 손실 및 훼손을 점검하고
이상 없다는 ACK 메시지를 전송한다. (클라 --->서버)
@TCP헤더에서 메시지 상태를 알리는 6개 BIT
@회선 종결 과정
1. FIN-WAIT 1 : 사용자는 세션 종결 요청을 위해 FIN , ACK를 전송한다. (연결을 시도한 자가 먼저
세션을 종결 요청을 하게 된다.) ( 클라 ---> 서버)
2. CLOSE-WAIT : 세션 종결 요청을 웹 어플리케이션에 전달한다. (서버 ---> 클라)
3. FIN-WAIT 2 : 웹 서버의 대답을 기다리는 중 (클라이언트)
4. LAST ACK : 웹 서버는 종결 합의의 의미로 FIN과 ACK를 전송한다. (서버 ---> 클라)
5. TIME-WAIT : 합의 데이터(FIN, ACK)를 잘 받았다는 의미로 ACK를 웹 서버로 전송하게 된다.
그러나 회선 연결이 완전히 끊어진 상태가 아니며 , 혹시 늦게 도착할 수 있는 데이터를 위해
일정 시간을 잠시 기다리는 시간이다. ) (클라 ---> 서버)
6. CLOSE : 회선이 완전히 끊어지게 된다. (서버)
- HTTP Request
@전체구조
HTTP는 머리(Header)와 빈 공백, 몸통(Body)으로 나누어지며, Header에는 주소 정보등이 포함되며 Body에는 요청한 메시지 정보가 포함된다. Header와 Body의 사이에는 1줄의 빈 공백으로 구분을 한다.
구글 접속시 paros로 잡아본 HTTP Header와 Body. 현재 Body는 비어있다.
@요청 헤더에 포함되는 정보들 및 세부설명
1. GET /index.html HTTP/1.1
2. user-agent: MSIE 6.0; Windows NT 5.0
3. accept : text/html; */*
4. cookie : name = value
5. referer : http://www.bbb.com
6. host : www.evenstart.co.kr
1. 데이터 처리 방식(HTTP Method)과 기본 페이지 그리고 프로토콜 버전이 포함된다.
2. User-Agent: 사용자 웹 브라우저 종료 및 버전 정보가 포함된다.
예) MSIE 6.0; Windows NT 5.0: 인터넷 익스플로러 6.0 사용자 임을 알 수 있다.
3. Accept : 웹 서버로부터 수신되는 데이터 중 웹 브라우저가 처리할 수 있는 데이터 타입을 의미한다.
여기서 text/html 은 text, html 형태의 문서를 처리할 수 있고, */*는 모든 문서를 처리할 수 있다는
의미이다. ( 이를 MIME 타입이라 부르기도 한다.)
< MIME 타입의 종류 >
형식 | Content-Type | 처리할 수 있는 S/W
html | Text/html | 웹 브라우저 등 |
text | text/plain | 웹 브라우저 등 |
gif | Image/gif | 웹 브라우저 등 |
jpeg | Image/jpeg | 웹 브라우저 등 |
postscript | Application/postscript | 웹 브라우저 등 |
mpeg | Video/mpeg | Mpeg player |
ra | Audit/x-pn-realaudio | Real audio |
Application/pdf | Acrobat reader |
------------------------------------------------------------------------------------
4. Cookie: HTTP 프로토콜 자체가 세션을 유지하지 않는 State-Less(접속상태를 유지 않는) 방식이기
때문에 로그인 인증을 위한 사용자 정보를 기억하려고 만든 인위적인 값이다. 즉 사용자가 정상적인
로그인 인증 정보를 가지고 있다는 것을 판단하고자 사용한다.
< 쿠키 정보 >
Netscape(사)에서 개발되어 표준화가 되었으며 RFC2965 에 상세하게 기술되어 있다.
○ Set-cookie:Version=[버전번호];Name=[쿠키 이름];Path=[url 상대 경로];Domain=[도메인명];
Comment=[코멘트];Expires=[유효기간]
○ Name=[쿠키이름]: 설정하고자 하는 쿠키 이름
○ Path=[url상대경로]: 쿠키와 연결되는 URL 정보
○ Expires=[유효기간]: 쿠기와 유효 시간이며 사전 정의된 시간 초과 시 재인증 후 발급받어야 함
5. Refere : 현재 페이지 접속 전에 어느 사이트를 경유했는지를 알려주는 도메인 혹은 URL 정보가 포함된다.
6. Host: 사용자가 요청한 도메인 정보가 포함된다.
@GET메소드와 POST메소드의 차이점
GET메소드는 페이지 혹은 페이지와 파라미터가 포함된 값을 요청할 수도 있으며 해당 값은 일반적으로 웹 브라우저 주소창에서 확인할 수 있다.
데이터 전송 용량(인터넷 익스플로러에서는 2,083자로 제한)의 한계 때문에 기본 페이지 및 그림 파일과 같은 간단한 데이터 전송에 사용된다. 일반적으로 웹 브라우저 주소창에 보이는 URL 정보는 GET 메소드로 처리한 것이다. GET 메소드 요청에 대해 회신가능 여부를 판단하여 웹 서버는 응답 코드를 요청자에게 회신하게 된다.
POST 메소드는 대용량 데이터 처리를 위해 Body에 HTML 폼 (로그인 입력 및 게시판 입력 글 등)등의 데이터를 포함할 수 있다. 그리고 사용자가 입력한 데이터는 시스템 내부적으로 처리되어 웹 브라우저 주소창에는 페이지 정보 (wizboard.php) 만 보이게 된다. 예를 들어 사용자가 게시판에 글을 쓰고 전송버튼을 누르면 HTTP 요청 헤더에는 페이지 (xxx.php)정보만 포함되고 몸체(Body)에는 사용자가 입력한 문자열이 포함되어 전송된다.
다시 한번 요약해 보면 POST 데이터 (Header와 Body)는 Header 다음에 빈 공백 1줄과 함께 Body 데이터가 포함된다는 것이 GET 방식과의 차이점이다.
- HTTP Response
1xx : 안내코드
100 : CONTINUE
101 : SWITCHING_PROTOCOLS , 규약을 전환
102 : PROCESSING
2xx : SUCCESS에 관한 코드
200 : OK , 성공적으로 요구를 전달하였음.
201 : CREATED , 요구가 충족되어 새로운 자원을 생성하였음
202 : ACCEPTED , 요구가 접수되었으며 아직 처리가 완료되지는 않았음. (단순한 접수여부이며 처리의 성공여부는 아님)
203 : NON_AUTHORITATIVE Information , 인증되지 않은 정보 (서버에서 사용하도록 정의되지 않는 정보세트를 말함)
204 : NO_CONTENT , 클라언트 요구을 처리했으나 전송할 데이터가 없음
(기존내용의 변화없는 추가적인 정보입력을 실행할 경우에 해당함)
205 : RESET_CONTENT , 내용을 reset
206 : PARTIAL_CONTENT , 부분적으로 요구를 완료하였음.
207 : MULTI_STATUS
3xx : REDIRECT에 관한 코드 (처리를 위해 추가적인 동작이 필요함)
300 : MULTIPLE_CHOICES , 복수 선택
301 : MOVED_PERMANENTLY , 요청한 자원이 영구한 URI가 할당되어 이동함.
302 : MOVED_TEMPORARILY , 요청한 자원이 별도의 임시 URI에 할당되어 이동함.
303 : SEE_OTHER , 다시 다른것을 참조함.
304 : NOT_MODIFIED , 별다른 변경이 없이 응답되었음
305 : USE_PROXY , 요청된 자원은 프락시를 통해야만 접근이 됨
306 : TEMPORARY_REDIRECT
4xx : CLIENT_ERROR에 관한 코드 (요구 메시지가 처리할 수 없을 때)
400 : BAD_REQUEST , 클라이언트의 요청을 서버가 이해하지 못함.
401 : UNAUTHORIZED , 요청에 대한 응답이 사용자인증을 필요로 할 경우.
402 : PAYMENT_REQUIRED , 예약되어 있음
403 : FORBIDDEN , 금지됨 (요청은 이해하였으나 금지되어있는 요청임)
404 : NOT_FOUND , Request-URI를 찾을 수 없음
405 : METHOD_NOT_ALLOWED , URI에서 사용되지 않는 method를 요청함.
406 : NOT_ACCEPTABLE , 접수할수없음을 나타냄.
407 : PROXY_AUTHENTICATION_REQUIRED , 프락시에서 먼저 인증을 해야함.
408 : REQUEST_TIME_OUT , 요청한 시간내에 응답을 하지 못함.
409 : CONFLICT , 충돌 (어떠한 부분의 충돌로 응답하지 못함)
410 : GONE , 영구적으로 사용할 수 없는 경우에 해당하며 그렇지 않으면 401로 응답함.
411 : LENGTH_REQUIRED , 유효하지 못한 Content-Length로 요청을 하였음.
412 : PRECONDITION_FAILED , 전체조건 실패 ( 하나이상의 Request-Header에 기재된 내용이 실패됨)
413 : REQUEST_ENTITY_TOO_LARGE , 요구 entity가 너무커서 처리가 거부됨.
414 : REQUEST_URI_TOO_LARGE ,URI길이가 허용보다 커서 처리가 거부됨.
415 : UNSUPPORTED_MEDIA_TYPE , 지원되지 않는 포맷으로 거부됨.
416 : RANGE_NOT_SATISFIABLE
417 : EXPECTATION_FAILED
422 : UNPROCESSABLE_ENTITY
423 : LOCKED
424 : FAILED_DEPENDENCY
5xx : SERVER_ERROR에 관한 코드 (서버가 요청을 처리하는 과정에서 문제발생)
500 : INTERNAL_SERVER_ERROR , 내부서버 오류 (잘못된 스크립트 실행과 같은 예상하지 못한 오류일 경우)
501 : NOT_IMPLEMENTED , 구현되지 않았음 (요청을 처리하는데 필요한 기능이 구현되지 않았음)
502 : BAD_GATEWAY , 나쁜 게이트웨이 (게이트웨이 서버가 올바르지 않은 응답을 수신 할 경우)
503 : SERVICE_UNAVAILABLE , 과부하 또는 여러가지 이유로 현재 요청을 처리하지 못함.
(임시적이며 일정한 시간뒤에 정상적으로 서비스 가능)
504 : GATEWAY_TIME_OUT , 게이트웨이(또는 프락시)서버가 시간내에 요청의 처리를 완료하는 수신을 받지 못함.
505 : VERSION_NOT_SUPPORTED , 지원되지 않는 HTTP 버젼임.
506 : VARIANT_ALSO_VARIES
507 : INSUFFICIENT_STORAGE
510 : NOT_EXTENDED
601 : 접근불가. HTTP CONNECT TIMEOUT
3초내에 CP로 HTTP Connection을 하지 못한 경우
(예) Network 이상, CP의 과부하로 인해 CP Web서버로 connection이 안될 때)
'Studies' 카테고리의 다른 글
CrunchBang11에 VMwareTools 깔기 (0) | 2013.11.25 |
---|---|
기본 명령어들[퍼옴] (0) | 2013.11.25 |
XCHAT한글설정 (0) | 2013.11.25 |
GET방식 POST방식 (0) | 2011.07.04 |
웹 시작 (0) | 2011.06.29 |