본문 바로가기
웹 해킹(Web Hacking)

HTTP란?

by whiteTommy 2023. 12. 26.

HTTP

: 서버클라이언트의 데이터 교환을 요청(Request)응답(Response) 형식으로 정의한 프로토콜이다.

 

클라이언트가 서버에게 요청하면 서버가 응답하는 형식이다. 여기서, HTTP 서버는 HTTP 서비스 포트에  대기되어 있고, 일반적으로 TCP/80, TCP/8080 형식을 따른다.

 

아래는 HTTP Request 예시이다.

GET  /index.html  HTTP/1.1			// HTTP Method, Request URL, HTTP Version

Host: dreamhack.io				// Request Header
Connection: keep-alive			    	

User-Agent: Mozilla/5.0 (Macintosh; Intel 	// Request Header
Mac OS X 10_14_6) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/79.0.3945.88
Safari/537.36

 

아래는, 위의 요청에 따른 HTTP Response 예시이다.

HTTP/1.1  200 OK				//HTTP Version  Return Code

Server: Apache/2.4.29 (Ubuntu)			//Response Header
Content-Length: 61					
Connection: Keep-Alive
Content-Type: text/html

<!doctype html>					//Response Body
<html>
<head>
</head>
<body>
</body>
</html>

 

 

네트워크 포트와 서비스 포트

  • (네트워크) 포트 : 네트워크에서 서버와 클라이언트가 정보를 교환하는 추상화된 장소이다. 
  • 서비스 포트 : 네트워크 포트 중에서 특성 서비스가 점유하고 있는 포트이다. 예를 들어, HTTP 서버는 80번 포트를 점유하고 있으므로 HTTP의 서비스 포트는 80번이다.

 

포트로 데이터를 교환하는 방식은 전송 계층(Transport layer)의 프로토콜을 따르며, 여기에는 TCP/UDP가 있다. 예를 들어 TCP/80은 HTTP 서비스를 80번 포트에서 TCP로 제공하고 있다는 의미이다. 

 

포트의 개수는 운영체제마다 다르지만, 현대 윈도나 리눅스, 맥 운영체제에서는 0~65535번까지 총 65536개의 네트워크 포트를 사용한다. 그중 0~1023번 포트는 잘 알려진 포트(Well-known port) 또는 특권 포트(Privileged port)라고 한다. 예를 들어 SSH(20번 포트), HTTP(80번 포트), HTTPS(443번 포트)가 있다.

 

잘 알려진 포트에 서비스를 실행하려면 관리자 권한이 필요하다. 따라서, 클라이언트는 이 대역에서 실행 중인 서비스들은 관리자의 것이라고 신뢰할 수 있다.

 

 

HTTP 메시지

 

HTTP Request, HTTP Response 둘다, HTTP 헤드와 바디로 구성된다

 

  • HTTP 헤드 : 각 줄은 CRLF로 구분되며, 첫 줄은 시작 줄(Start-Line), 나머지 줄은 헤더(Header)라고 한다. 헤드의 끝은 CRLF 한 줄로 나타내며, 헤더는  필드와 값 형식으로 이루어져 있고, HTTP 메시지 또는 바디의 속성을 나타낸다. 하나의 HTTP 메시지에는 0개 이상의 헤더가 있다.
  • HTTP 바디 : 헤드의 끝을 나타내는 CRLF 뒤, 모든 줄이다. 클라이언트나 서버에게 전송하려는 데이터가 담긴다.
  • CRLF : Carriage Return(CR)과 Line Feed(LF)의 조합이다. 전자는 커서를 현재 줄의 맨 앞으로 이동시키는 문자이고, 후자는 커서를 다음 줄로 이동시키는 문자이다. 텍스트 파일에서 줄 바꿈을 나타내는 데 사용되는 제어 문자열이다. 

 

HTTP 요청

서버에게 특정 동작을 요구하는 메시지이다. 서버는 해당 동작이 실현 가능한지, 클라이언트가 그러한 동작을 요청할 권한이 있는지 등을 검토하고, 적절할 때만 이를 처리한다.

 

  • 시작 줄 : 메소드(Method)와 요청 URI(Request-URI), HTTP Version으로 구성된다. 메서드는 URI가 가리키는 리소스를 대상으로 서버가 수행하기를 바라는 동작을 나타낸다.
    • GET: 리소스를 가져오라는 메소드이다. 이용자가 브라우저에 웹 서버의 주소를 입력하거나 하이퍼링크를 클릭하면, 새로운 페이지를 렌더링 하기 위해 리소스가 필요하다. 이때 브라우저는 GET 요청을 서버에 전송해서 리소스를 받아온다.
      GET /index.html HTTP/1.1 
       Host: dreamhack.io 
       Connection: keep-alive 
       User-Agent: Mozilla/5.0 (Macintosh; Intel 
       Mac OS X 10_14_6) AppleWebKit/537.36 
       (KHTML, like Gecko) Chrome/79.0.3945.88 
       Safari/537.36​​
      
       
    • POST: 리소스로 데이터를 보내라는 메소드이다. 전송할 데이터는 보통 HTTP 바디에 포함되는데, 로그인할 때 입력하는 ID, Password 게시판에 작성하는 글 등이 POST로 서버에 보내진다.
      POST /index.html HTTP/1.1 
      Host: dreamhack.io 
      Connection: keep-alive 
      User-Agent: Mozilla/5.0 (Macintosh; Intel 
      Mac OS X 10_14_6) AppleWebKit/537.36 
      (KHTML, like Gecko) Chrome/79.0.3945.88 
      Safari/537.36 
      Content-Length: 19 
      Content-Type: application/x-www-form-urlencoded; charset=UTF-8 
      foo=bar&hello=world​​

 

HTTP 응답

: HTTP 요청에 대한 결과를 반환하는 메시지이다. 요청을 수행했는지, 하지 않았는지, 안 했다면 이유는 무엇인지와 같은 상태 정보(Status), 그리고 클라이언트에게 전송할 리소스가 응답에 포함된다.

HTTP/1.1 200 OK
Server: Apache/2.4.29 (Ubuntu)
Content-Length: 61
Connection: Keep-Alive
Content-Type: text/html

<!doctype html>
<html>
<head>
</head>
<body>
</body>
</html>

 

  • 시작 줄 : HTTP Version과 상태 코드(Status Code), 처리 사유(Reason Phrase)로 구성된다. 
    • 상태 코드:  요청에 대한 처리 결과를 세 자릿수로 나타낸다.
      • 1xx : 요청을 제대로 받았고, 처리가 진행 중임
      • 2xx : 요청이 제대로 처리됨      // 200(OK) : 성공
      • 3xx : 요청을 처리하려면, 클라이언트가 추가 동작을 취해야 함.   //302(Found) : 다른 URL로 갈 것
      • 4xx : 클라이언트가 잘못된 요청을 보내어 처리에 실패했음.  
        • 400(Bad Request) : 요청이 문법에 맞지 않음
        • 401(Unauthorized) : 클라이언트가 요청한 리소스에 대해 인증이 실패함
        • 403(Forbidden) : 클라이언트가 리소스에 요청할 권한이 없음
        • 404(Not Found) : 리소스가 없음
      • 5xx : 클라이언트의 요청은 유효하지만, 서버에 에러가 발생하여 처리에 실패했음.
        • 500(Internal Server Error) : 서버가 요청을 처리하다가 에러가 발생함
        • 503(Service Unavailable) : 서버가 과부하로 인해 요청을 처리할 수 없음

 

 

HTTPS

: HTTP over Secure socket layer의 약자로서 TLS(Transport Layer Security) 프로토콜을 도입하여 서버와 클라이언트 사이에 오가는 모든 HTTP 메시지를 암호화한다. 이로 인해 도청과 변조로부터 HTTP 통신이 보호된다.

 

'웹 해킹(Web Hacking)' 카테고리의 다른 글

동일 출처 정책(Same origin Policy) SOP란?  (0) 2024.01.05
쿠키와 세션(Cookie & Session)  (0) 2023.12.28
개발자 도구와 기능  (0) 2023.12.27
웹 브라우저(Web Browser)  (0) 2023.12.26
웹 (Web)  (1) 2023.12.01