rlo-lo 2025. 2. 22. 11:02

HTTP 란  ❔

HTTP (Hyper Text Transfer Protocol)란 서버와 클라이언트의 데이터 교환을 

요청 Request , 응답 Respond 형식으로 정의한 프로토콜이다. 

더보기

프로토콜은 뭔데?

: 컴퓨터 또는 전자 기기 간의 원활한 통신을 위해 지키기로 약속한 규약

그냥 컴퓨터 상의 약속이라고 보면 됨

 

 

HTTP의 기본 메커니즘은 클라이언트의 요청과, 이에 대한 서버의 응답으로 이루어진다. 

웹서버는 HTTP 서버를 서비스 포트에 대기시키고, 이 포트는 일반적으로 TCP/80 또는 TCP/8080이다. 클라이언트가 서비스 포트에 HTTP 요청을 전송하면, 이를 해석해 서버는 적절한 응답을 수행한다. 

 

네트워크 포트

네트워크 포트(networt port)란 네트워크에서 서버와 클라이언트가 정보를 교환하는 추상화된 장소

보통 네트워크를 생략해 '포트'라고 부르기도 한다. 

 

서비스 포트

네트워크 포트 중에서 특정 서비스가 점유하고 있는 포트

예를들어 특정 서버가 8000포트를 사용한다면 이 서비스 포트는 8000이 된다. 

 


 

포트로 데이터를 교환하는 방식은 전송계층(transport layer)의 프로토콜을 따른다. (대표적으로 TCP, UDP)

서비스 포트를 표기할 때에는 서비스가 사용하는 전송 계층 프로토콜을 같이 표기하기도 한다. (전송계층이 다른데 접근하면 데이터가 교환되지 않기 때문에) 

ex ) HTTP의 서비스 포트가 TCP/80 이다  → HTTP 서비스를 80번 포트에서 TCP로 제공하고 있다

 

 

포트의 개수는 운영체제 정의 나름, 하지만 현대의 윈도우/리눅스/맥 운영체제는 0~65535번까지 총 65536개 같은 수의 네트워크 포트를 사용한다. 

 

그 중 0~1023 번 포트 : 잘 알려진 포트(Well-known port) or 특권포트(Privileged port) 

22번 포트 SSH

80번 포트 HTTP

443번 포트 HTTPS

 

※ 잘 알려진 포트에 서비스를 실행하려면 관리자 권한 필요 

 

 


 

HTTP 메세지 

클라이언트가 전송하는 요청 + 서버가 반환하는 응답

= HTTP 헤더 + HTTP 바디

 

HTTP 헤더 

HTTP 헤더(Headers) 각 줄은 CRLF로 구분되며,

첫 줄은 시작 줄(start line) 나머지 줄은 헤더(header)라고 부른다. 

※ 헤더의 끝 줄은 빈 줄로 

 

HTTP 바디 

헤드의 끝을 나타내는 CRLF 뒤 모든 줄을 말한다. 클라이언트나 서버에게 전송하려는 데이터가 담김

더보기

CRLF란?

 

Carriage retern(CR) + Line Feed(LF) 

윈도우에서는 CRLF를, 리눅스같은 유니스 기반 운영체제에서는 LF만을 사용

 

 

HTTP 요청

서버에게 특정 동작을 요구하는 메세지

서버는 해당 동작이 실현 가능한지, 클라이언트가 요청 권한이 있는지 검토하고, 적절할 때 이를 처리한다.

 

 

시작 줄 

메소드 + 요청대상 + HTTP 버전 (각각은 띄어쓰기로 구분!)

 

1) 메소드

요청 대상에 대해 서버가 수행하길 바라는 동작 

HTTP 표준에 정의된 메소드는 8개가 있으나 우선적으로 GET, POST 메소드 이해 

 

GET : 리소스 요청 메소드 

새로운 페이지를 렌더리하기 위해서는 리소스가 필요하다. 이때 브라우저가 GET 요청을 서버에 전송해 리소스를 받아온다. 

POST : 요청 대상에게 데이터를 보내는 메소드 

전송할 데이터는 보통 HTTP 바디에 포함된다. 로그인할 때 입력하는 ID와 비밀번호, 게시판에 작성하는 글 등이 POST로 서버에 보내진다. 

 

2) 요청 URL : 메소드의 대상 

 

3) HTTP 버전 : 클라이언트가 사용하는 HTTP 프로토콜의 버전

  

https://www.rfc-editor.org/rfc/rfc2616.html#section-9.3

 

HTTP 응답 

HTTP 요청에 대한 결과를 반환하는 메시지 

- 요청 수행 여부, 상태정보 Status , 클라이언트에게 전송할 리소스

 

시작줄 

HTTP 버전, 상태코드(Status Code), 처리사유(Reason Phrase) (띄어쓰기 구분)

 Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF

 

HTTP 버전 : 서버에서 사용하는 HTTP 프로토콜의 버전 

상태코드 : 요청에 대한 처리 결과 → 3자릿 수  (첫 번째 자릿수에 따라 5개의 클래스로 분류)

처리사유 : 상태코드가 발생한 이유 

1xx: Informational - Request received, continuing process
//요청 제대로 받았고, 처리 진행 중 

2xx: Success - The action was successfully received,
        understood, and accepted
//요청이 제대로 처리됨 200 OK

3xx: Redirection - Further action must be taken in order to
        complete the request
//요청을 처리하려면, 클라이언트가 추가동작을 취해야 함 
//302 FOUND 다른 URL로 갈 것 

4xx: Client Error - The request contains bad syntax or cannot
        be fulfilled
//클라이언트가 잘못된 요청을 보내어 처리에 실패함 
//400 Bad Request 문법에 맞지않음 
//401 Unauthorized 요청 리소스에 대한 인증 실패 
//403 Forbidden 클라이언트가 리소스 요청 권한 없음 
//404 Not Found 리소스가 없음

5xx: Server Error - The server failed to fulfill an apparently
        valid request
//요청은 유효하지만, 서버에러 발생 
//500 Internal Server Error 서버가 요청을 처리하다가 에러 발생 
//503 Service Unavailable  서버과부하로 요청 처리 불가

 

 

 


 

HTTPS 

: HTTP over Secure socket layer

TLS(Transport Layer Security) 프로토콜을 도입해 정보유출의 문제점을 보완한다. 

TLS 는 서버-클라이언트 사이 모든 HTTP 메시지를 암호화한다. 공격자가 중간에 탈취하더라도 해석하는 것은 불가능하고, 결과적으로 HTTP 통신이 보호될 수 있다. 

더보기

웹 서버의 URL이 http://로 시작되면 HTTP, https://로 시작되면 HTTPS 프로토콜을 사용합니다. 드림핵은 HTTPS를 사용한다. 

 

TLS 의 기반이 되는 공개 키 암호 시스템 / 대칭 키 암호 알아두기 

wireshark - 데이터 흐름 분석 프로그램