[HTTP] HTTP 기본 정리

Jenna·2023년 6월 13일
0

HTTP

HyperText Transfer Protocol의 약자로 웹에서 정보를 교환하기 위한 프로토콜(규약) 이다. 클라이언트와 서버 간에 데이터를 전송하는 법을 정의한다.

✅Stateless Protocol

HTTP는 stateless protocol, 즉 비상태 프로토콜이다. 이는 서버가 이전에 전송된 정보를 기억하지 않는다는 의미로, 각각의 요청이 별개로 처리되며 이전 요청과 다음 요청 사이에 연결고리가 없다. 이러한 특징으로 인해 서버는 세션과 같은 별도의 추가정보를 관리하지 않아도 되고, 다수의 요청 처리 및 서버의 부하를 줄일 수 있다는 이점을 가지게 된다.

✅Request & Response

HTTP는 기본적으로 클라이언트-서버 모델을 따른다. 클라이언트는 HTTP 요청(request)을 생성하고, 서버는 요청된 정보에 대한 응답(response)을 제공한다.


URL

Uniform Resource Locator의 약자로, 서버의 자원 위치를 가리키는 표준적인 방식이다. 인터넷에서 웹페이지, 이미지 등을 특정 위치에 연결하거나 가져오는 데에 사용되는 주소다.

URL의 기본구조는 다음과 같다.

protocol://hostname:port/path?query_string#fragment_id
  1. protocol(프로토콜) : 자원에 접근하기 위해 사용되는 방법을 지정. HTTP, HTTPS, FTP 등이 있다.
  2. hostname(호스트이름) : 자원이 위치한 서버의 도메인 이름 또는 IP 주소
  3. port(포트) : 서버에서 자원에 접근하기 위해 특정 포트를 지정한다. 대부분의 HTTP 통신에서는 생략되며 기본적으로 HTTP는 80포트를 사용한다.
  4. path(경로) : 서버에서 자원의 특정 위치를 지정한다. 종종 폴더와 파일 구조를 통해 나타내진다.
  5. Query String(쿼리 문자열) : 웹 서버에 추가 정보를 제공하는 데 사용된다. 보통 key=value 쌍의 형태로 & 기호로 구분된다. 쿼리 문자열은 ? 기호로 시작한다.
  6. Fragment ID(프래그먼트 아이디) : 웹 페이지 내의 특정 부분을 가리키는 데 사용된다. # 기호로 시작한다.

HTTP 요청 메서드

url을 사용하여 서버에 특정 데이터를 요청할 때 특정 동작을 수행하고 싶다면, HTTP 요청 메서드 (HTTP Request Methods)를 사용하면 된다.

✅주요 메서드

  • GET(요청) : 서버로부터 정보를 조회하기 위해 사용되는 메서드
  • POST(생성) : 서버로 정보를 전송하기 위해 사용되는 메서드. 주로 서버의 상태를 변경하거나 데이터를 생성하는 데 사용된다.
  • PUT(변경) : 서버의 리소스를 업데이트 하는데 사용되는 메서드. 리소스를 생성할 수도 있다.
  • DELETE(삭제) : 서버의 특정 리소스를 삭제하는데 사용되는 메서드

POST vs PUT

POSTPUT은 둘다 리소스를 생성하는데 사용될 수 있다. 그러나 둘의 리소스를 생성하는 방식과 의미는 서로 다르다.

  1. POST : POST를 이용하여 새 리소스를 생성하면, 서버는 새로운 리소스의 위치(URI)를 결정한다. 클라이언트는 생성할 데이터만 제공하고, 서버는 그 데이터를 사용하여 새로운 리소스를 만들고, 그 위치를 클라이언트에게 알려준다.
  2. PUT : PUT을 이용하여 새 리소스를 생성하면, 클라이언트는 새 리소스가 생성되어야 할 정확한 위치(URI)를 서버에 알려주어야 한다. 만약 그 위치에 이미 리소스가 존재한다면, 그 리소스는 클라이언트가 제공한 데이터로 교체된다. 아무것도 없다면, 새로운 리소스가 해당 위치에 생성된다.

즉 "생성" 이라는 개념이 두 메서드에 모두 적용되지만, POST는 "이 데이터를 가져가서 처리해주세요" 와 같은 요청을 보내는 개념이고, PUT은 "이 데이터를 이 특정 위치에 저장해주세요" 와 같은 개념이다.


HTTP 상태코드

HTTP 상태코드(Status Code)는 요청을 받은 서버가 설정해주는 응답(response)정보이다. 코드는 3자리의 숫자로 서버가 클라이언트의 요청을 어떻게 처리했는지를 나타낸다.

✅주요 상태코드

  1. 1xx (정보 응답) : 요청을 받았고, 프로세스를 계속 진행 중임을 나타낸다.

    • 100 Continue: 서버가 요청의 초기 부분을 받았으며, 나머지 부분을 기다리고 있음을 나타낸다.
  2. 2xx (성공) : 요청이 성공적으로 수신, 이해, 수락되었음을 나타낸다.

    • 200 OK: 요청이 성공적으로 처리되었음을 나타낸다. GET, POST, PUT, DELETE 등 모든 메서드에 대한 가장 일반적인 성공 응답이다.
    • 201 Created: 요청이 했으며, 그 결과로 새로운 리소스가 생성되었음을 나타낸다. 일반적으로 POST 나 일부 PUT의 요청의 응답으로 반환된다.
  3. 3xx (리다이렉션 완료) : 대부분 클라이언트가 이전 서버주소로 리소스를 요청할 때 나오는 코드이다.

    • 301 Moved Permanently: 요청한 url이 영구적으로 새로운 주소로 이전했음을 나타낸다. 서버는 해당 응답과 함께 새로운 url을 제공해야한다.
  4. 4xx (요청 오류) : 클라이언트에 오류가 있음을 나타낸다.

    • 400 Bad Request: 서버가 요청을 이해하지 못했음을 나타낸다. 일반적으로 요청의 크기, 구문, 라우팅 문제등으로 인해 발생한다.
    • 401 Unauthorized: 권한이 없음을 나타낸다.
    • 403 Forbidden: 서버에서 해당 자원에 대한 접근이 금지되었음을 나타낸다.
    • 404 Not Found: 요청한 자원이 서버에 없음을 나타낸다. 일반적으로 서버에 존재하지 않는 페이지에 접근하려고 할 때 발생한다.
  5. 5xx (서버 오류) : 서버가 유효한 요청을 처리하는데 실패했음을 나타낸다.

    • 500 Internal Server Error: 서버에 오류가 발생하여 요청을 수행할 수 없음을 나타낸다.
    • 502 Bad Gateway: 웹 서버가 게이트웨이 또는 프록시 역할을 수행하면서 상류 서버로 부터 잘못된 응답을 받았음을 나타냄.

해당 코드들 외에도 HTTP 상태코드는 수백 가지가 있으며 각 코드는 특정 유형의 HTTP 응답을 나타낸다.
profile
FE/Game Dev.

0개의 댓글