HTTP (Hyper Text Transfer Protocol)
•
인터넷에서 html 같은 리소스를 가져올 때 사용되는, 서버와 클라이언트 간 통신 규약
•
동작 과정
1.
사용자가 브라우저 주소창에 URI(www.naver.com)를 입력
2.
OS는 DNS서버를 조회하여, 도메인명에 해당하는 IP주소 파악
3.
웹 서버와 TCP 연결 시도
•
TCP 3-way Handshake
◦
클라이언트-서버 간 신뢰성 있는 연결을 위한 3번의 패킷 교환 과정
4.
서버에게 요청 메시지 전송
•
요청 메시지 형식
요청문 | 요청메소드 URL HTTP버전 | GET /index.html HTTP/1.1 |
메시지 헤더 | 호스트네임, 브라우저 정보,
압축 정보, 인증 정보 등
부가정보 저장 | Host: www.naver.com |
메시비 바디 | 실제 전송될 데이터 저장
GET 요청일 경우 Body 없음 |
5.
서버는 클라이언트에게 응답 메시지 전송
•
웹 문서를 클라이언트에게 회신
•
응답 메시지 형식
상태문 | HTTP버전 상태코드 상태이름 | HTTP/1.1 200 OK |
메시지 헤더 | 호스트네임, 브라우저 정보,
압축 정보, 인증 정보 등
부가정보 저장 | Date: Thu, 12 Feb 2009 06:29:38 GMT
Server: Apache/1.3.29 (Unix) PHP/4.3.4RC3
X-Powered-By: PHP/4.3.4RC3
Transfer-Encoding: chunked
Content-Type: text/html |
메시지 바디 | 실제 전송될 데이터 저장 | <HTML> … </HTML> |
6.
클라이언트-서버 간 연결 해제
•
4-way Handshake
◦
클라이언트와 서버가 서로에게 연결 종료하기 위한 4번의 패킷 교환과정
•
단점
◦
통신 시, 평문을 교환하므로 도청될 경우, 정보가 노출됨
◦
통신 상대를 확인하지 않지 않음
발생할 수 있는 문제
◦
메시지의 완전성을 증명하지 않기 때문에 조작된 메시지를 수신할 수 있음
•
단점 해결 방안
◦
HTTP에 SSL 프로토콜을 접목
SSL (Secure Socket Layer)
•
공개키방식과 대칭키방식을 이용한 암호화로 인터넷 연결을 보호하는 표준 기술
•
SSL Handshake
◦
서버와 클라이언트가 서로 신분을 확인하고, 필요한 정보(통신에 사용될 대칭키 등)을 교환
◦
과정
1.
파란 화살표
•
TCP Handshake 과정
2.
CLIENT HELLO
•
클라이언트는 암호 알고리즘과 압축방식 등 정보가 담긴 Clinet Hello 메시지를 서버에게 전송
3.
SERVER HELLO
•
서버는 Client Hello의 응답으로, 세션 ID와 서버 공개키 인증서가 담긴 Server Hello 메시지를 전송
4.
PRE MASTER SECRET
•
클라이언트는 서버 공개키 인증서로부터 서버의 공개키를 획득
•
이 키를 이용하여 난수를 암호화하여 예비 마스터 암호를 서버에게 전송
5.
SESSION KEY CREATION
•
서버는 예비 마스터 암호를 자신의 개인키로 복호화하여, 난수를 획득
•
이 난수를 획득함으로써, 서버와 클라이언트는 마스터키를 완성
•
마스터 키를 이용하여 세션키를 생성
6.
CLIENT FINISHED
•
클라이언트는 지금까지 교환한 내역을 해시 후 세션키로 암호화하여 FINISHED 메시지를 서버에게 전송
7.
SERVER FINISHED
•
서버도 교환 내역을 해시하고, 그 결과와 클라이언트에게 받은 FINISHED가 일치한지 비교
•
일치할 경우, 해당 세션키를 대칭키로 사용
8.
EXCHANGE MESSAGES
•
세션키를 이용하여 메시지를 대칭키 방식으로 암호화한 후, 통신
HTTPS (Hyper Text Transfer Protocol Secure)
•
HTTP에 SSL프로토콜을 사용하여 보안기능이 추가된 형태
1.
HTTP 프로토콜을 통해 메시지 생성
2.
SSL 프로토콜을 통해 상대방 인증 후 메시지 암호화
3.
TCP 프로토콜을 통해 신뢰성있는 전송을 보장
•
수신자가 존재하는지 파악
•
메시지 흐름제어, 혼잡제어 등
•
메시지 순차 전송
4.
IP 프로토콜을 통해 통신 경로를 파악하여 전송
•
HTTP 단점 해결
◦
대칭키로 암호화함으로써, 도청되어 정보가 노출되는 것을 방지
◦
인증서(공개키)로 상대를 확인함으로써, 위장 공격 방지
◦
메시지 다이제스트를 통해, 완정성 증명
▪
메시지 다이제스트(Message Digest)
•
데이터에서 일정 길이의 요약을 보고, 이 요약된 값이 예상 값과 같은지 확인
•
예상값과 같다면, 해당 메시지는 조작되지 않았음을 보장
HTTP 상태코드
•
API 응답 상태를 코드를 통해 파악
•
API문서 작성 시 꼭 필요한 정보
•
200번대
◦
200 (OK) : 조회 요청 성공
◦
201 (Create) : 생성 요청 성공
◦
204 (No Content) : 리소스 삭제 요청 성공
•
300번대
◦
301 (Move Permanently)
▪
요청 URI가 새로운 위치로 옮겨감
•
400번대
◦
클라이언트 오류
◦
400 (Bad Request)
▪
정의되지 않은 요청이 들어옴
▪
ex. URI 문법이 잘못됨
◦
401 (Unauthorized)
▪
인증 오류
▪
비로그인된 상태에서 허가되지 않은 접근
◦
403 (Forbidden)
▪
인증은 되었으나, 해당 자원에 대한 권한이 없음
▪
비로그인/로그인된 상태에서 허가되지 않은 접근
◦
404 (Not Found)
▪
요청 URI에 대한 리소스가 존재하지 않음
▪
URI가 없음
•
500번대
◦
서버 오류
◦
500 (Internal Server Error)
▪
서버 내부 오류
◦
502 (Bad Gateway)
▪
게이트웨이로 작업하는 동안 오류 발생
▪
ex. 너무 많은 트래픽이 몰리는 경우