geeone 스터디 블로그
[컴퓨터 네트워크] 네트워크의 응용 계층 - HTTP 메서드와 상태 코드 본문
1. DNS와 URI/URL
2. HTTP의 특징과 메시지 구조
3. HTTP 메서드와 상태 코드
4. HTTP 주요 헤더
3. HTPP 메서드와 상태 코드
HTTP 메서드
| HTTP 메서드 | 설명 |
| GET | 자원을 습득하기 위한 메서드 |
| HEAD | GET과 동일하나, 헤더만을 응답받는 메서드 |
| POST | 서버로 하여금 특정 작업을 처리하게끔 하는 메서드 |
| PUT | 자원을 대체하기 위한 메서드 |
| PATCH | 자원에 대한 부분적 수정을 위한 메서드 |
| DELETE | 자원을 삭제하기 위한 메서드 |
| CONNECT | 자원에 대한 양방향 연결을 시작하는 메서드 |
| OPTIONS | 사용 가능한 메서드 등 통신 옵션을 확인하는 메서드 |
| TRACE | 자원에 대한 루프백 테스트를 수행하는 메서드 |
1. GET 메서드
- 자원을 조회하는 용도의 메서드입니다.
- 웹 브라우저를 통해 웹사이트의 자원을 조회하는 것 == 해당 웹사이트에 GET 요청을 보내는 것
GET /example-page HTTP/1.1
Host: www.example.com
(HOST 메서드는 응답 메시지에 메시지 본문이 포함되지 않는다는 점을 제외하면 사실상 GET 메서드와 동일
2. POST 메서드
- 서버로 하여금 특정 작업을 처리하도록 요청하는 용도로 사용되는 메서드입니다.
- 많은 경우, '클라이언트가 서버에 새로운 자원을 생성하고자 할 때' 사용됩니다.
POST /posting HTTP/1.1
Host : example.com
.
.
{
"Id":1,
"Title" : "컴퓨터 네트워크",
.
.
}
-> 요청 메시지 (메시지 본문에 해당하는 자원을 새롭게 생성하도록 요청하는 메시지)
HTTP/1.1 201 Created
Content-Type : application/json
Content-length : 100
Location : /posting/1
{
"Id":1,
"Title" : "컴퓨터 네트워크",
.
.
}
-> 응답 메시지 (성공적으로 자원이 생성되었을 때)(location 헤더를 통해 자원의 위치를 응답하고, 메시지 본문으로 생성된 자원을 응답)
3. PUT과 PATCH 메서드
- PUT 메서드는 '덮어쓰기'를 요청하는 메서드인 반면, PATCH 메서드는 '부분적 수정'을 요청하는 메서드라는 차이가 있음으로 유의해야 합니다.
4. DELETE 메서드
- 특정 자원의 삭제를 요청할 때 사용되는 메서드입니다.
DELETE /tests/a.txt HTTP/1.1
Host : example.com
-> example.com 이라는 호스트의 '/texts/a.txt'를 삭제하도록 요청하는 메시지
메서드 선택
메서드로 요청을 받았을 때 서버가 어떻게 행동해야 하는지를 설계하는 것은 오로지 개발자의 몫!
같은 URL에 대한 요청이라고 해도 여러 메서드에 대한 동작을 구현할 수 있다.
즉, 같은 URL에 대해 GET 메서드로 요청을 받았을 때와 POST 메서드로 요청 메시지를 받았을 때를 다르게 동작하게 하거나, PATCH 메서드에 대한 동작은 구현하지 않을수도 있다~
HTTP 상태코드
상태코드란?
- 요청의 결과를 나타내는 3자리의 정수입니다.
- 백의 자릿수를 기준으로 요청 결과의 유형을 나누기 때문에 유사한 결과를 나타내는 상태 코드는 같은 백의 자릿수를 공유합니다.
| 상태 코드 | 설명 |
| 100번대(100~199) | 정보성 상태 코드 |
| 200번대(200~299) | 성공 상태 코드 |
| 300번대(300~399번) | 리다이렉션 상태 코드 |
| 400번대(400~300번) | 클라이언트 에러 상태 코드 |
| 500번대(500~599번) | 서버 에러 상태 코드 |
1. 200번대 : 성공 상태 코드
- 요청이 성공했음을 의미합니다.
| 상태 코드 | 이유 구문 | 설명 |
| 200 | OK | 요청이 성공했음 |
| 201 | Created | 요청이 성공했으며, 새로운 자원이 생성되었음 |
| 202 | Accepted | 요청을 잘 받았으나, 아직 요청한 작업을 끝내지 않았음 |
| 204 | No Content | 요청이 성공했지만, 메시지 본문으로 표시할 데이터가 없음 |
2. 300번대 : 리다이렉션 상태 코드
- redirection : 클라이언트가 요청한 자원이 다른 곳에 있을 때 다른 곳으로 요청을 이동시키는 것
- 클라이언트가 요청한 자원이 다른 URL에 있을 경우, 서버는 리다이렉션 관련 상태 코드와 함께 응답 메시지의 Location 헤더를 통해 요청한 자원이 위치한 URL을 안내해줄 수 있습니다. 이를 수신한 클라이언트는 Location 헤더에 명시된 URL로 재요청을 보내 새로운 URL에 대한 응답을 받게 됩니다.
| 상태 코드 | 이유 구문 | 설명 |
| 301 | Moved Permanently | 영구적 리다이렉션 - 재요청 메서드가 변경될 수 있음 |
| 308 | Permanent Redirect | 영구적 리다이렉션 - 재요청 메서드가 변경되지 않음 |
| 302 | Found | 일시적 리다이렉션 - 재요청 메서드가 변경될 수 있음 |
| 303 | See Other | 일시적 리다이렉션 - 재요청 메서드가 GET으로 변경됨 |
| 307 | Temporary Redirect | 일시적 리다이렉션 - 재요청 메서드가 변경되지 않음 |
| 304 | Not Modified | 캐시 - 자원이 변경되지 않음 |
영구적 리다이렉션 permanent redirection
- 자원이 완전히 새로운 곳으로 이동하여 경로가 영구적으로 재지정되는 것을 의미합니다.
- 기존 URL에 요청 메시지를 보내면 항상 새로운 URL로 리다이렉트 됩니다.
일시적 리다이렉션 temporary redirection
- 자원의 위치가 임시로 변경되었거나 임시로 사용할 URL이 필요한 경우에 주로 사용됩니다.
- 어떤 URL에 대해 일시적인 리다이렉션 관련 상태 코드를 응답 받았다면 영구적인 리다이렉션과는 달리 여전히 요청을 보낸 기존의 URL을 기억해야 합니다.
3. 400번대 : 클라이언트 에러 상태 코드
- 클라이언트에게 잘못이 있음을 나타내는 상태 코드입니다.
| 상태 코드 | 이유 구문 | 설명 |
| 400 | Bad Request | 요청 메시지의 내용이나 형식 자체에 문제가 있음 |
| 401 | Unauthorized | 요청한 자원에 대한 유효한 인증authenication이 없음 |
| 403 | Forbidden | 요청이 서버에 의해 거부됨 (예) 자원에 대한 접근 권한authorization 이 충분하지 않음 |
| 404 | Not Found | 요청 받은 자원을 찾을 수 없음 |
| 405 | Method Not Allowed | 요청한 메서드를 지원하지 않음 |
401과 403 혼동 주의!
- 인증 : 자신이 누구인지를 증명하는 작업
- 접근 권한 : 인증된 주체에게 허용된 작업
-> 로그인된 모든 유저는 인증된 유저이지만 모든 유저가 관리자 페이지(권한)에 들어갈 수는없음.
4. 500번대 상태 코드
- '서버에 잘못이 있음'을 나타내는 상태 코드입니다.
| 상태 코드 | 이유 구문 | 설명 |
| 500 | Internal Server Error | 요청을 처리할 수 없음 |
| 502 | Bad Gateway | 중간 서버(클라이언트와 서버 사이에 위치)의 통신 오류 |
| 505 | - | HTTP Version is Not Supported |
- 사실 500번대 상태 코드의 대부분은 500번입니다. 왜냐하면, 서버에 어떤 문제가 발생했을 때 익명의 다수 사용자에게 문제의 발생 원인을 상세히 공개하는 것은 보안상 좋지 않기 때문에, 500번으로 통칭하는 경우가 많습니다.
'컴퓨터 네트워크' 카테고리의 다른 글
| [컴퓨터 네트워크] 네트워크의 응용 계층 - 캐시 (0) | 2024.10.11 |
|---|---|
| [컴퓨터 네트워크] 네트워크의 응용 계층 - 쿠키 (0) | 2024.10.10 |
| [컴퓨터 네트워크] 네트워크의 응용 계층 - HTTP 주요 헤더 (0) | 2024.10.08 |
| [컴퓨터 네트워크] 네트워크의 응용 계층 - HTTP의 특징과 메시지 구조 (0) | 2024.10.08 |
| [컴퓨터 네트워크] 네트워크의 응용 계층 - DNS와 URI/URL (0) | 2024.10.08 |