본문 바로가기
Network

HTTP 메시지 구조와 메서드

by BTC_DIGIMON 2022. 7. 29.

안녕하세요!! 임오군란과 민씨의 임입니다:)

 

오늘은 HTTP메서드와 메시지 구조 및 상태 코드에 대해 알아보도록 하겠습니다.

차례는 아래와 같습니다.

 


1. 리소스란?

2. 웹 브라우저 요청 흐름

3. HTTP 메시지 구조

4. HTTP 메서드

5. HTTP 상태코드란?


 

 

1. 리소스(Resource)란?

  • URL를 검색해서 받아온 결과물을 말하며 TEXT, HTML, JSON, XML, IMAGE, 음성, 영상, 파일 등 서버에서 전달받은 데이터를 말합니다.

2. 웹 브라우저 요청 흐름

웹브라우저 → 요청패킷 전달 → 구글서버

구글 서버 주소 → (TCP/IP 패킷 // HTTP 메시지)


구글 서버 주소를 찾아 HTTP 요청 메시지를 패킷 안에 담아 구글 서버에 전달
웹브라우저 ← 응답 패킷 전달 ← 구글서버

(TCP/IP 패킷 //HTTP 메시지)
← 구글서버


구글 서버가 전달받은 메시지를 분석, HTTP 응답 메시지를 패킷에 담아 웹 브라우저에 전달
웹 브라우저가 전달받은 데이터를 통해 화면으로 출력하게 됩니다.

앞서 흐름에서 주고받는 HTTP 메시지에 대해 알아보겠습니다.

 


 

3. HTTP 메시지 구조

<기본 구조>
start-line		//시작 라인
header			//헤더
empty line		//공백라인(CRLF)
message body

 

  • start-line 필드
GET /search?q=btc HTTP/1.1


  HTTP Method : ex) GET, PUT, POST

  Path or Query : ex) https://google.com/search?q=btc

  HTTP version
HTTP/1.1 200 OK


  HTTP version

  status code : ex) 200, 201, 404, …

  reason-phrase : ex) OK, Created, Not Found
  • 헤더 필드
    • HTTP 전송에 필요한 모든 부가정보를 담고 있습니다.
  • 요청 메시지 : 서버에게 보낼 데이터의 유무에 따라 메시지 바디의 포함 유무를 결정합니다.

4. HTTP 메서드

 

GET : 리소스 조회

 

  • 클라이언트가 /users/101 데이터를 요청합니다.
GET /users/101 HTTP/1.1
Host: localhost:3000
  • 서버에서 해당 메시지에 맞는 데이터를 찾아 클라이언트에게 보내줍니다.
{
	"id" : "101",
	"name" : "limboi",
	"email" : "btc@btc.com"
}
  • HTTP 응답 메시지의 바디에 데이터가 있는 것을 확인합니다.
HTTP/1.1 200 OK
Content-type: application/json
Content-Length: 52

{
	"id" : "101",
	"name": "limboi",
	"email" : "btc@btc.com"
}

POST : 요청 데이터 처리, 주로 등록에 사용

 

  • 클라이언트에서 서버의 users에 데이터를 요청합니다.
POST /users HTTP/1.1
Content-type: application/json

{
	"name": "limboi2",
	"email": "btc2@btc.com"
}
  • 서버에서 users에 신규 리소스 식별자를 생성해서 데이터를 등록합니다.
POST /users HTTP/1.1
Content-type: application/json
{
	"name": "limboi2",
	"email": "btc2@btc.com"
}
  • 서버에서 응답 메시지를 클라이언트에 보내주면서 header필드에 Location값이 추가됩니다.
HTTP/1.1 201 Created
Content-type: application/json
Content-Length: 52
Location: /users/101

{
	"id" : "101",
	"name" : "limboi2",
	"email" : "btc2@btc.com"
}

PUT : 리소스를 완전히 대체, 해당 리소스가 없으면 생성

 

  • 클라이언트에서 users/101에 데이터를 요청합니다.
PUT /users/101 HTTP/1.1
Content-type: applicaiton/json

{
	"name": "limboy",
	"email": "btc3@btc.com"
  • 서버에서 원래 있던 데이터를 요청받은 데이터로 변경합니다.
{
	"id" : "101",
	"name": "limboy",
	"email": "btc3@btc.com"
}

PATCH : 리소스 부분 변경

 

  • name 데이터 변경을 서버에 요청합니다.
PATCH /users/101 HTTP/1.1
Content-type: application/json

{
	"name": :"limboi"
}


//PATCH 동작 수행

{
	"id": "101",
	"name": "limboy",
	"email": "btc3@btc.com"
}
  • name 데이터만 변경합니다.
{
	"id": "101",
	"name": "limboi",
	"email": "btc3@btc.com"
}

DELETE : 리소스 삭제

 

  • 클라이언트에서 해당 리소스를 삭제 요청합니다.
DELETE /users/101 HTTP/1.1
Content-type: application/json


//DELETE 동작

/users/101 DELETED!!

기타

 

  • HEAD : GET과 동일하지만 메시지 부분을 제외하고, 상태 줄과 헤더만 반환
  • OPTIONS : 대상 리소스에 대한 통신 가능 옵션을 설명(주로 CORS에 사용)
  • CONNECT : 대상 자원으로 식별되는 서버에 대한 터널을 설정
  • TRACE : 대상 리소스에 대한 경로를 따라 메시지 루프백 테스트를 수행


**번외) POST VS PUT

  • PUT 메서드는 email이 없는 데이터를 보내면 email이 없는 데이터로 기존의 데이터를 대체합니다.
  • POST
    • 요청 데이터 처리, 주로 등록에 사용
  • PUT
    • 리소스를 완전히 대체, 해당 리소스가 없으면 생성, 리소스의 주소를 정확히 알고 있어야 합니다.

 


5. HTTP 상태 코드란?

- 클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주는 기능

 

- 코드별 상황

  • 1XX( 정보) : 요청을 받았으며 프로세스를 계속 처리 중
    • 100 Continue, 101 Switching Protocol, 102 Processing

  • 2XX(성공) : 요청을 성공적으로 처리
    • 200 OK
      • 요청 성공.
    • 201 Created
      • 요청 성공해서 새로운 리소스가 생성됨, 주로 POST 요청, 일부 PUT 요청 이후에 따라옴
    • 202 Accepted
      • 요청을 수신했지만 아직 처리가 완료되지 않음
    • 204 No Content)
      • 요청을 성공했지만, 응답 페이로드 본문에 보낼 데이터가 없음

  • 3XX(리다이렉션) : 요청 완료를 위해 웹 브라우저에서 추가 작업 조치가 필요
    • 301 Moved Permanently, 302 Found, 303 See Other, 304 Not Modified, 307 Temporary Redirect, 308 permanent Redirect
    • 리다이렉션 : 웹 브라우저는 3XX 응답의 결과에 Location 헤더가 있으면, Location 위치로 자동 이동하는 것
      • 영구적인 리다이렉션 - 특정 리소스의 URI가 영구적으로 이동( 301, 308)
      • 일시적인 리다이렉션 - 일시적인 변경(302, 303, 307)
      • 특수한 리다이렉션- 결과 대신 캐시를 사용

  • 4XX(클라이언트 오류) : 요청의 문법이 잘못되었거나 요청을 처리할 수 없음
    • 400 Bad Request
      • 잘못된 문법이나 메시지를 요청해서 서버가 이해할 수 없음
    • 401 Unauthorized
      • 클라이언트가 해당 리소스에 대한 인증이 필요함(로그인)
    • 403 Forbidden
      • 서버가 요청을 이해했지만 승인을 거부함. 인증은 되었지만(로그인) 접근 권한이 불충분한 경우(인가)
    • 404 Not Found
      • 요청 리소스를 찾을 수 없음

  • 5XX(서버 오류) : 서버가 정상 요청을 처리하지 못함
    • 500 Internal Server Error
      • 서버 내부 문제로 오류 발생
    • 502 Bad Gateway
      • 서버 간의 유효하지 않은 응답을 받은 경우
    • 503 Service Unavalialbe
      • 서버가 일시적으로 요청을 처리할 준비가 되지 않음. 유지보수를 위한 작동 중단, 과부하가 걸린 서버 등

마지막으로 본 게시글을 쓰면서 참고한 링크입니다.

https://ko.wikipedia.org/wiki/HTTP

 

HTTP - 위키백과, 우리 모두의 백과사전

 

ko.wikipedia.org

https://www.w3schools.com/tags/ref_httpmethods.asp

 

HTTP Methods GET vs POST

W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.

www.w3schools.com

https://ko.wikipedia.org/wiki/HTTP_상태_코드

 

HTTP 상태 코드 - 위키백과, 우리 모두의 백과사전

 

ko.wikipedia.org

https://www.youtube.com/watch?v=QcKEJFvPryI 

 

다음번엔 더 좋은 내용으로 찾아오겠습니다!!

 

'Network' 카테고리의 다른 글

[Network]Repeater & Hub & Bridge  (0) 2022.08.13
[Network] 라우터란?  (0) 2022.08.01
[Network] DNS란?  (0) 2022.07.22
[Network] NAT란  (0) 2022.07.18
[Network]Unicast, Broadcast, Multicast  (0) 2022.07.11

댓글