by-nc-sa     개발자, DBA가 함께 만들어가는 구루비 지식창고!

HTTP (HyperText Transport Protocol)의 이해




HTTP (HyperText Transport Protocol)의 이해

웹 개발자라면 당연히 HTTP를 잘 이해하고 있어야 한다.

1. HTTP(HyperText Transport Protocol) 개요

1.1 HTTP 란?

  • HTTP란 HyperText Transport Protocol의 약자로 웹서버와 클라이언트간의 문서를 교환하기 위한 통신규약이다.
  • World Wide Web( WWW )의 분산되어 있는 Server와 Client 간에 Hypertext를 이용한 정보교환이 가능하도록 하는 통신 규약이다.
  • 1989년 Tim Berners Lee가 처음 설계
  • HTTP는 웹에서만 사용하는 Protocol로 TCP/IP 기반으로 한 지점에서 다른 지점(보통 클라이언트와 서버)으로 요청과 응답을 전송한다.

1.2 HTTP의 특징

  • HTTP 메시지는 HTTP Server와 HTTP Client에 의해서 해석
  • TCP/IP 프로토콜의 Application 계층에 위치
  • TCP Protocol을 이용한다( Default Port 80 )
  • 현재 Version 1.1 ( RFC 2616 )



2. HTTP 1.1

  • HTTP 1.0의 성능 개선에 중점을 두었다

2.1 HTTP 1.0의 문제점

  • 단순한 OPEN,OPERAIOTN,CLOSE
  • 매번 필요할 때마다 연결(비 지속성 연결방식) → 성능의 저하
  • 한번에 얻어서 가져올 수 있는 데이터의 양이 제한
  • URL의 크기도 작으며, 캐시 기능이 미흡함(Last-Modified에 의존)
  • GET/HEAD/POST method만 허용

2.2 HTTP 1.1의 개선

  • 지속적인 연결을 해 주는 persistent connection 지원
  • multiple request 처리 가능
  • request/response가 pipeline 방식으로 진행
  • proxy server와 캐시 기능 향상(Cache-Control)
  • GET,HEAD,POST,OPTIONS,DELETE,TRACE,CONNET 메소드 허용
파이프라이닝( Pipe Lining ) 이란?
  • 응답 메시지가 도착하지 않은 상태에서 연속적인 요구 메시지를 서버에 전달
  • 이때 서버는 요구메시지를 수신한 순서대로 응답메시지를 클라이언트에 전달
  • 연결과 종료횟수를 줄임으로서 네트워크 자원의 절약
  • 발생하는 패킷의 숫자를 감소, 네트워크 트래픽 감소



3. HTTP Message

  • Message 종류
    • Request : 요청 Message ( Client → Server )
    • Response : 응답 Message ( Server → Client )



3.1 HTTP Header

  • Header Field Definitions
  • 클라이언트와 서버 사이에서 부가적인 정보 교환
  • General headers, Request headers, Response headers, Entity headers가 있음
  • 헤더명, 콜런, 공백, 헤더값 형식 (Header Name: Header Value)
    • 예) Connection: close
  • Request Message와 Reponse Message 구조



3.1.1 General headers
  • 메시지에 대한 일반적인 정보 제공
  • Request Message와 Reponse Message 모두 사용 될 수 있다..
Header 설명
Connection Connection 옵션지정 Connection: close
Date 메세지가 작성된 일시 Date: Wed, 05 May 2010 17:27:50 GMT
Cache-Control cache사용을 막을것인지 허용할것인지를 제어함.
  • Cache Request 지시문
    • no-cache : 캐시 하지 않는다. cache서버, proxy서버, 브라우져에 cache하지 말도록 지시함.
    • no-store : 신속히 넘긴 후에 정보를 제거한다.
    • max-age = seconds : seconds에 지정한 것보다 오래된 응답은 보내지 않는다.
    • max-stale [=seconds] : 만료된 데이터를 보낸다. 만약 seconds가 지정되어 있다면 지정한 숫자보다 적은 만료된 데이터를 보낸다.
    • min-fresh = seconds : 명시된 seconds의 수 이후의 변경된 새 데이터만 보낸다.
    • only-if-cached : 새로운 데이터를 검색하지 않고 캐시에 있는 데이터만 반환한다.
  • Cache Response 지시문
    • public : 어떠한 캐시라도 캐시할수 있다.
    • private : 공유된 캐시는 캐시하지 않는다.
    • no-cache : 캐시하지 않는다.
    • no-transform : 데이터를 변환하지 않는다.
    • must-revalidate : 클라이언트는 데이터를 재확인 해야 한다.
    • proxy-revalidate : 개인적인 클라이언트 캐시를 제외하고 데이터를 재확인 해야한다.
    • max-age=seconds : 문서는 지정된 seconds만큼만 변화가 없는 상태라고 생각



3.1.2 Request headers
  • 클라이언트의 구성과 문서 형식을 지정
  • Request Message만 존재
Header 설명
Accept 클라이언트가 받아들이는 미디어 타입 Accept: text/javascript, text/html, application/xml, text/xml, /
Accept-Charset 클라이언트가 다루는 문자열 ? 지정 Accept-Charset: windows-949,utf-8;q=0.7,*;q=0.3
Accept-Language 클라이언트가 받아들일 언어 Accept-Language: ko-KR
Host 호스트의 주소와 포트 번호 Host: www.gurubee.net
User-Agent 클라이언트 프로그램( 웹 브라우저)을 표시 User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1
If-Modified-Since    
Referer    
If-Match    
If-None-Match    
If-Range    
If-Unmodified-Since    
Max-Forwards    



3.1.3 Response headers
  • 서버의 구성과 요청에 대한 특별한 정보를 지정
  • Reponse Message만 존재
Header 설명
Server HTTP Server 정보 Server: Apache
Accept-Ranges    
Age    
ETag    



3.1.4 Entity headers
  • 문서의 본문에 대한 정보 제공
  • Request Message와 Reponse Message 모두 존재한다.
Header 설명
Content-Length 응답되는 컨텐츠의 사이즈 Content-Length: 3495
Content-Type 응답되는 컨텐츠의 유형 Content-Type: text/html; charset=UTF-8
Expires Cache가 초기화 되는 시간 Expires: Thu, 01 Dec 1994 16:00:00 GMT
Last-Modified 응답되는 컨텐츠가 마지막으로 수정될 일시 Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT
Content-Range    
Content-Location    
Content-Language    



3.2 HTTP Request Message

3.2.1 HTTP Request Message Format
Request Message 설명
GET /home/newRelease.nhn HTTP/1.1 Reqeust Line (HTTP method(GET, POST, HEAD, TRACE...), URL, HTTP 버전 정보를 알 수있다.)
Accept: /
Accept-Language: ko-KR
Referer: http://www.gurubee.net/
x-flash-version: 10,2,159,1
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1..
Host: www.gurubee.net
Connection: Keep-Alive
Cookie: JSESSIONID=286C75937E048B54850657F5203532ED;
Headers
3.2.2 HTTP method
  • GET
    • URL에 해당하는 정보의 전송요청
    • 데이터의 전달 : 이름과 값을 쌍으로. ex) name=value
  • 데이터의 구분 : & 사용. ex) name1=value1&name2=value2)
    • 데이터가 URL에 노출
    • 인코딩/디코딩의 과정이 없기 때문에 POST보다 빠르다
    • URL의 길이 제약으로 인해 많은 데이터 전송은 무리
  • POST
    • 폼에서 POST 지정하는 경우
    • 데이터는 HTTP Boby에 숨겨서 서버로 전송
    • GET으로 보낼수 없는 자료를 전송할때 사용 가능
  • HEAD
    • GET과 동일하나 HTTP Header 정보만 요청
    • 네트워크 대역을 절약, 리소스의 크기확인시 사용
  • OPTIONS
    • 어떤 HTTP 메소드를 지원하는 지 검사
    • 요청한 URL에 어떤 메소드 요청이 가능한지 확인
    • 보안적으로 위험, 헤커들에게 중요한 정보를 제공하게 된다. 비활성화
  • PUT
    • URI로 지정한 서버에 있는 파일을 대치한다.
    • URI로 지정한 파일이 없는 경우는 파일을 새로 작성한다.
    • 보안적으로 위험, 비활성화 시킨다.
  • DELETE
    • URI로 지정한 서버에 있는 파일을 삭제한다
    • 보안적으로 위험, 비활성화
  • TRACE
    • 서버측에서 받은 리퀘스트 라인과 헤더를 그대로 클라이언트로 반송한다.
    • 프록시 서버 등을 쓰는 환경에서 리퀘스트가 바뀌어 써지는 모양을 살펴볼 때 사용한다.
    • Request의 Loopback 테스트용으로 사용 할 수 있다.
  • CONNECT
    • 터널링의 목적으로 연결요청
    • Forward Proxy에 HTTP TLS (Transport Layer Security) 터널링 (Tunnelling)을 요청할 때 사용
  • 아파치에서 HTTP Method 보안설정
    <Directory /home>
      <LimitExcept GET POST>
         Order deny,allow
         Deny from all
      </LimitExcept>
    </Directory>
    



3.3 HTTP Response Message

3.3.1 HTTP Response Message Format
Request Message 설명
HTTP/1.1 200 OK Status Line
Last-Modified: Wed, 05 May 2010 17:27:50 GMT
Content-Length: 1251273
Cache-Control: max-age=604800
Content-Type: text/html; charset=UTF-8
Expires: Sun, 05 Jun 2011 06:25:47 GMT
Headers
3.3.2 HTTP Status Code
Status Code Message 설명
200 OK 모든 것이 정상
204 No Content 요구가 처리되었으나 클라이언트에게 전달할 문서 없음. 브라우저는 이전 문서를 계속 보여줘야 한다.
206 Partial Content Range 헤더 지정 요청에 응답하는 데 이용된다. 서버는 반드시 Content-Range 헤더와 응답에 포함된 범위를 지정해야 한다.
304 Not Modified 변경 없음
400 Bad Request 잘못된 요청
403 Forbidden 접근권한 없음
404 Not Found 요청한 내용이나 파일을 찾을 수 없음
408 Request Timeout 클라이언트가 요청을 보내는 데 너무 오랜 시간이 걸림.
414 Request URI Too Long URI가 너무 길어 오류 발생
500 Internal Server Error 서버 에러
503 Service Unavailable 서버 한계 초과 등의 오류



참고자료

문서정보

Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.