HTTP(Hyper Text Transfer Protocol) 프로토콜
1. 개요
- 웹 상에서 클라이언트와 서버 간에 통신을 위해 개발된 프로토콜
- 80/tcp 포트
- 1999년 1.1버전 발표 이후 현재까지 사용
2. 특성
1. Connectionless
- HTTP/1.1 버전 이후 웹서버 Connection 응답헤더에 Keep-Alive 옵션 추가
- 웹서버 설정에 따라 일정 시간 연결 지속
- 이전 버전: 1회 Request 시 1회 Response 후 Connection 종료
- 웹서버 설정
- ex. 아파치 웹서버 설정 파일 /etc/httpd.conf
KeepAlive On
MaxKeepAliveRequests 100 //최대 요청 건수
KeepAliveTimeout 15 //지속 시간
2. Stateless
- 클라이언트의 현재 / 이전 요청 식별 X
- 상태정보 유지가 필요한 경우가 있기 때문에 (ex. 장바구니) 클라이언트 기술 사용
- 클라이언트 상태정보 유지 기술
- 쿠키
- 클라이언트에 저장
- 개별 상태정보 HTTP 요청 / 응답헤더에 전달하는 작은 데이터
- Set-cookie / cookie 에 쿠키 직접 전달
- 스니핑 / 해킹에 취약
- 세션
- 서버에 저장
- 클라이언트 식별 위해 세션ID 부여
- Set-cookie / cookie 에 세션ID 전달
- HTTP 세션 하이재킹을 통해 정상 사용자로 위장 접근 가능
- 쿠키
3. HTTP 쿠키 보안 속성
- httponly
- 스크립트로 쿠키 접근 차단(XSS 대응)
- Set-cookie 응답헤더에 설정
- key: Set-cookie
- value: PUPSESSID=38d7a9sjdyf01273; path=/; HttpOnly
- secure
- 패킷 암호화(기밀성), HTTPS 통신인 경우에만 쿠키 전송
- Set-cookie 응답헤더에 설정
- key: Set-cookie
- value: PUPSESSID=38d7a9sjdyf01273; path=/; HttpOnly; secure
- expires
- 쿠키 유효기간 설정(날짜/시간)
- Set-cookie 응답헤더에 설정
- key: Set-cookie
- value: PUPSESSID=38d7a9sj01273; path=/; HttpOnly; secure; expires=Sat, 16-Dec-2025 04:32:19 GMT
4. HTTP 요청 메소드
- GET, POST, HEAD, OPTIONS, TRACE, PUT, DELETE, ...
HEAD | OPTIONS | |
클라이언트 요청 | HEAD /index.php HTTP/1.0 | OPIONS * HTTP/1.0 |
서버 응답 | HTTP/1.1 200 OK Date: ~ Server: ~ Content-Length:0 Content-Type: text/html <CRLF> |
HTTP/1.1 200 OK Date: ~ Server: ~ Content-Length:0 Allow: GET, HEAD, OPTIONS, TRACE <CRLF> |
특징 | body 없고 헤더만 반환 | Allow 응답헤더를 통해 웹서버 지원 메소드 반환 |
5. HTTP 응답 상태 코드
응답 | 상세코드 | 설명 | 비고 |
1xx (정보) | 100 | continue | |
2xx(성공) | 200 | OK | |
201 | created | ||
202 | accepted | ||
3xx(Redirection) |
301 | moved permanently | 자원 위치 영구 변경 |
302 | found | 자원 위치 임시 변경 | |
304 | not modified | ||
4xx(클라이언트 오류) | 400 | bad request | 요청 메시지 문법 오류 |
401 | unauthorized | 권한 없음 | |
403 | forbidden | 접근 차단(ACL 등) | |
404 | not found | 자원 존재하지 않음 | |
5xx(서버 오류) | 500 | 내부 서버 오류 |