Post

[HTTP] 01. HTTP 기본 - 2장. HTTP 메세지

[HTTP] 01. HTTP 기본 - 2장. HTTP 메세지

01. HTTP 기본


2장. HTTP 메시지

2.2 URL

1
프로토콜://도메인:포트/경로?쿼리문자열#앵커
  • Uniform Resource Locator
  • URL: 클라이언트와 요청을 보낼 때 대상이 되는 것
  • 일정한 방식의 자원, 위치 탐사기, 인터넷 상의 파일 위치를 지정하는 방식

2.2.1 프로토콜

1
http://도메인:포트/경로?쿼리문자열#앵커
  • URL은 프로토콜 이름으로 시작한다.
  • 프로토콜은 URL의 종류를 결정하는 역할을 한다.
  • http 라고 하면 웹 문서를 식별하는 URL
  • 다른 프로토콜
    • mailto: 이메일 전송용 프로토콜
    • tel: 전화를 위한 프로토콜

2.2.2 도메인

1
http://localhost:포트/경로?쿼리문자열#앵커
  • 서버의 위치를 나타냄
  • 도메인의 IP를 알려주는 서버인 Domain Name System. 줄여서 DNS에 도메인 주소를 전달하면 IP주소를 얻을 수 있다.
  • ㄴ도메인 위치에 IP주소를 바로 사용해도 됨

2.2.3 포트

1
http://localhost:3000/경로?쿼리문자열#앵커
  • IP로 접속한 서버는 여러 개의 포트가 있음
  • 클라이언트는 특정 포트를 통해 서버에 접속하고, 특정 어플리케이션에 접속할 수 있다.
  • 포트는 0부터 65535 사이의 정수값을 쓴다.
    • 0 ~ 1023: 정해진 포트 (사용하려면 운영체제의 관리자 권한이 있어야 한다.)
      • http 프로토콜: 80
      • https 프로토콜: 443
      • 파일 전송을 위한 프로토콜: 22
      • shell: 22
      • email: 25 등
    • 1024 ~ 49151: 등록된 포트
      • 개발환경 구성 시 사용
    • 나머지
      • 동적 포트 (일시적으로 클라이언트가 서버와 통신하기 위한 포트)

2.2.4 경로

1
http://localhost:3000/ch01.txt?쿼리문자열#앵커
  • 서버가 제공하는 파일의 위치
  • 경로
  • 상황에 따라서는 서버의 실제 경로가 아닐 수도 있다. (서버 구현에 따라 다르다.)
  • 서버가 외부에 제공하는 추강화된 개념이라고 이해하는것이 더 좋다.

2.2.5 쿼리문자열

1
http://localhost:3000/ch01.txt?query=name#앵커
  • 서버에 추가로 정보를 전달할 때 사용
  • 경로 뒤에 ? 로 시작하며 key=value 형태, 하나 이상일 때는 &로 연결

2.2.6 프레그먼트

1
http://localhost:3000/ch01.txt?query=name#title
  • 웹페이지 내에 특정 위치를 가리킴
  • html 마크업 id 속성과 매칭 됨

2.3 요청, request

1
2
3
4
5
6
# 요청 헤더
> GET /ch01.txt HTTP/1.1
> Host: localhost:3000
> User-Agent: curl/8.7.1
> Accept: */*
>
  • 클라이언트에서 서버로 전달하는 메시지
  • 구성
    • 요청 메시지: 메서드와 경로, 헤더, 본문으로 구성
    • 메서드: GET, POST, PUT, PATCH, DELETE
    • 경로: 자원의 위치
    • 프로토콜 버전
    • 요청 본문
1
GET / ch01.txt HTTP/1.1
  • GET: 메소드
    • 클라이언트와 서버 간의 요청 방식을 정의
    • 클라이언트가 서버에게 어떤 작업을 수행할지를 메서드로 전달
    • 메소드
      • GET: 서버로부터 자원을 요청할 때 사용
      • POST: 서버로 데이터를 전송하고 서버는 이 일을 처리해 새로운 자원을 생성
      • PUT: 서버의 리소스 교체
      • PATCH: 서버의 리소스를 부분적으로 교체
      • DELETE: 서버의 특성 리소스를 삭제
    • /ch01.txt: 경로
      • 서버의 어떤 파일을 가리키는지 알려줌
    • HTTP/1.1: 프로토콜 버전
1
Host: localhost: 3000
  • Host: localhost:3000: 요청을 보낼 호스트와 포트번호 (서버의 위치)
1
User-Agent: curl/8.7.1
  • User-Agent: 클라이언트 정보
    • curl을 사용했기 때문에 curl/8.7.1 이라는 값으로 나타남
    • 브라우저라면 브라우저 이름이 실린다.
1
Acccept: */*
  • Accept: 클라이언트가 어떤 컨텐츠 타입을 받을 수 있는지 표시하는 값
    • /: 어떤 컨텐츠 타입이든 받을 수 있다는 의미
  • 요청 헤더의 마지막을 빈 줄로 입력하면 요청헤더가 끝났다 라는 의미

요청 헤더의 종류

  • Accept
  • Accept-Encoding
  • Accept-Language
  • User-Agent
  • Cookie
  • Origin
  • 캐싱 관련
    • If-Modifyied-Since
    • If-None-Match
  • 보안 관련
    • Access-Control-Allow-Headers
    • Access-Control-Allow-Method

요청 본문

  • 예시에는 없지만 헤더가 끝난 뒤에는 요청 본문을 실을 수 있다.
  • 요청 헤더와 달리 요청 본문은 method에 따라서 선택사항 임
  • POST나 PUT, PATCH 같은 method에서는 사용할 수 있다.

2.4 응답, response

1
2
3
4
5
6
7
# 응답 헤더
< HTTP/1.1 200 OK
< Date: Fri, 31 Jan 2025 08:51:06 GMT
< Connection: keep-alive
< Keep-Alive: timeout=5
< Transfer-Encoding: chunked
<
  • 클라이언트가 응답 받는 메시지
  • 구성
    • 상태 코드: 1xx, 2xx, 3xx, 4xx, 5xx
    • 응답 헤더
    • 응답 본문
1
HTTP/1.1 200 OK
  • 프로토콜 버전: 클라이언트가 보낸 요청시에 프로토콜 버전을 서버에서도 사용할 수 있는 경우에 같은 버전을 표시하여 사용 할 프로토콜을 서로 맞춘다.
  • 상태코드와 상태 문자: 요청 받은 서버가 처리 결과를 알려준다.
    • 상태 값
      • 1XX: 정보 응답
        • 101: 서버가 클라이언트의 프로토콜 전환 요청을 승인할 때
      • 2XX: 성공을 의미
        • 200: 요청에 성공201: 성공, 자원생성
        • 204: 요청은 성공했지만 응답할 본문은 없을 때
      • 3XX: 리다이렉션
        • 301: 요청한 리소스 URL가 영구적으로 다른 주소로 바뀌었음. 바뀐 주소는 응답 헤더이 싣는다
        • 302: 요청한 리소스가 임시적으로 다른 URL로 변경됐다.
        • 304: 클라이언트가 캐싱한 리소스를 사용해도 된다. 본문은 비워서 옴
      • 4XX: 클라이언트 오류. 요청에 문제가 있어서 서버가 처리하지 못했을 경우
        • 400: bad request 잘못된 요청
        • 401: 인증이 필요한 경우
        • 404: 없는 페이지 요청할 경우
      • 5XX: 서버 처리 오류. 요청 자체는 문제가 없지만 서버의 이유로 요청을 처리하지 못함
        • 500: 인터널 서버 에러 - 서버에서 예상하지 못한 오류 발생
        • 503: 서버가 현재 요청을 처리할 수 없음 (서버 다운)
        • 504: time out
1
Date: Fri, 31 Jan 2025 08:51:06 GMT
  • 서버가 응답한 시간
1
Connection: keep-alive
  • TCP 연결을 일정시간 유지하기 위해 쓰는 헤더
  • 클라이언트는 3way handshake를 만들지 않고 이미 연결된 TCP 위에 HTTP요청을 다시 보낼 수 있다.
1
Keep-Alive: timeout=5

TCP 연결을 유지할 수 있는 제한시간 (5초)

응답 헤더의 종류

  • Content-Type
  • Content-Encoding
  • Accept-Language
  • Vary
  • Set-Cookie
  • 캐싱 관련
    • Last-Modified
    • ETag
    • Cache-Control
    • Expires
  • 보안 관련
    • Content-Security-Polycy
    • Content-Security-Polycy-Report-Only
    • Access-Control-Allow-Methods
    • Access-Control-Allow-Max-Age

응답 본문

  • 응답 헤더의 마지막 줄을 비우고 나면 본문이 시작된다.
  • 실제 데이터
1
2
3
4
5
HTTP Lecture

Chapter 1. Basic
  1.1 HTTP Start
  1.2 HTTP Message* Connection #0 to host localhost left intact

2.5 중간 정리

  • 클라이언트와 서버 간의 HTTP 흐름이 이해했습니다.
  • URL을 시작으로 HTTP 메세지를 주고 받습니다.
  • HTTP 요청
  • HTTP 응답

참고

This post is licensed under CC BY 4.0 by the author.

Trending Tags