ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [네트워크] HTTP 메서드 종류, GET POST PUT PATCH DELETE HEAD OPTIONS
    legacy/Network 2024. 5. 25. 10:48

    1. 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"
    }
Designed by Tistory.