Published on

HTTP와 HTTPS

Authors
  • avatar
    Name
    Inhwan Cho
    Twitter

HTTP(HyperText Transfer Protocol)는 월드 와이드 웹(www)에서 데이터를 주고받기 위한 프로토콜입니다.

즉, HTTP는 서버와 클라이언트 사이에서 HTML 문서나 이미지 같은 리소스를 전송하기 위해 사용됩니다.

다음으로 넘어가기 전에 인터넷과 월드 와이드 웹(www)의 차이점에 대해 간략하게 살펴보면,

인터넷은 전 세계 컴퓨터 네트워크들을 연결하는 기반 인프라이며, 월드 와이드 웹은 이 인터넷을 통해 정보를 공유하고 접근하는 방법 중 하나입니다.

HTTP의 주요 특징

  1. 비연결성(Connectionless): 클라이언트가 요청을 보내고 서버가 응답을 한 후 연결이 끊깁니다.

이는 서버의 리소스를 효율적으로 사용할 수 있게 해줍니다.

  1. 무상태성(Stateless): 각 요청은 독립적이며 서버는 과거의 요청 상태를 기억하지 않습니다.

상태 정보가 필요한 경우에는 쿠키(Cookie)와 같은 기술을 사용하여 관리합니다.

HTTP 메소드

HTTP 프로토콜은 다양한 메소드를 제공하는데, 이를 통해 서버에게 어떤 동작을 할 것인지 명시할 수 있습니다.

  • GET: 리소스를 조회합니다.
  • POST: 리소스를 생성하거나 업데이트할 때 사용합니다.
  • PUT: 리소스를 생성하거나 대체합니다.
  • DELETE: 리소스를 삭제합니다.

HTTP 응답 상태 코드

HTTP 응답 상태 코드는 웹 서버가 클라이언트(예: 웹 브라우저)의 요청을 처리한 결과를 나타냅니다.

이 코드들은 특정 범위의 숫자로 구분되며, 각 범위는 요청 처리 결과의 다른 유형을 나타냅니다.

상태 코드 범위카테고리설명
1xx정보 응답 요청을 받았으며 프로세스를 계속한다.
2xx성공 요청이 성공적으로 받아들여지고 처리되었다.
3xx리다이렉션 요청을 완료하기 위해 추가 작업 조치가 필요하다.
4xx클라이언트 오류 요청에 오류가 있어 서버가 요청을 처리할 수 없다.
5xx서버 오류 서버가 유효한 요청을 처리하지 못했다.
상태 코드설명
200OK - 요청이 성공적으로 처리됨.
201Created - 요청이 성공적으로 이루어지고 새로운 리소스가 생성됨.
301Moved Permanently - 요청한 리소스가 영구적으로 새 위치로 이동됨.
302Found - 요청한 리소스가 일시적으로 다른 주소로 이동됨.
400Bad Request - 서버가 요청을 이해할 수 없음.
401Unauthorized - 요청이 인증을 필요로 함.
403Forbidden - 서버가 요청을 이해했지만, 접근을 거부함.
404Not Found - 서버가 요청한 리소스를 찾을 수 없음.
500Internal Server Error - 서버 내부 오류로 요청을 처리할 수 없음.
503Service Unavailable - 서버가 일시적으로 요청을 처리할 수 없음(과부하나 유지보수 등).

HTTP와 HTTPS

특징HTTPHTTPS
보안암호화되지 않음SSL/TLS를 통해 데이터가 암호화됨
포트기본 포트 80기본 포트 443
성능데이터 암호화/복호화 과정이 없어 빠른 편암호화 추가로 약간의 성능 저하 가능
접두사http://https://
사용 목적(예시)검색 엔진에서의 일반적인 검색이나, 보안 요구 사항이 낮은 사이트에서 사용개인 정보, 금융 거래, 로그인 정보와 같이 보안이 중요한 데이터의 전송에 사용

예시: HTML 폼 데이터 전송

html
<!DOCTYPE html>
<html>
<head>
    <title>HTTP Form Example</title>
</head>
<body>
    <form action="/submit_form" method="POST">
        <label for="name">이름:</label>
        <input type="text" id="name" name="name">
        <input type="submit" value="제출">
    </form>
</body>
</html>

HTTP와 HTTPS의 헤더(header)

헤더 타입설명
일반 헤더요청과 응답 양쪽에서 사용되며, 일반적인 정보를 담습니다. 예: Date, Cache-Control
요청 헤더클라이언트가 서버로 보내는 요청에 대한 정보를 담습니다. 예: User-Agent, Accept
응답 헤더서버가 클라이언트로 보내는 응답에 대한 정보를 담습니다. 예: Server, WWW-Authenticate
엔티티 헤더전송되는 리소스의 본문(바디)에 대한 정보를 담습니다. 예: Content-Type, Content-Length

HTTPS 통신에서 사용되는 헤더는 기본적으로 HTTP 헤더와 동일합니다.

HTTPS의 보안 기능은 주로 SSL/TLS 핸드셰이크 과정에서 처리되며, 이 과정은 별도의 암호화된 채널을 통해 이루어집니다.

따라서, 일반적인 HTTP 헤더 필드 외에, 암호화 및 보안을 직접 다루는 특화된 HTTP 헤더가 추가되는 것은 아닙니다.

JavaScript에서 HTTP 요청

JavaScript에서 HTTP 요청을 보낼 때, fetch API 또는 XMLHttpRequest를 사용하여 HTTP 요청 헤더를 설정하고 서버에 정보를 전송할 수 있습니다.

예시 -

fetch.js
fetch('https://example.com/data', {
  method: 'POST', // 요청 메소드 지정
  headers: {
    'Content-Type': 'application/json', // 컨텐츠 타입 설정
    'Authorization': 'Bearer your_token_here' // 인증 토큰 설정
  },
  body: JSON.stringify({
    key: 'value',
    anotherKey: 'anotherValue'
  }) // 보내고자 하는 데이터
})
.then(response => response.json()) // 응답을 JSON으로 파싱
.then(data => console.log(data)) // 서버로부터 받은 데이터 처리
.catch(error => console.error('Error:', error)); // 에러 처리

HTTP/1.1과 HTTP/2 비교

기능HTTP/1.1HTTP/2
다중화(Multiplexing)지원하지 않음.하나의 TCP 연결에서 요청과 응답이 순차적으로 처리됨. 지원함. 단일 TCP 연결에서 여러 요청과 응답을 동시에 병렬로 처리할 수 있음.
헤더 압축지원하지 않음.헤더가 항상 플레인 텍스트로 전송됨. 지원함. HPACK 압축 방식을 사용하여 헤더 데이터를 압축하여 전송함.
서버 푸시지원하지 않음.클라이언트가 명시적으로 요청한 리소스만 받을 수 있음. 지원함. 서버가 클라이언트에게 필요하다고 판단하는 리소스를 사전에 푸시할 수 있음.
우선순위 설정지원하지 않음.요청 처리 우선순위를 설정할 방법이 없음. 지원함. 클라이언트가 요청의 우선순위를 지정할 수 있어 리소스 로딩 최적화 가능.
프로토콜 오버헤드높음.각 요청/응답마다 새로운 TCP 연결이 필요하거나, 연결 재사용 시에도 순차 처리로 인해 지연 발생 가능. 낮음. 다중화, 헤더 압축 등으로 인해 전체적인 네트워크 오버헤드 감소.
보안HTTPS 사용 시 암호화 가능하지만, 프로토콜 자체에는 포함되어 있지 않음.HTTPS 사용이 사실상 표준. HTTP/2 구현 대부분이 SSL/TLS 암호화를 기본으로 사용.