HTTP 기초
May 18, 2023
HTTP 기초
1. 인터넷 네트워크
1-1. IP(인터넷 프로토콜)
- IP 주소를 통해 패킷이라는 통신 단위로 데이터를 전달한다.
- IP는 대상을 쉽게 분별할 수 있다는 장점이 있다.
- 패킷을 받을 대상의 상태와 관계없이 패킷을 전송하거나, 패킷이 유실되어도 알 수 없다는 점 등의 단점이 있다.
1-2. TCP 프로토콜
- IP 패킷 안에 들어가 있고 PORT, 전송제어, 순서 등의 정보를 가지고 있어 IP의 단점을 보완해준다.
- TCP는 전송제어 프로토콜이다.
- TCP 3 way handshake 연결을 지향하고 데이터 전달을 보증한다.
❓ 3 way handshake?
클라이언트-서버 통신 환경에서 클라이언트가 접속 요청 메세지를 서버에게 보내면 서버가 요청을 수락한다는 메세지와 함께 접속 요청 메세지를 보내고 클라이언트가 서버에게 데이터를 전송하게 되는데, 이 과정을 3 way handshake라고 한다.
1-3. UDP 프로토콜
- 단순하고 빠르다는 장점이 있다.
- 데이터 전달 보증과 순서 보장이 되지 않는다는 단점이 있다.
1-4. PORT
- 같은 IP 내에서 프로세스를 구분할 때 사용한다.
1-5. DNS
- 도메인 네임 시스템(Domain Name System)의 줄임말이다.
- IP를 사람이 기억하기 쉬운 이름으로 도메인 명을 IP 주소로 변환한다.
2. URL
2-1. URI
- URI(Resource Identifier)는 URL(Resource Locator)와 URN(Resource Name)을 포함하는 단어다.
2-2. URL
- 리소스가 있는 위치를 지정한다.
- 주로 프로토콜을 사용하는데, http, https, ftp 등이 있다.
- #뒤에 오는 리소스를 Fragment라고 부른다.
❓ Fragment?
html 내부 북마크 등에 사용되고 서버에 전송하는 정보가 아니다.
2-3. URN
- 리소스에 이름을 부여한다.
- URN 이름으로 실제 리소스를 찾을 수 있는 방법이 보편화 되어있지 않다.
3. HTTP
3-1. 특징
- 요청을 보내고 응답을 받는 클라이언트-서버 구조이다.
- 무상태 프로토콜(Stateless)을 지향한다.
❓ Stateless?
서버가 클라이언트의 상태를 보존하지 않는 것을 의미한다.
각 요청이 독립적으로 처리되고 확장성과 유연성을 높일 수 있는 장점을 제공한다.
- 연결을 유지하지 않는 비 연결성이다.
3-2. HTTP 메서드
- URI 설계에서 가장 중요한 것은 리소스 식별이다.
메소드 종류
1. GET
- 리소스 조회
- 서버에 전달하고 싶은 데이터는 쿼리 파라미터, 쿼리 스트링을 통해 전달한다.
- 동적 데이터를 조회할 때 쿼리 스트링을 사용한다.
2. POST
- 요청 데이터 처리
- 메세지 바디를 통해 서버로 요청 데이터 전달
- 주로 신규 리소스 등록, 프로세스 처리에 사용된다.
- Form 데이터를 전송할 때 자주 사용된다.
HTML Form 전송은 GET, POST만 지원된다.
3. PUT
- 리소스 대체(완전히 덮어쓰기)
- 리소스가 없으면 생성
- 클라이언트가 리소스를 식별할 수 있다는 것이 POST와의 차이점이다.
4. PATCH
- 리소스 부분 변경
5. DELETE
- 리소스 삭제
4. HTTP 상태 코드
4-1. 1xx(Informational)
- 요청이 수신되어 처리중
4-2. 2xx(Successful)
- 요청 정상 처리
- 종류
- 200: 요청 성공
- 201(Created): 요청 성공해서 새로운 리소스가 생성됨, 생성된 리소스는 응답의 Location 헤더 필드로 식별, ex) Location: /members/100
- 202(Accepted): 요청이 접수되었으나 처리가 완료되지 않았음
- 204(No Content): 서버가 요청을 성공적으로 수행했지만, 응답 페이로드 본문에 보낼 데이터가 없음
4-3. 3xx
- 요청을 완료하려면 추가 행동이 필요
- 클라이언트는 응답에 Location헤더가 있으면 리다이렉트 시킴
- 종류
- 301(Moved Permanently): 리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음, 영구 리다이렉션
- 302(Found): 리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음, 일시적인 리다이렉션
- 303(See Other): 302와 기능은 같음, 리다이렉트 요청 메서드가 GET으로 변경, 일시적인 리다이렉션
- 304(Not Modified): 캐시를 목적으로 사용, 클라이언트에게 리소스가 수정되지 않았음을 알려줌, 응답에 메시지 바디를 포함하면 안됨
- 307(Temporary Redirect): 302와 기능은 같음, 리다이렉트시 요청 메서드와 본문 유지, 일시적인 리다이렉션
- 308(Permanent Redirect): 301과 기능은 같음, 리다이렉트시 요청 메서드와 본문 유지, 영구 리다이렉션
❓ 일시적인 리다이렉션은 언제 사용할까?
1. POST로 주문후에 웹 브라우저를 새로고침하면? -> 중복 주문의 가능성이 있음 -> PRG(Post/Redirect/Get)로 방지
2. POST로 주문후에 주문 결과 화면을 GET으로 리다이렉트 -> 새로고침을 해도 결과 화면을 GET으로 조회
4-4. 4xx
- 클라이언트 오류. 잘못된 문법 등으로 서버가 요청을 수행할 수 없음
- 종류
- 400(Bad Request): 클라이언트의 잘못된 요청으로 서버가 요청을 처리할 수 없음, 예) 요청 파라미터가 잘못됐거나 API 스펙이 맞지 않을 경우
- 401(Unauthorized): 클라이언트가 해당 리소스에 대한 인증이 필요함, 로그인과 같이 본인이 누구인지 확인하는 과정인 인증이 되지 않은 경우
- 403(Forbidden): 서버가 요청을 이해했지만 승인을 거부함, 인증 자격 증명은 있지만 권한이 충분하지 않은 경우, 예) 로그인을 한 관리자 권한이 없는 사용자가 관리자 등급의 리소스에 접근하는 경우
- 404(Not Found): 요청 리소스를 찾을 수 없음
4-5. 5xx
- 서버 오류, 서버가 정상 요청을 처리하지 못함
- 종류
- 500(Internal Server Error): 서버 문제로 오류 발생, 애매하면 500 오류
- 503(Service Unavailable): 서비스 이용 불가, 서버가 일시적인 과부하 또는 예정된 작업으로 잠시 요청을 처리할 수 없음
📂 참고자료