맞춤검색

HTTP 프로토콜 호출 구조

HTTP 프로토콜 , http protocol, 웹 전송 구조, 웹 서버구조,웹 강좌 웹서버 호출 RFC 2616 RFC2616 웹 프로토콜 구조 web protocol

RFC 문서에 나오는 구체적인 데이터 통신 방법을 말하는것이 아닌 사이트 스크래핑이나 웹 데이터를 이용하려 할때 또는 외부에서 사이트 내용을 사용할때 이용될 수 있는 간단한 HTTP 프로토콜 호출 구조이다. (편의상 존칭은 생략했습니다 ^^)
참고 문서 HTTP RFC(영문)

클라이언트 A 가 서버 B에 연결을 해서 test.html 을 받아오는 과정을 설명한다.

HTTP 호출 구조 이미지 출처(Wikipedia)

HTTP 프로토콜 호출 구조

1. URL 분석
2. 도메인 해석
3. 서버 접속
4. Request Header 전송
5. Request Data 전송 (옵션)
6. Response Header 수신
7. Response Body 수신
8. 연결 종료

위와 같은 구조로 HTTP 호출이 이루어진다 자세하게 보자면

예제 URL : http://www.testsitexxx.com:8080/test.html

1. URL 분석


브라우저에서 URL을 분석을 하게 된다 , 우리가 입력한 URL을 분석하여 프로토콜,호스트, 서버 포트, 호출 파일 등을 분석하게 된다.

일단 프로토콜(scheme라고도함) 을 분석하게 되는데 여기서 설명하게 될 부분은 HTTP이기때문에 그외의 프로토콜은 제외한다. http 와 https 등 호출하게되는 프로토콜이 있다. 위 예제 url에서는 http 이다.

그리고 호스트를 분석한다.위 url에서 호스트는 www.testsitexxx.com 이다.

서버 포트는 8080 포트를 이용을 한다. 기본으로는 80 포트를 이용하게 된다. 80포트는 HTTP의 예약된 포트번호이다.
경로는 / 이며 호출될 파일은 test.html 을 호출한다.

2. 도메인 해석


브라우저에서 서버에 접속을 할때는 도메인을 IP 주소로 변환하는 과정이 필요하다. DNS서버에 질의를 하여 호스트명을 IP주소로 반환한 값을 얻어와 해당 IP주소와 포트로 접속을 하게 된다. TCP 접속 방식 및 접속 구조에 대해서는 다음에 다루기로 한다.

3. 서버 접속


DNS서버에서 질의한 결과에 따른 IP와 URL에서 해석된 포트명으로 서버에 접속을 하게된다.

4. Request Header 전송


일반적으로 사이트를 호출할때는 아래와 같은 형태의 Request Header가 존재 한다.

GET(요청방식*1) /test.html(경로*2) HTTP/1.1(프로토콜버전*3)
Accept: */* (응답하여 해석할 파일의 종류*4)
Referer: (호출전경로*5)
User-Agent: (브라우저의 Agent값*7)
Accept-Encoding: gzip, deflate (수신가능한 body 인코딩 종류*8)
Host: (호출할 호스트*9)

Request Header 설명

헤더 기본 설명 펼치기


5. Request Data


POST 방식으로 데이터를 전송할때에 Request Header를 서버로 전송한 후 Request데이터를 보낸다 이 데이터를 보내려면 호출방식(메소드)를 POST로 지정을 한 후 데이터를 전송한다.
데이터를 보내는 방식에는 2가지가 있는데 하나는 form-urlencod 를 통해 보내는 방식 또 하나는 multipart-formdata 를 이용해 보내는 방식이 있다. 이 2가지 방식의 차이점은 전자는 일반적인 폼데이터(텍스트위주)만 전송할때 쓰이는 방식이고 아래 방식은 서버로 파일을 전송할때 사용이 된다.

호출 구조의 변화는 호출 메소드가 POST로 변화하고 전송하는 데이터의 길이를 서버에 알려준다 그리고 해당 데이터를 요청 폼에 맞게 전송을 하게 된다

URL Encoded 로 전송
Content-Type: application/x-www-form-urlencoded
Content-Length: XX

xxx=XXX&yyy=YYY


Multi Part Form-data 로 전송 (파일 전송시)
Content-Type: multipart/form-data; boundary=--------[boundaryKEY값]
Content-Length: XX 보낼 데이터의 전체적인 길이

--------[boundaryKEY값]
Content-Disposition: form-data; name="폼이름"; filename="파일이름"
Content-Type: 파일의 MIME 타입

파일 내용

--------[boundaryKEY값]
Content-Disposition: form-data; name="폼이름"

데이터
--------[boundaryKEY값]

위와같이 POST데이터를 전송한다

6.Response Header (응답헤더)



HTTP/1.1 200 OK
Server: Apache
Content-Length: xx
Transfer-Encoding: 데이터 인코딩의 타입
Content-Type: text/html; charset=utf-8
응답받은 헤더의 내용은 위와 같은 형태로 나타난다 헤더의 전체적인 응답데이터는 RFC문서를 참고하거나 추후 포스팅을 하겠다. 이부분은 서버가 HTTP/1.1방식으로 응답을 했다는 내용이다. 그리고 오류코드는 200 즉 정상으로 응답을 했다는 표시이고
전송하는 컨텐츠의 길이는 XXByte이다고 알려준다. Contents-Type 은 text/html 이고 그 데이터의 캐릭터셋은 utf-8이라는것을 브라우저에게 알려준다.

7. Response Body
응답헤더가 출력되고 CRLF가 2번 나온 후 HTTP Body(html body 아님) 가 출력이 되는데 이 것은 응답헤더의 인코딩 타입에 따라 달라지게 된다. 보통 gzip, chunked 인코딩이 사용된다.

인코딩 자세히 보기


편의상 존칭을 생략했습니다. ^^ 틀린 부분이나 보기 힘든 부분 있으면 말씀해주세요 ^^
그리고 RFC문서를 전체적으로 적는다기 보다 HTTP의 구조를 이해를 돕기 위해 적었습니다.
이올린에 북마크하기(0) 이올린에 추천하기(0)

Posted by 근원e

, , , ,
Response
No Trackback , 2 Comments
RSS :
http://www.lovelgw.com/Blog/rss/response/74

Trackback URL : http://www.lovelgw.com/Blog/trackback/74

Comments List

  1. karelin 2009/06/26 17:26 # M/D Reply Permalink

    CCL 마크가 없어서 제 블로그에 퍼가도 되는지 여부에 대해서 알고싶습니다 ^^
    피드백 부탁드립니다 ^^

    1. 근원e 2009/06/30 15:09 # M/D Permalink

      링크로만 제공해주십시오~ ^^ 차후 생각해보겠으나.. 현재까지는 CCL이 그리 달갑지는 않네요

Leave a comment
« Previous : 1 : ... 74 : 75 : 76 : 77 : 78 : 79 : 80 : 81 : 82 : ... 140 : Next »

블로그 이미지

달리자~ 아뵤~

- 근원e

Calendar

«   2010/03   »
  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 31      

Site Stats

Total hits:
168076
Today:
171
Yesterday:
875