웹

HTTP 기본

2023. 1. 27. 23:29
목차
  1. 1. HTTP 특징
  2.  2. 클라이언트 서버 구조
  3.  3. 무상태 프로토콜 (Stateless)
  4.  4. 비연결성
  5. 2. HTTP 메소드
  6. 3. HTTP 상태코드
  7. 4. HTTP 헤더

1. HTTP 특징

  • 클라이언트 서버 구조
  • 무상태 프로토콜(Stateless), 비연결성
  • HTTP 메시지
  • 단순함, 확장 가능

 2. 클라이언트 서버 구조

  • Request, Response 구조
  • 클라이언트는 서버에 요청(Request)을 보내고, 응답을 대기
  • 서버가 요청에 대한 결과(Response)를 만들어서 응답

 3. 무상태 프로토콜 (Stateless)

  • 서버가 클라이언트의 상태를 보존하지 않는다.
  • 장점: 서버 확장성 높음(스케일 아웃) -> 서버가 클라이언트의 상태를 보존하지 않으므로 각 요청을 다른 서버가 응답을 처리할 수 있음. 따라서 무한한 서버 증설이 가능하다.
  • 단점: 클라이언트가 추가 데이터 전송

 4. 비연결성

  • HTTP는 기본적으로 연결을 유지하지 않는 모델
  • 일반적으로 초 단위 이하의 빠른 속도로 응답
  • 수천명이 서비스를 이용하더라도 실제 서버에서 처리하는 요청을 수십개 
    • 모든 유저가 버튼을 누르고 있지 않는다.
  • 서버 자원을 매우 효율적으로 사용할 수 있음

2. HTTP 메소드

리소스와 행위를 분리 - 가장 중요한 것은 리소스를 식별하는 것

  • URI는 리소스만 식별 (Uniform Resource Identifier)
  • 리소스와 해당 리소스를 대상으로 하는 행위를 분리

1. 메소드 종류

  • GET: 리소스 조회
  • POST: 요청 데이터 처리, 주로 등록에 사용
  • PUT: 리소스를 대체, 해당 리로스가 없으면 생성
  • PATCH: 리소스 부분 변경
  • DELETE: 리소스 삭제

GET

  • query(쿼리 파라미터, 쿼리 스트링)를 통해서 전달
  • 메시지 바디를 사용해서 데이터를 전달할 수 있지만, 지원하지 않는 곳이 많아서 권장하지 않음

POST

  • 메시지 바디를 통해 서버로 요청 데이터 전달
  • 주로 전달된 데이터로 신규 리소스 등록, 프로세스 처리에 사용
  • 스펙: POST 메소드는 대상 리소스가 리소스의 고유한 의미 체계에 따라 요청에 포함된 표현을 처리하도록 요청합니다.
  • 이 리소스 URI에 POST 요청이 오면 요청 데이터를 어떻게 처리할지 리소스마다 따로 정해야함 -> 정해진 것이 없다.

  정리

  1. 새 리소스 생성(등록) : 서버가 아직 식별하지 않는 새 리소스 생성
  2. 요청 데이터 처리 : 단순히 데이터를 생성하거나, 변경하는 것을 넘어서 프로세스를 처리해야 하는 경우
  3. 다른 메서드로 처리하기 애매한 경우 : 애매하면 POST 사용

PUT

  • 리소스를 대체 : 있으면 대체, 없으면 생성 -> 덮어버림

PATCH

  • 리소스 부분 변경

DELETE

  • 리소스 제거

3. HTTP 상태코드

  • 1xx (Informational): 요청이 수신되어 처리중
  • 2xx (Successful): 요청 정상 처리
  • 3xx (Redirection): 요청을 완료하려면 추가 행동이 필요
  • 4xx (Client Error): 클라이언트 오류, 잘못된 문법등으로 서버가 요청을 수행할 수 없음
  • 5xx (Server Error): 서버 오류, 서버가 정상 요청을 처리하지 못함

리다이렉션

  • 웹 브라우저는 3XX 응답의 결과에 Location헤더가 있으면, Location위치로 자동 이동(리다이렉트)

영구 리다이렉션 - 301, 308

  • 리소스의 URI가 영구적으로 이동
  • 원래의 URL 사용 X, 검색 엔진 등에서도 변경 인지
  • 301 Moved Permanently
    • 리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음(MAY)
  • 308 Permanent Redirect
    • 301과 기능 동일
    • 리다이렉트시 요청 메서드와 본문 유지(처음 POST를 보내면 리다이렉트도 POST)

일시적인 리다이렉션 - 302, 307, 303

  • 리소스의 URI가 일시적으로 변경
  • 따라서 검색 엔진 등에서 URL을 변경하면 안됨
  • 302 Found
    • 리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음(MAY)
  • 307 Temporary Redirect
    • 리다이렉트시 요청 메서드와 본문 유지(요청 메서드를 변경하면 안된다. MUST NOT)
  • 303 See Other
    • 리다이렉트시 요청 메서드가 GET으로 변경

PRG: Post/Redirect/Get

  • POST로 주문,등록 후에 새로고침 하면 재요청이 되어 중복 주문이 가능
  • POST로 주문 후에 결과 화면을 GET 메서드로 리다이렉트
  • 새로고침해도 결과화면을 GET으로 조회

4. HTTP 헤더

  • header-field = field-name ":" OWS field-value OWS (OWS:띄어쓰기 허용)
  • field-name은 대소문자 구분 없음

HTTP BODY

  • 메시지 본문(message body)를 통해 데이터 전달
  • 메시지 본문 = 페이로드(payload)
  • 표현은 요청이나 응답에서 전달할 실제 데이터
  • 표현 헤더는 표현 데이터를 해석할 수 있는 정보 제공

표현

  • Content-Type: 표현 데이터 형식
  • Content-Encoding: 표현 데이터의 압축 방식
  • Content-Language: 표현 데이터의 자연 언어
  • Content-Length: 표현 데이터의 길이
  • 표현 헤더는 전송, 응답 둘다 사용

협상 : 클라이언트가 선호하는 표현 요청

  • Accept: 클라이언트가 선호하는 미디어 타입 전달
  • Accept-Charset: 클라이언트가 선호하는 문자 인코딩
  • Accept-Encoding: 클라이언트가 선호하는 압축 인코딩
  • Accept-Language: 클라이언트가 선호하는 자연 언어
  • 협상 헤더는 요청시에만 사용

협상과 우선순위

  • Quality Values(q) 값 사용
  • 0~1, 클수록 우선순위 생략하면 1
  • Accept-Language: ko-KR;ko;q=0.9,en-US;q=0.8;en;q=0.7
    • 1. ko-KR(생략:1)
    • 2. ko;q=0.9
    • en-US;q=0.8
    • en;q=0.7
  • 구체적인 것을 우선한다.
  • Accept: text/*, text/plain, text/plain;format=flowed, */*
    • 1. text/plain;format=flowed
    • 2. text
    • 3. text/*
    • 4. */*

일반 정보

  • From : 유저 에이전트의 이메일 정보
  • Referer: 이전 웹 페이지 주소
    • 현재 요청된 페이지의 이전 웹 페이지 주소
    • Referer을 사용해서 유입 경로 분석 가능
    • 요청에서 사용
  • User-Agent
    • 클라이언트의 애플리케이션 정보(웹 브라우저 정보, 등등)
    • 통계 정보
    • 어떤 종류의 브라우저에서 장애가 발생하는지 파악 가능
    • 요청에서 사용
  • Server: 요청을 처리하는 ORIGIN 서버의 소프트웨어 정보
    • 응답에서 사용
  • Date: 메시지가 발생한 날짜와 시간
    • 응답에서 사용

특별한 정보

Host: 요청한 호스트 정보(도메인)

  • 요청에서 사용
  • 필수
  • 하나의 서버가 여러 도메인을 처리해야할 때
  • 하나의 IP 주소에 여러 도메인이 적용되어 있을 때

Location: 페이지 리다이렉션

  • 웹 브라우저는 3XX 응답의 결과에 Location 헤더가 있으면, Location 위치로 자동 이동
  • 201 (Created) : Location 값 요청에 의해 생성된 리소스 URI
  • 3xx (Redirection) Location 값 요청을 자동으로 리다이렉션 하기 위한 대상 리소스를 가리킴

Allow: 허용 가능한 HTTP 메서드

  • 405 (Method Not Allowed) 에서 응답에 포함해야함

Retry-After

  • 503(Service Unavailalbe): 서비스가 언제까지 불가능인지 알려줄 수 있음
  • 날짜표기 / 초 단위 표기

참조

https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC

  1. 1. HTTP 특징
  2.  2. 클라이언트 서버 구조
  3.  3. 무상태 프로토콜 (Stateless)
  4.  4. 비연결성
  5. 2. HTTP 메소드
  6. 3. HTTP 상태코드
  7. 4. HTTP 헤더
'웹' 카테고리의 다른 글
  • 세션
  • 쿠키
규동
규동
규동
규동노트
규동
전체
오늘
어제
  • 분류 전체보기 (32)
    • 스프링 (8)
    • 자바 (5)
    • 웹 (3)
    • 코딩테스트 (1)
    • 데이터베이스 (1)
    • 인프라 (1)
    • 기록 (5)
    • 개발서적 (7)
    • 앱 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 외부설정
  • JUnit
  • 디자인 패턴
  • 다국어
  • 클린코드
  • d-day 구하기
  • TDD
  • Cleancode
  • 국제화

최근 댓글

최근 글

hELLO · Designed By 정상우.
규동
HTTP 기본
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.