2022. 7. 2. 18:52ㆍServer
HTTP(HyperText Transfer Protocol)
웹 상에서 웹 서버 및 웹브라우저 상호간의 데이터 전송을 위한 응용계층 프로토콜이다. 처음에는, WWW 상의 하이퍼텍스트 형태의 문서를 전달하는데 주로 이용한다. 현재에는, 이미지, 비디오, 음성 등 거의 모든 형식의 데이터 전송 가능
HTTP의 특징
1. 요청 및 응답 메세지로 대응되는 구조
- 동작 형태가 클라이언트/서버 모델로 동작
2. 메세지 교환 형태의 프로토콜
- 클라이언트와 서버 간에 HTTP 메세지를 주고 받으며 통신한다.
(SMTP 전자메일 프로토콜과 유사)
3. 트랜잭션 중심의 비연결성 프로토콜
- 종단간 연결이 없음
- 이전의 상태를 유지하지 않음
4. 수송계층 프로토콜 및 사용 포트 번호
- 수송계층 프로토콜 : TCP
- 사용 포트 번호 : 80번
HTTP 1.1
-HTTP 1.0으로부터 기능 향상
따라서, 1개 IP 주소에 다수의 가상 호스팅이 가능해짐
-HTTP 헤더 내 Accept 필드에 의한 컨턴츠 협상
-HTTP 메소드 추가 및 조정
OPTIONS, CONNECT, TRACE 추가
PUT, DELETE 필수로 됨
- 잘 정의된 캐시 컨트롤
- 블록 단위 인코딩 전송
- 병렬 커넥션
여러 TCP 커넥션을 통한 동시 HTTP 처리
또한, 요청 파이프라인을 통한 병렬 커넥션 처리도 가능
- 지속 커넥션을 통한, 커넥션 재사용
HTTP1.0에서는 요청 헤더에 다음 헤더를 추가함으로써, Keep-Alive로써 구현됐으나, HTTP1.1부터는 지속 커넥션 접속이 기본 동작이 됨(즉, 기존 TCP 연결을 끊지 않음으로써, 재연결에 따른 TCP 느린 시작에 의한 지연 방지)
- 그 크기를 미리 알 수 없는 컨텐츠의 청크 전송 인코딩 지원
- SSL/TLS에 의한 암호화 통신 지원
HTTP의 인증, 보안
HTTP 인증 방식
1. 자체 인증 방식 : Basic 인증 및 Digest 인증
2. 기타 인증 방식 : 별도의 인증 모듈을 사용하여 직접 구현(복잡하지만 보안성 강화됨)
HTTP 보안 보전 : HTTPS(Secure Hypertext Transfer Protocol)
- 도청, 통신 상대방 위장, 임의 내용 변경 등 방지, SSL/TLS 등 다른 프로토콜들을 조합시켜 통신 내용을 암호화시킴
코드 | 메시지 | 설명 |
1XX | Informational(정보) | 정보 교환. |
100 | Continue | 클라이언트로부터 일부 요청을 받았으니 나머지 요청 정보를 계속 보내주길 바람. (HTTP 1.1에서 처음 등장) |
101 | Switching Protocols | 서버는 클라이언트의 요청대로 Upgrade 헤더를 따라 다른 프로토콜로 바꿀 것임. (HTTP 1.1에서 처음 등장) |
2XX | Success(성공) | 데이터 전송이 성공적으로 이루어졌거나, 이해되었거나, 수락되었음. |
200 | OK | 오류 없이 전송 성공. |
202 | Accepted | 서버가 클라이언트의 요청을 수락함. |
203 | Non-authoritavive Information | 서버가 클라이언트 요구중 일부만 전송. |
204 | Non Content | 클라이언트의 요구를 처리했으나 전송할 데이터가 없음. |
205 | Reset Content | 새 문서 없음. 하지만 브라우저는 문서 창을 리셋해야 함. (브라우저가 CGI 폼 필드를 전부 지우도록 할 때 사용됨.) (HTTP 1.1에서 처음 등장) |
206 | Partial Content | 클라이언트가 Range 헤더와 함께 요청의 일부분을 보냈고 서버는 이를 수행했음. (HTTP 1.1에서 처음 등장) |
3XX | Redirection(방향 바꿈) | 자료의 위치가 바뀌었음. |
300 | Multiple Choices | 최근에 옮겨진 데이터를 요청. |
301 | Moved Permanently | 요구한 데이터를 변경된 URL에서 찾았음. |
302 | Moved Permanently | 요구한 데이터가 변경된 URL에 있음을 명시. 301과 비슷하지만 새 URL은 임시 저장 장소로 해석됨. [8] |
303 | See Other | 요구한 데이터를 변경하지 않았기 때문에 문제가 있음. |
304 | Not modified | 클라이언트의 캐시에 이 문서가 저장되었고 선택적인 요청에 의해 수행됨 (보통 지정된 날짜보다 더 나중의 문서만을 보여주도록 하는 If-Modified-Since 헤더의 경우).[9] |
305 | Use Proxy | 요청된 문서는 Location 헤더에 나열된 프록시를 통해 추출되어야 함. (HTTP 1.1에서 처음 등장) |
307 | Temporary Redirect | 자료가 임시적으로 옮겨짐. |
4XX | Client Error(클라이언트 오류) | 클라이언트 측의 오류. 주소를 잘못 입력하였거나 요청이 잘못 되었음. |
400 | Bad Request | 요청 실패. 문법상 오류가 있어서 서버가 요청사항을 이해하지 못함,[10] |
401.1 | Unauthorized | 권한 없음 (접속실패). 서버에 로그온 하려는 요청사항이 서버에 들어있는 권한과 비교했을 때 맞지 않음.[11] |
401.2 | Unauthorized | 권한 없음 (서버설정으로 인한 접속 실패). 서버에 로그온 하려는 요청사항이 서버에 들어있는 권한과 비교했을 때 맞지않음.[12] |
401.3 | Unauthorized | 권한 없음 (자원에 대한 ACL에 기인한 권한 없음). 클라이언트가 특정 자료에 접근할 수 없음.[13] |
401.4 | Unauthorized | 권한 없음 (필터에 의한 권한 부여 실패). 서버에 접속하는 사용자들을 확인하기 위해 설치한 필터 프로그램이 있음.[14] |
401.5 | Unauthorized | 권한 없음 (ISA PI/CGI 애플리케이션에 의한 권한부여 실패). 이용하려는 서버의 주소에 ISA PI나 CGI프로그램이 설치되어 있고, 권한을 부여할 수 없음.[15] |
402 | Payment Required | 예약됨. |
403.1 | Forbidden | 금지 (수행접근 금지). 수행시키지 못하도록 되어있는 디렉터리 내의 실행 파일을 수행하려고 하였음. |
403.2 | Forbidden | 금지 (읽기 접근 금지). 접근한 디렉터리에 가용한 기본 페이지가 없음.[16] |
403.4 | Forbidden | 금지 (SSL 필요함). 접근하려는 페이지가 SSL로 보안유지 되고 있음.[17] |
403.5 | Forbidden | 금지 (SSL 128필요함). 페이지가 128비트의 SSL로 보안유지 되고 있음.[18] |
403.6 | Forbidden | 금지 (IP 주소 거부됨). 사용자가 허용되지 않은 IP로부터 접근함. |
403.7 | Forbidden | 금지 (클라이언트 확인 필요). 클라이언트가 자료에 접근할 수 있는지 확인 요함.[19] |
403.8 | Forbidden | 금지 (사이트 접근 거부됨). 서버가 요청사항을 수행하고 있지 않거나, 해당 사이트에 접근하는 것이 허락되지 않음. |
403.9 | Forbidden | 접근금지 (연결된 사용자수 과다). 서버가 BUSY 상태에 있어서 요청을 수행할 수 없음. |
403.10 | Forbidden | 접근금지 (설정이 확실 하지 않음). |
403.11 | Forbidden | 접근금지 (패스워드 변경됨). 잘못된 암호를 입력했음. |
403.12 | Forbidden | 접근금지(Mapper 접근 금지됨). 클라이언트 인증용 맵이 해당 웹 사이트에 접근하는 것이 거부됨. |
404 | Not Found | 문서를 찾을 수 없음. 서버가 요 청한 파일이나 스크립트를 찾지 못함. |
405 | Method not allowed | 메서드 허용 안됨. 요청 내용에 명시된 메서드를 수행하기 위해 해당 자원의 이용이 허용되지 않음.[20] |
406 | Not Acceptable | 받아들일 수 없음.[21] |
407 | Proxy Authentication Required | 프록시 서버의 인증이 필요함.[22] |
408 | Request timeout | 요청 시간이 지남. |
409 | Conflict | 요청을 처리하는 데 문제가 있음. 보통 PUT 요청과 관계가 있다. 보통 다른 버전의 파일을 업로드할 경우 발생함. (HTTP 1.1에서 새로 등장) |
410 | Gone | 영구적으로 사용할 수 없음. |
411 | Length Required | 클라이언트가 헤더에 Content-Length를 포함하지 않으면 서버가 처리할 수 없음.(HTTP 1.1에서 새로 등장) |
412 | Precondition Failed | 선결조건 실패. 헤더에 하나 이상의 선결조건을 서버에서 충족시킬 수 없음.[23] |
413 | Request entity too large | 요청된 문서가 현재 서버가 다룰 수 있는 크기보다 큼.[24] (HTTP 1.1에서 새로 등장) |
414 | Request-URI too long | 요청한 URI가 너무 김.[25] |
415 | Unsupported media type | 요청이 알려지지 않은 형태임. (HTTP 1.1에서 새로 등장) |
5XX | Server Error(서버 오류) | 서버 측의 오류로 올바른 요청을 처리할 수 없음. |
500 | Internal Server Error | 서버 내부 오류.[26] |
501 | Not Implemented | 필요한 기능이 서버에 설치되지 않았음.[27] |
502 | Bad gateway | 게이트웨이 상태 나쁨.[28] |
503 | Service Unavailable | 외부 서비스가 죽었거나 현재 멈춘 상태 또는 이용할 수 없는 서비스.[29] |
504 | Gateway timeout | 프록시나 게이트웨이의 역할을 하는 서버에서 볼 수 있음. 초기 서버가 원격 서버로부터 응답을 받을 수 없음. (HTTP 1.1에서 새로 등장) |
505 | HTTP Version Not Supported | 해당 HTTP 버전을 지원하지 않음. |
HTTPS(HyperText Transfer Protocol over Secure Socket Layer)
월드 와이드웹 통신 프로토콜인 HTTP의 보안이 강화된 버전이다. HTTPS는 통신의 인증과 암호화를 위해 넷스케이프 커뮤니케이션즈 코퍼레이션이 개발한 넷스케이프 웹 프로토콜이며, 전자 상거래에서 널리 쓰인다. HTTPS는 소켓 통신에서 일반 텍스트를 이용하는 대신에 SSL이나 TLS 프로토콜을 통해 세션 데이터를 암호화한다. 따라서 데이터의 적절한 보호를 보장한다. HTTPS의 기본 TCP/IP 포트는 443이다.
보호의 수준은 웹 브라우저에서의 구현 정확도와 서버 소프트웨어, 지원하는 암호화 알고리즘에 달려있다.
HTTP 패킷
요청 메세지
요청 라인 : 버전 정보를 담고 있는 행(요청 메소드 / 요청 URL / HTTP버전)으로 이루어져 있다.
요청 헤더 : 여러 헤더들로 구성되며 각각 정보는 공백으로 구분된다.
(헤더명 : 헤더값 <개행> 헤더명 : 헤더값...)
공백 라인 : 헤더의 끝을 의미하는 개행이다.
본문 : 직접적인 데이터가 담겨 있다.
응답메세지 구조
상태 라인 : 요청 메세지와 마찬가지로 버전 정보를 담고 있다. (HTTP버전 / 상태코드 / 응답구문)
으로 이루어져 있다.
응답 헤더 : 여러 헤더들로 구성되며 각 정보는 개행으로 구분됩니다.
빈 라인 : 헤더의 끝을 의미하는 개행이다.
본문 : 서버에서 클라이언트로 전송된 데이터가 담겨져 있는 곳이다.
HTTP는 TCP로 동작하기 때문에 3wayhandshake가 정상적으로 맺는다
필터를 http로 하게 되면 위와 같이 패킷을 볼 수 있다. 아무 패킷에 우클릭을 하게 되면 Fllow탭에 HTTP Stream을 볼 수 있다
빨간 글씨는 클라이언트가 서버에 요청 파랑 글씨는 서버가 클라이언트에 응답한 메세지이다.
요청 메세지
응답 메세지
서버에 대한 정보들이 평문으로 보여지는 것을 확인 할 수 있다. 그 다음 본문 DATA 부분에는 페이지에 관한 웹 언어가 나오게 된다
이런 식으로 HTTP만을 사용하게 되면 전체 정보가 평문으로 전달이 되기 때문에 지금은 대부분의 서버가 HTTPS를 사용하여 암호화한 프로토콜을 사용한다.
'Server' 카테고리의 다른 글
DHCP(실습) (0) | 2022.06.19 |
---|---|
CA(Certification Authority) 인증기관 (0) | 2022.06.13 |
CDN(Content Delivery Network) (0) | 2022.06.13 |
Linux Server 3일차(DNS) (0) | 2022.01.21 |
Linux Server 2일차(FTP) (0) | 2022.01.20 |