티스토리 뷰
CS/Network
[네트워크] HTTP 메서드 종류, GET POST PUT PATCH DELETE HEAD OPTIONS
heemang.dev 2024. 5. 25. 10:481. GET 요청
- 서버에 저장된 리소스를 조회하기 위해서 사용된다.
- 조회하고자 하는 데이터를 쿼리 스트링에 포함하여 서버로 전달한다.
- 쿼리 스트링이 아닌 메시지 바디에 포함하여 전송할 수 있으나, 이를 모든 브라우저에서 지원하지 않으므로 권장되지 않는 방법이다.
- 리소스 조회 후 캐시에 저장하고, 이후에 동일한 데이터 조회 시에 서버로의 요청을 가로채어 캐싱된 데이터 복사본을 반환한다.
- 리소스를 정상적으로 조회하면 200 OK를 반환한다.
2. POST 요청
- 서버에 새로운 리소스를 생성하기 위해서 사용된다.
- 서버로 요청하고자 하는 데이터를 메시지 바디에 포함한다.
- ex. example.com/posts
- 메시지 바디
{
"content":"test",
"username":"test"
} - POST 요청은 캐싱되지 않는다.
- 리소스를 정상적으로 생성하면 200 OK 또는 201 CREATED를 반환한다.
3. PUT 요청
- 기존의 리소스를 완전히 덮어 씌우기 위해 사용된다.
- 서버에 리소스 존재 : 해당 리소스를 새로운 데이터로 덮어 씌운다.
- 서버에 리소스 존재 X : 새로운 리소스를 생성한다.
- 일부 데이터만 덮어 씌울 수 없다.
- 기존 리소스
{
"content":"test",
"age":99
} - 변경된 데이터 기존 리소스에서 “age”만 98로 변경하도록 PUT 요청을 날린 경우, 기존의 “username”이 삭제된다.
{
"age":98
}
- 기존 리소스
4. PATCH 요청
- 기존의 리소스의 일부만 덮어 씌울 수 있다.
- PUT 요청과 달리 일부 데이터만 수정할 수 있다.
- 기존 리소스
{
"content":"test",
"age":99
} - 변경된 리소스
{
"content":"test",
"age":98
}
5. DELETE 요청
- 서버에 저장된 리소스를 제거하기 위해서 사용한다.
- 상태 코드로 200 OK 또는 204 No Content를 응답한다.
6. HEAD 요청
- GET 요청과 동일한 방식으로 사용되나, 응답 본문을 포함하지 않는다.
- 조회된 리소스에 대한 헤더 정보만을 응답한다.
HEAD /resource HTTP/1.1
Host: example.com
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1234
GET과 동일한 헤더 응답을 내리지만, 조회된 리소스 데이터를 포함하지 않는다.
- 조회된 리소스에 대한 헤더 정보만을 응답한다.
7. OPTIONS 요청
- CORS(Cross-Origin-Resource-Sharing) 정책과 관련된 HTTP 메서드
- 서버로 실제 요청을 날리기 전에 OPTIONS 메서드를 사용하여 사전 요청을 보낸다.
사전 요청을 통해 서버로 실제 요청을 허용하는지 응답으로 반환한다.
7-1. Preflight 요청
클라이언트 → 서버로 실제 요청을 보내기 전에 Preflight 요청을 통해 서버가 요청을 허용하는지 확인한다.
- /api/data : 요청된 리소스 경로
- Host: example.com : 요청을 보내는 서버의 호스트
- Origin : 요청을 보낸 출처(클라이언트의 도메인)
- Access-Control-Request-Method: 실제 요청 HTTP 메서드
- Access-Control-Allow-Headers : 서버가 허용하는 요청 헤더
OPTIONS /api/data HTTP/1.1
Host: example.com
Origin: http://example-client.com
Access-Control-Request-Method: POST
Access-Control-Allow-Headers: Content-Type
7-2. 사전 요청에 대한 서버의 응답
사전 요청에 대한 서버의 응답 OPTIONS 메서드로 온 요청에 대하여 서버가 응답한다. OPTIONS 메서드의 요청에 대하여 서버가 응답한다.
- 204 No Content : 서버가 Preflight 요청을 성공적으로 처리했음을 의미한다. Prefligt 요청 특성상 본문에 포함할 데이터가 없다.
- Access-Control-Allow-Origin: 서버가 허용하는 출처
- Access-Control-Allow-Methods: 서버가 허용하는 HTTP 메서드
HTTP/1.1 204 No Content
Access-Control-Allow-Origin: http://example-client.com
Access-Control-Allow-Methods: POST, GET, OPTIONS
7-3. 실제 요청
Preflight 요청을 통해 얻은 응답으로부터 클라이언트의 출처가 허용되면 서버로 실제 요청을 보낸다.
POST /api/data HTTP/1.1
Host: example.com
Origin: http://example-client.com
X-Custom-Header: value
Content-Type: application/json
{ "key": "value" }
7-4. 실제 요청에 대한 서버의 응답
HTTP/1.1 200 OK
Content-Type: application/json
Access-Control-Allow-Origin: http://example-client.com
{
"response": "example response"
}