안녕하세요!! 임오군란과 민씨의 임입니다:)
오늘은 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)
- 요청을 성공했지만, 응답 페이로드 본문에 보낼 데이터가 없음
- 200 OK
- 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
- 요청 리소스를 찾을 수 없음
- 400 Bad Request
- 5XX(서버 오류) : 서버가 정상 요청을 처리하지 못함
- 500 Internal Server Error
- 서버 내부 문제로 오류 발생
- 502 Bad Gateway
- 서버 간의 유효하지 않은 응답을 받은 경우
- 503 Service Unavalialbe
- 서버가 일시적으로 요청을 처리할 준비가 되지 않음. 유지보수를 위한 작동 중단, 과부하가 걸린 서버 등
- 500 Internal Server Error
마지막으로 본 게시글을 쓰면서 참고한 링크입니다.
https://ko.wikipedia.org/wiki/HTTP
https://www.w3schools.com/tags/ref_httpmethods.asp
https://ko.wikipedia.org/wiki/HTTP_상태_코드
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 |
댓글