본문 바로가기
JAVA

[CS] HTTP 통신을 알아보자 Feat.HTTPS

by code:J 2023. 8. 3.
반응형
SMALL

HTTP(HyperText Transfer Protocol) 란?

인터넷에서 데이터를 주고받는 데 사용되는 프로토콜 중 하나입니다.
웹 브라우저와 웹 서버 간에 정보를 주고받을 때 주로 사용됩니다.

 

HTTP는 클라이언트와 서버 간에 데이터를 주고받기 위한 프로토콜로, 특히 웹 브라우저와 웹 서버 간의 통신에 가장 많이 사용됩니다.

 

HTTP는 일반적으로 TCP/IP 프로토콜을 기반으로 동작하며, 주로 포트 80번을 사용합니다.

 

다른 프로토콜의 종류

각각의 특정 용도에 최적화되어 있습니다. 
네트워크 통신을 할 때 어떤 프로토콜을 사용해야 하는지는 상황과 목적에 따라 달라집니다.
  1. HTTPS (HTTP Secure):
    HTTPS는 HTTP 프로토콜을 보안 소켓 계층(SSL/TLS)을 사용하여 암호화하는 방식입니다. 이를 통해 데이터가 암호화되어 전송되므로 보안성이 높아집니다. 주로 웹사이트에서 민감한 정보를 주고받거나, 인증이 필요한 경우에 사용됩니다.
  2. FTP (File Transfer Protocol):
    FTP는 파일 전송을 위한 프로토콜로, 파일을 서버와 클라이언트 사이에서 전송하는 데 사용됩니다. 주로 파일 공유나 웹 호스팅과 같이 파일 전송이 필요한 경우에 사용됩니다.
  3. SMTP (Simple Mail Transfer Protocol):
    SMTP는 전자 메일을 전송하는 데 사용되는 프로토콜입니다. 이메일 클라이언트가 메일 서버로부터 메일을 전송할 때 사용됩니다.
  4. POP3 (Post Office Protocol 3):
    POP3는 전자 메일 서버로부터 이메일을 다운로드하는 데 사용되는 프로토콜입니다. 이메일 클라이언트가 서버로부터 메일을 받아오는 데 사용됩니다.
  5. IMAP (Internet Message Access Protocol):
    IMAP는 전자 메일 서버에 저장된 이메일에 직접 접근하여 관리하는 데 사용되는 프로토콜입니다. 메일 서버와 클라이언트 사이의 이메일 동기화에 사용됩니다.
  6. DNS (Domain Name System):
    DNS는 도메인 이름을 IP 주소로 변환하는 데 사용되는 프로토콜입니다. 웹 브라우저가 도메인 이름을 입력하면 DNS를 통해 해당 도메인의 IP 주소를 찾아 웹 서버와 통신합니다.
  7. SSH (Secure Shell):
    SSH는 원격 컴퓨터에 안전하게 접속하기 위한 프로토콜입니다. 원격 접속, 파일 전송, 암호화된 터널링 등에 사용됩니다.

 

HTTP 통신 방식

HTTP 통신은 주로 두 가지 방식으로 이루어집니다.
  • 요청(Request) - 응답(Response) 방식
    • 클라이언트가 서버에 요청을 보내면, 서버는 해당 요청에 대한 응답을 반환합니다.
    • 이때 요청과 응답은 HTTP 메시지 형식으로 이루어집니다.
    • 요청 메서드로는 GET, POST, PUT, DELETE 등이 있으며, 각각의 메서드는 서버에서 특정 동작을 수행하도록 지시합니다.
    • 응답은 상태코드(200 : OK, 404 : NOT FOUND)와 함께 요청에 대한 결과 데이터에 포함됩니다.
  • 긴 연결(HTTP Keep-Alive)
    • 기본적으로 HTTP는 요청과 응답이 한 번 이루어지면 연결이 끊어집니다.
    • 이를 비지속적 연결(Non-persistent Connection)이라고 합니다.
    • 하지만, HTTP Keep-Alive 기능을 사용하면 여러 요청과 응답을 하나의 TCP 연결로 처리할 수 있습니다.
    • 이를 지속적 연결(Persistent Connection)이라고 합니다.

 

HTTP 통신 방식의 특징

  •  Stateless (무상태성)
    •  HTTP는 무상태 프로토콜입니다.
    • 이는 서버가 클라이언트의 이전 요청 상태를 기억하지 않는다는 의미입니다.
    • 각각의 요청은 독립적으로 처리되며, 이전 요청과 상관없이 처리됩니다.
    • 따라서 클라이언트와 서버 간의 통신은 독립적으로 이루어집니다.

  • Connectionless (비연결성)
    •  HTTP는 비연결 프로토콜입니다.
    • 클라이언트가 서버에 요청을 보내면, 서버는 해당 요청에 대한 응답을 보내고 연결을 바로 끊습니다.
    • 이러한 특성으로 인해 불필요한 연결을 피할 수 있으며, 많은 클라이언트와의 동시 연결을 효율적으로 처리할 수 있습니다.

  • Request-Response Model (요청-응답 모델)
    •  HTTP는 클라이언트가 서버에 요청을 보내면, 서버가 해당 요청에 대한 응답을 반환하는 요청-응답 모델을 따릅니다.
    • 클라이언트가 요청 메시지를 보내고, 서버가 응답 메시지를 반환하는 방식으로 통신이 이루어집니다.
  • URI(Uniform Resource Identifier) 기반
    •  HTTP는 리소스를 식별하는데 URI를 사용합니다.
    • 클라이언트가 요청할 리소스를 URI로 명시하며, 서버는 해당 리소스를 제공합니다.
    • 예를 들어, 웹 사이트의 페이지나 이미지, API 엔드포인트 등 모든 리소스는 고유한 URI를 가지고 있습니다.

  • 다양한 요청 메서드
    • HTTP는 다양한 요청 메서드를 제공하여 서버에게 특정 동작을 지시할 수 있습니다.
    • 가장 일반적으로 사용되는 메서드는 GET, POST, PUT, DELETE 등이 있습니다.
      • GET은 리소스 조회
      • POST는 데이터 제출
      • PUT은 리소스 업데이트
      • DELETE는 리소스 삭제
  • 헤더와 캐시
    • HTTP는 요청과 응답에 헤더를 사용하여 추가 정보를 전달할 수 있습니다.
    • 헤더에는 클라이언트와 서버 간의 캐시 관리, 인증, 인코딩 방식, 콘텐츠 유형 등의 정보가 포함됩니다.
    • 헤더를 사용하여 클라이언트와 서버가 추가적인 정보를 교환할 수 있습니다.
  • 상태 코드와 에러 처리
    • HTTP 응답에는 상태 코드가 포함되며, 해당 요청에 대한 처리 결과를 나타냅니다.
    • 예를 들어, 200 OK는 요청이 성공적으로 처리되었음을 나타내며, 404 Not Found는 요청한 리소스를 찾을 수 없음을 나타냅니다.
    • 서버는 상태 코드를 통해 클라이언트에게 요청 처리 결과를 전달하고, 클라이언트는 이를 기반으로 적절한 동작을 수행합니다.

  • HTTP Keep-Alive
    • HTTP는 기본적으로 요청-응답 사이에 연결을 끊습니다.
    • 그러나 HTTP Keep-Alive 기능을 사용하면 여러 요청과 응답을 하나의 TCP 연결로 처리할 수 있습니다.
    • 이를 통해 연결을 반복적으로 설정하는 오버헤드를 줄이고, 웹 페이지 로딩 시간을 개선할 수 있습니다.

HTTP의 특징들은 웹 브라우저와 웹 서버 간의 효율적인 통신을 가능케 하며, 웹 개발에서 매우 중요한 기반 기술 중 하나입니다.

 

HTTP 메시지 구조

HTTP 통신에서 클라이언트와 서버가 주고받는 데이터는 HTTP 메시지 형식을 따릅니다.
이때, HTTP 메시지는 크게 두 가지 형태로 나뉩니다.
  • HTTP 요청 메시지
    • 요청라인(Request Line)
      • 요청 메서드
      • 요청 URI(Uniform Resource Identifier), 프로토콜 버전 정보가 포함됩니다.
    • 요청 헤더(Headers)
      • 클라이언트가 서버에 추가 정보를 전달하는 데 사용됩니다.
    • 빈 줄 (CRLF)
      • 헤더와 바디를 구분하는 빈 줄(Carriage Return Line Feed)입니다.
    • 요청 바디 (Request Body)
      • POST나 PUT 메서드 같이 데이터를 서버에 전달할 때 사용됩니다.
  • HTTP 응답 메시지
    • 상태라인(Status Line)
      • 상태코드, 상태메시지, 프로토콜 버전정보 가 포함됩니다.
    • 응답 헤더 (Headers)
      • 서버가 클라이언트에 추가 정보를 전달하는데 사용됩니다.
    • 빈 줄 (CRLF) 
      • 헤더와 바디를 구분하는 빈 줄입니다.
    • 응답 바디(Response Body)
      •  서버가 클라이언트에게 반환하는 데이터가 포함됩니다.

 

HTTP 요청은 다음과 같은 구조를 갖습니다:

[HTTP 요청 라인]
[HTTP 요청 헤더]
빈 줄(CRLF)
[HTTP 요청 바디]


HTTP 요청 라인은 다음과 같이 구성됩니다:

[메서드] [요청 URI] [프로토콜 버전]



예를 들어, GET 메서드로 웹 사이트의 정보를 조회하는 HTTP 요청은 다음과 같이 표현됩니다:

GET /index.html HTTP/1.1
Host: jyyoun1022.tistory.com



여기서 'GET'은 메서드, '/index.html'은 요청 URI, 'HTTP/1.1'은 프로토콜 버전을 나타냅니다.

그리고 'Host' 헤더는 요청하는 도메인 이름을 명시합니다.

 

 


POST 메서드로 폼 데이터를 서버로 제출하는 HTTP 요청은 다음과 같이 표현됩니다:

POST /submit_form HTTP/1.1
Host: jyyoun1022.tistory.com
Content-Type: application/x-www-form-urlencoded

type=post&returnURL=%2Fmanage%2Fposts%2F



여기서 'POST'는 메서드,

'/submit_form'은 요청 URI,

'HTTP/1.1'은 프로토콜 버전입니다.

'Content-Type' 헤더는 요청 바디에 포함된 데이터의 형식을 명시하고, 요청 바디에는 폼 데이터가 포함되어 있습니다.


HTTP 요청은 웹 브라우저에서 자동으로 생성되며, 웹 페이지에서 사용자가 어떤 동작을 수행하면 해당 동작에 따라 적절한 HTTP 요청이 생성되고 서버로 전송됩니다. 

 

웹 개발에서는 JavaScript, AJAX, 라이브러리 또는 프레임워크를 사용하여 HTTP 요청을 프로그래밍적으로 만들고 처리할 수 있습니다.

 

HTTP 상태 코드

HTTP 응답 메시지에는 상태 코드가 포함되며, 해당 요청에 대한 처리 결과를 나타냅니다.
  • 200 OK
    •  요청이 성공적으로 처리되었고, 클라이언트에게 요청한 정보가 반환되었습니다.
  • 201 Created
    •  요청이 성공적으로 처리되었고, 새로운 리소스가 생성되었습니다.
  • 204 No Content
    • 요청은 성공적으로 처리되었지만, 클라이언트에게 반환할 데이터가 없습니다.
  • 400 Bad Request 
    • 잘못된 요청이 전송되었습니다.
  • 401 Unauthorized
    • 인증되지 않은 요청입니다.
  • 403 Forbidden 
    • 요청이 거부되었습니다.
  • 404 Not Found
    • 요청한 리소스를 찾을 수 없습니다.
  • 500 Internal Server Error
    • 서버 내부 오류가 발생했습니다.

 

HTTP 요청 방법

HTTP 요청은 다양한 메서드(Method)를 사용하여 서버에 특정 동작을 지시합니다. 

 

HTTP 요청은 클라이언트가 서버에게 특정 동작을 지시하기 위해 사용되는 메서드(Method)를 통해 이루어집니다. HTTP 요청 메서드는 주로 다음과 같이 사용됩니다:

1. GET:
   - 서버로부터 리소스를 요청합니다.
   - 요청한 리소스를 조회하고 가져오는 데 사용됩니다.
   - 데이터를 요청 URL에 포함하여 전송합니다.
   - 주로 웹 페이지의 정보를 요청할 때 사용됩니다.

2. POST:
   - 서버로 데이터를 제출합니다.
   - 주로 폼 데이터를 서버로 보내거나, 새로운 리소스를 생성하는 데 사용됩니다.
   - 요청 데이터는 요청 바디에 포함되어 전송됩니다.

3. PUT:
   - 서버로 데이터를 전송합니다.
   - 주로 기존 리소스를 업데이트하는 데 사용됩니다.
   - 요청 데이터는 요청 바디에 포함되어 전송됩니다.

4. DELETE:
   - 서버에 특정 리소스를 삭제하기 위해 사용됩니다.
   - 요청 데이터는 요청 바디에 포함되지 않고, 요청 URL에 정보가 포함될 수 있습니다.

5. PATCH:
   - 서버의 리소스 일부를 업데이트하기 위해 사용됩니다.
   - 요청 데이터는 요청 바디에 포함되어 전송됩니다.

6. HEAD:
   - GET 요청과 유사하지만, 서버는 응답 바디를 반환하지 않습니다.
   - 주로 리소스의 메타데이터를 확인하기 위해 사용됩니다.

7. OPTIONS:
   - 서버가 지원하는 요청 메서드를 확인하기 위해 사용됩니다.
   - 서버가 특정 엔드포인트에서 허용하는 메서드를 확인할 수 있습니다.



 

HTTP와 HTTPS의 차이점

HTTP와 HTTPS의 차이점은 주로 보안과 데이터 암호화의 유무에 있습니다.


HTTP (HyperText Transfer Protocol)

  •  HTTP는 인터넷에서 데이터를 주고받기 위한 프로토콜 중 하나입니다.
  •  데이터를 암호화하지 않고 평문으로 전송합니다. 
  • 보안 기능이 없기 때문에 데이터가 제3자에게 노출될 수 있으며, 해커들이 중간에서 데이터를 가로챌 가능성이 있습니다.
  •  주로 웹 브라우저와 웹 서버 간의 통신에 사용되며, 포트 번호 80을 사용합니다.

HTTPS (HyperText Transfer Protocol Secure)

  •  HTTPS는 HTTP 프로토콜을 보안 소켓 계층(SSL/TLS)을 사용하여 암호화하는 방식입니다.
  •  데이터를 암호화하여 전송하기 때문에 안전한 통신이 이루어집니다.
  • 데이터 보호를 제공하고 중간에서의 데이터 가로채기를 방지합니다.
  • 주로 웹사이트에서 민감한 정보를 주고받거나, 인증이 필요한 경우에 사용됩니다.
  • 포트 번호 443을 사용합니다.

HTTPS를 사용하는 방법

HTTPS를 사용하는 방법은 웹 서버에 SSL/TLS 인증서를 설치하고, 
서버의 설정을 수정하여 HTTPS로 통신하도록 지정하는 것입니다. 

일반적으로 SSL/TLS 인증서는 인증기관(Certificate Authority, CA)에서 구입하여 사용합니다.

HTTPS를 사용하는 방법은 다음과 같은 단계로 이루어집니다:

1. SSL/TLS 인증서 구입:
   - SSL/TLS 인증서를 인증기관에서 구입합니다. 인증서는 도메인 이름과 회사 또는 개인의 정보를 포함합니다.

2. 인증서 설치:
   - 웹 서버에 구입한 인증서를 설치합니다. 보통 웹 서버 소프트웨어에서 인증서를 관리하는 기능이 제공됩니다.

3. 서버 설정 수정:
   - 웹 서버의 설정을 수정하여 HTTPS를 사용하도록 설정합니다. 이를 위해 보통 웹 서버 소프트웨어의 설정 파일을 수정합니다.

4. 포트 설정:
   - HTTPS는 기본적으로 443 포트를 사용합니다. 따라서 웹 서버의 포트 설정을 443으로 변경하여 HTTPS를 사용하도록 설정합니다.

HTTPS를 사용하도록 설정한 후에는 웹 브라우저를 통해 해당 도메인을 방문하면 HTTPS로 암호화된 통신이 이루어집니다. 브라우저 주소 표시줄에 "https://"로 시작하는 웹 사이트는 HTTPS 프로토콜을 사용하고 있음을 나타냅니다.

반응형
LIST