HTTP 0.9
HTTP 프로토콜 초기버전인 HTTP 0.9에서는 클라이언트가 서버에 요청(Request)을 하면 서버 응답(Response)으로 상태코드나 헤더 없이 단순히 HTML 문서만 전송
HTTP 1.0
결과에 대한 상태를 알려주기 위한 상태코드 추가, 헤더 추가, 메서드 추가
HTTP 1.1
Keep-Alive를 지원하여 연결 재사용 가능, 다양한 상태 코드 추가, 캐시, 압축, 대역폭 제어 등의 추가 헤더 추가
HTTP 요청 메시지
클라이언트가 서버에 정보를 요청하기 위해 보내는 메시지
구성요소
1. 요청 라인 (Request Line)
요청 메서드 (예: GET, POST)
요청 URI (Uniform Resource Identifier)
HTTP 버전 (예: HTTP/1.1)
GET /index.html HTTP/1.1
2. 헤더 필드 (Header Fields)
요청에 대한 추가 정보를 담고 있는 필드들. 각 필드는 키:값 형식
일반적인 헤더 필드
Host: 요청하는 서버의 도메인 이름
User-Agent: 클라이언트의 정보
Accept: 클라이언트가 수용할 수 있는 콘텐츠 타입
Content-Type: 전송할 데이터의 타입 (주로 POST 요청에서 사용)
Content-Length: 전송할 데이터의 길이
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html
3. 빈 줄
헤더와 본문을 구분하는 빈 줄이 필요
4. 본문 (Body) (선택 사항)
POST 요청과 같이 데이터를 전송할 때 포함. 일반적으로 JSON, XML, 폼 데이터 등의 형식으로 포함
POST /submit HTTP/1.1 # 요청 메서드: POST, 요청 경로: /submit, HTTP 버전: 1.1
Host: www.example.com # 요청하는 서버의 도메인 이름
User-Agent: Mozilla/5.0 # 클라이언트 소프트웨어(웹 브라우저)의 정보
Content-Type: application/x-www-form-urlencoded # 전송할 데이터의 타입 (폼 데이터 형식)
Content-Length: 27 # 전송할 데이터의 길이 (바이트 단위)
name=John&age=30 # 요청 본문: 전송할 데이터 (name과 age라는 필드 포함)
HTTP 메서드
GET
서버에서 리소스를 요청
데이터가 요청 URL의 쿼리 스트링에 포함
POST
서버에 데이터를 제출하거나 리소스를 생성
요청 본문에 데이터가 포함
PUT
서버의 리소스를 업데이트하거나 새 리소스를 생성
요청 본문에 포함된 데이터로 지정된 리소스를 대체
DELETE
지정된 리소스를 삭제
HEAD
GET요청과 유사하지만 서버는 응답 본문을 포함하지 않고 헤더만 반환
주로 리소스의 메타데이터를 확인하는 데 사용
OPTIONS
서버가 지원하는 HTTP 메서드를 확인
PATCH
리소스의 일부를 업데이트
PUT과는 달리 전체 리소스를 대체하지 않고 변경할 부분만 수정
상태 코드
1xx (정보 응답)
2xx (성공)
200: 요청 성공
201: 리소스 생성 성공
204: 내용 없음
3xx (리다이렉션)
301: 영구 이동
302: 임시 이동
4xx (클라이언트 오류)
400: 잘못된 요청
401: 인증 필요
403: 접근 금지
404: 찾을 수 없음
5xx (서버 오류)
500: 서버 내부 오류
502: 잘못된 게이트웨이
503: 서비스 사용 불가
HTTP의 특징
HTTP는 비연결지향(Connectionless) 프로토콜
클라이언트가 요청을 서버에 보내면 서버는 클라이언트에게 요청에 맞는 응답을 보내고 접속을 끊는다 HTTP 1.1 에서는 Keep-Alive 기능을 사용해 연결을 유지할 수 있음
HTTP는 상태 정보 유지안함(Stateless) 프로토콜
'상태 정보’를 저장해야 할 경우에 대한 대안 : 쿠키와 세션
쿠키(Cookie): 클라이언트에 저장되는 키와 값이 들어있는 작은 데이터 파일
클라이언트의 컴퓨터에 작은 파일로 저장, 응답 메시지를 보낼 때 헤더에 Set-Cookie 값을 설정하면 클라이언트에 쿠키가 생성됨
쿠키는 일반 텍스트로 저장되기 때문에, 민감한 정보를 저장할 때는 주의해야함
세션 (Session)
클라이언트가 접속해 있는 동안 사용자의 상태를 유지, 클라이언트가 서버로 최초 요청을 보내면, 유일한 식별자(ID)인 세션 ID를 부여
세션 데이터는 서버의 메모리나 데이터베이스에 저장됨며, 클라이언트는 세션 ID를 통해 이 정보를 참조
요약
쿠키: 클라이언트에 저장되는 데이터 조각, 사용자가 웹사이트를 방문할 때마다 서버로 전송됨.
세션: 서버 측에서 관리되는 사용자 상태, 사용자가 사이트를 사용하는 동안 상태를 유지함.
HTML 문서 생성
정적(Static) 콘텐츠: 내용의 변경이 없음 -> 웹 서버는 파일을 읽어서 그 내용을 전송
동적(Dynamic) 콘텐츠: 사용자의 요청에 따라 내용이 달라짐
서버 사이드 스크립트 언어(SSL: Server-side Script Language)
웹 서버에서 실행되는 스크립트 언어로, 클라이언트의 요청에 따라 동적으로 웹 페이지를 생성하는 데 사용 JSP(Java Server Page), ASP(Active Server Page), PHP(Personal Home Page) 등
클라이언트 사이드 스크립트 (CSL: Client-side Script Language)
클라이언트인 웹 브라우저에서 실행되는 스크립트, 서버와 통신이 없어도 웹 페이지의 동작을 변경할 수 있음
동적으로 화면 내용을 만들거나 다양한 UI를 제공
HTML 문서에 포함되어 동작
퍼센트 인코딩
URL에서 사용할 수 없는 문자나 특별한 의미를 가진 문자를 안전하게 표현하기 위한 방법 이 인코딩 방식은 특정 문자를 % 기호와 그 뒤에 오는 두 자리를 16진수로 대체하여 표현
사용할 수 없는 특수 문자: 공백, 특수 문자, 비 ASCII 문자 등의 값을 16진수로 변환하여 표현
예: 공백(" ")은 %20, 슬래시("/")는 %2F, 물음표("?")는 %3F로 인코딩
예시:
원본 문자열: Hello World!
퍼센트 인코딩: Hello%20World%21
예외: HTTP의 POST 메소드를 사용하여 웹 폼 문자열을 전송할 때 MIME의 Content-Type에 ‘application/xxxx-form-urlencoded’가
사용되면 공백이 ‘%20’이 아니라 ‘+’로 변경
퍼센트 인코딩으로 변환하는 사이트
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/encodeURI
'정보보안' 카테고리의 다른 글
암호화, 대칭 암호화 (0) | 2025.05.26 |
---|---|
쓰레드를 이용한 소켓 통신 (0) | 2025.05.25 |
소켓 통신 (0) | 2025.05.25 |
스니핑(Sniffing) (0) | 2025.04.20 |
네트워크, 전송 계층 TCP/IP 프로토콜의 연관성 (0) | 2025.04.15 |