스택큐힙리스트

HTTP에서 POST와 PUT의 차이점은 무엇인가요? 본문

카테고리 없음

HTTP에서 POST와 PUT의 차이점은 무엇인가요?

스택큐힙리스트 2023. 3. 19. 13:12
반응형

배경 정보 분석:

RFC 2616, § 9.5에 따르면, POST는 리소스를 생성하는 데 사용됩니다.

POST 방법은 Request-Line에서 식별된 자원의 새 하위로 요청에 포함된 엔티티를 원 서버가 수락하도록 요청하는 데 사용됩니다.

RFC 2616, § 9.6에 따르면, PUT는 자원을 생성하거나 대체하는 데 사용됩니다.

PUT 메소드는 제공된 요청 URI에 대해 포함된 개체가 저장되도록 요청합니다. 요청 URI가 이미 존재하는 리소스를 참조하는 경우, 포함된 개체는 기존 서버에 있는 버전의 수정된 버전으로 간주해야합니다. 요청 URI가 존재하지 않는 리소스를 가리키고 있으며 해당 URI가 요청하는 사용자 에이전트에 의해 새 리소스로 정의 될 수 있는 경우, 원래 서버는 해당 URI로 리소스를 만들 수 있습니다.

제 질문:

그럼 리소스를 생성하기 위해 사용해야 하는 HTTP 메소드는 무엇인가요? 아니면 둘 다 지원해야 하나요?

답변 1

전반적으로:

PUT와 POST는 둘 다 생성에 사용될 수 있습니다.

당신은 어떤 작업을 수행하는 대상은 무엇인가요? 라고 묻는 것이 필요합니다. 그렇게 하면 사용해야 할 것을 구분할 수 있습니다. 질문을 질문하는 API를 디자인하는 것으로 가정해 봅시다. POST를 사용하려면, 질문 목록에 적용하면 됩니다. PUT을 사용하려면, 특정 질문에 적용하면 됩니다.

좋아요, 둘 다 사용할 수 있으니까, RESTful 디자인에서는 어떤 것을 사용해야할까요?

PUT과 POST를 모두 지원할 필요는 없습니다.

사용하는 것은 당신의 선택이지만, 요청에서 참조하는 객체에 따라 올바른 것을 사용하는 것을 기억하세요.

일부 고려사항:

당신은 만드는 URL 개체에 이름을 명시적으로 지정하시나요, 아니면 서버가 결정하게 하시나요? 이름을 지정하면 PUT을 사용해주세요. 서버가 결정하게 한다면 POST를 사용해주세요.

PUT는 멱등성을 보장하도록 정의됩니다. 따라서 객체를 두 번 PUT하면 추가 효과가 없어야합니다. 이것은 좋은 특성입니다. 가능한 경우 PUT를 사용하십시오. 단, 서버에서 PUT-멱등성이 올바르게 구현되었는지 확인하십시오.

같은 객체 URL을 사용하여 PUT으로 리소스를 업데이트하거나 생성할 수 있습니다.

POST를 사용하면 URL을 수정하는 두 개의 요청이 동시에 발생할 수 있으며, 이들은 객체의 서로 다른 부분을 업데이트할 수 있습니다.

예시:

제가 다음을 another answer on SO regarding this의 일환으로 작성했습니다.

게시물:

자원을 수정하고 업데이트하는 데 사용됩니다.

POST /questions/ HTTP/1.1

Host: www.example.com/

다음은 오류이니 유의하세요:

POST /questions/ HTTP/1.1

Host: www.example.com/

URL이 아직 생성되지 않았다면 이름을 지정하면서 POST를 사용해서는 안됩니다. 이렇게하면 아직 존재하지 않기 때문에 '리소스를 찾을 수 없음' 오류가 발생해야 합니다. 먼저 서버에 리소스를 PUT해야 합니다.

POST를 사용하여 리소스를 생성하는 방법은 다음과 같습니다.

POST /questions HTTP/1.1

Host: www.example.com/

이 경우 리소스 이름이 지정되지 않았으므로, 새 객체의 URL 경로가 반환됩니다.

넣다:

리소스를 생성하거나 덮어씁니다. 새 리소스의 URL을 지정합니다.

새로운 자원에 대해:

PUT /questions/ HTTP/1.1

Host: www.example.com/

기존 자원을 덮어쓰려면:

PUT /questions/ HTTP/1.1

Host: www.example.com/

게다가, 좀 더 간결하게, RFC 7231 Section 4.3.4 PUT는 (강조 추가) 말합니다.

4.3.4. PUT

넣다.

PUT 방법은 대상 리소스의 상태가 요청 메시지 페이로드에 포함된 표현으로 정의된 상태 created 또는 replaced으로 업데이트되도록 요청합니다.

답변 2

POST와 PUT HTTP 차이점

HTTP (Hypertext Transfer Protocol)는 우리가 웹을 사용할 때 사용되는 표준 프로토콜입니다. 즉, 웹에서 정보를 보내고 받는 데 사용됩니다. 이에는 웹 페이지, 이미지, 동영상 등이 포함됩니다. POST와 PUT은 HTTP에서 사용되는 두 가지 메서드 중 두 가지입니다. 이러한 메서드의 차이점을 살펴보겠습니다.

POST 메서드는 서버의 리소스를 변경하지 않고 새 리소스를 만듭니다. POST는 새 리소스를 생성하기 위해 사용됩니다. 예를 들어, 사용자가 웹 사이트에서 새 게시물을 작성하는 경우, POST 요청을 사용하여 새 게시물을 만듭니다. POST는 요청 시에 데이터를 본문에 담아 보내기 때문에 일반적으로 더 보안적입니다. 즉, 데이터가 URL에서 노출되는 GET 요청과 달리, POST 요청은 데이터를 보안적으로 전송합니다.

반면, PUT 메서드는 서버의 리소스를 업데이트합니다. 존재하는 리소스를 수정하거나 새로운 내용을 추가합니다. PUT은 이미 존재하는 리소스를 업데이트하는 데 사용됩니다. 예를 들어, 사용자가 웹 사이트에서 게시물 수정을 요청하는 경우, PUT 요청을 사용하여 수정된 내용을 업데이트합니다.

PUT 요청은 HTTP body에서 수정된 데이터를 전송합니다. 이는 POST 요청과 유사합니다. 그러나 PUT은 리소스의 고유 식별자를 URL의 일부로 보내야 하므로 매우 특별합니다. 즉, PUT 요청은 리소스의 위치를 구분하고 수정하는 데 사용됩니다.

요약하면, POST와 PUT은 HTTP에서 사용되는 두 가지 메서드로, POST는 새로운 리소스를 만들기 위해 사용되고 PUT은 서버의 존재하는 리소스를 수정하는 데 사용됩니다. PUT 요청은 HTTP 본문에 데이터를 포함하며, 리소스 식별자가 URL에 포함됩니다.

따라서, 적절한 HTTP 메서드를 선택하여 데이터를 보내는 것이 매우 중요합니다. 이를 통해 데이터가 보안적으로 안전하게 전송되며, 서버에서 수행해야 할 작업을 쉽게 식별할 수 있습니다.

반응형
Comments