2015. 8. 12. 02:39ㆍ프로그래밍/서버
HyperText Transport Protocol의 약자로 웹서버와 클라이언트간의 문서를 교환하기 위한 통신규약.
특징
HTTP 메시지는 HTTP 서버와 HTTP 클라이언트에 의해 해석
TCP/IP 프로토콜의 응용 계층이다
TCP Protocol을 이용한다.
파이프라이닝(Pipe Lining)
응답 메시지가 도착하지 않은 상태에서 연속적으로 요구 메시지를 서버에 전달.
이때, 서버는 요구 메시지를 수신한 순서대로 응답 메시지를 클라이언트에게 전달.
연결과 종료횟수를 줄임으로써 네트워크 자원을 절약.
발생하는 패킷의 숫자를 감소, 네트워크 트래픽 감소.
HTTP 메시지
메시지 종류 - 요청 메시지(Request Message, C->S), 응답 메시지(Response Message, S->C)
HTTP Header
클라이언트와 서버 사이에서 부가적인 정보를 교환한다.
General, Request, Response, Entity Header가 있다.
General Headers
메시지에 대한 일반적인 정보 제공.
Header | 설명 | 예 |
---|---|---|
Connection | Connection 옵션지정 | Connection: close |
Date | 메세지가 작성된 일시 | Date: Wed, 05 May 2010 17:27:50 GMT |
Request Header
클라이언트의 구성과 문서 형식을 지정
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 |
Response Headers
서버의 구성과 요청에 대한 특별한 정보를 지정
Header | 설명 | 예 |
---|---|---|
Server | HTTP Server 정보 | Server: Apache |
Entity Headers
문서의 본문에 대한 정보 제공
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 |
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 |
HTTP method
GET
URL에 해당하는 정보의 전송요청
데이터 전달 : 이름과 값을 쌍으로 보낸다. ex) name=value
데이터 구분 : &사용. ex)name1=value1&name2=value2
데이터가 URL에 노출
인코딩/디코딩의 과정이 없기 때문에 POST보다 빠르다.
URL의 길이 제약으로 인해 많은 데이터 전송은 무리
POST
폼에서 POST 지정하는 경우 사용
데이터는 HTTP Body에 숨겨서 서버로 전송된다.
GET으로 보낼 수 없는 자료를 전송할 때 사용.
HEAD
GET과 동일하나 HTTP Header 정보만 요청
네트워크 대역을 절약, 리소스의 크기확인시 사용
OPTIONS
응답 가능한 HTTP 메소드를 요청
요청한 URL에 어떤 메소드 요청이 가능한지 확인한다.
보안적으로 위험, 해커들에게 중요한 정보를 제공하게 된다.
PUT
URI로 지정한 서버에 있는 파일을 대치한다.
URI로 지정한 파일이 없는 경우는 파일을 새로 작성한다.
보안적으로 위험.
*통합 자원 식별자(Uniform Resource Identifier, URI)는 인터넷에 있는 자원을 나타내는 유일한 주소이다. URI의 존재는 인터넷에서 요구되는 기본조건으로서 인터넷 프로토콜에 항상 붙어 다닌다.
위의 프로토콜 형태는 URI의 한 종류인 URL 형식의 표현 방법따른 예 입니다.
DELETE
URI로 지정한 서버에 있는 파일을 삭제한다.
보안적으로 위험.
TRACE
서버측에서 받은 리퀘스트 라인과 헤더를 그대로 클라이언트에게 반송한다.
프록시 서버 등을 쓰는 호나경에서 리퀘스트가 바뀌어 써지는 모양을 살펴볼 때 사용한다.
Request의 Loopback 테스트용으로 사용할 수 있다.
CONNECT
터널링의 목적으로 연결요청
Forward Proxy에 HTTP TLS(Transport Layer Security) 터널링(Tunneling)을 요청할 때 사용
*터널링 - 서로 다른 통신규약을 사용하는 통신망 사이에서 데이터를 전송하는 방법의 한 가지로 하나의 망이 다른 망과의 연결을 이용해 데이터를 전송할 수 있게 해주는 기술을 말한다. 터널링은 터널을 통해 서로 다른 지역을 통과하는 것처럼 통신망으로 전달된 데이터 패킷을 다른 통신규약을 사용해서 표현한 다음 전달하는 방법이다. 이 방법을 통해 데이터 패킷에서 사용되던 통신규약을 채용하지 않은 통신망이라도 데이터 패킷을 전송할 수 있게 된다.
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 |
Status Code
Status Code | 설명 |
---|---|
200 | OK |
400 | Bad Request (잘못된 요청) |
403 | Forbidden (접근권한 없음) |
404 | Not Found (요청한 내용이나 파일을 찾을 수 없음) |
500 | Internal Server Error (서버 에러) |
'프로그래밍 > 서버' 카테고리의 다른 글
TCP Max Packet (0) | 2015.09.11 |
---|---|
리눅스 vim cheat sheet (2) | 2015.09.05 |
TCP vs UDP (1) | 2015.08.18 |
리눅스 네트워크 명령어 (0) | 2015.08.10 |
vim 설치 (0) | 2015.08.09 |
프라우드넷 (0) | 2015.07.24 |
동기화 (0) | 2015.07.23 |