HTTP 메소드

  • 종류

GET

  • 요청이 캐시된다.
  • 브라우저, 로봇이 임의로 요청이 가능하다.

Conditional GET

  • 클라이언트는 이전에 한번 요청해서 돌려받은 리소스에 대해 다시한번 요청을 할 때, 불필요한 트래픽을 줄이기 위해, 해당 리소스가 변경된 경우에만 다시 보내달라고 요청할 수 있다.

  • 이러한 방법때문에 실제로 웹브라우저를 사용할 때, 모든 요청이 서버로 들어가지 않는 경우가 더 많다.

  • 언제 사용할까? - 클라이언트가 어떤 웹 페이지 접근 후, 다시 같은 페이지 접근했을 때, 서버가 그 페이지의 모든 내용을 다시 전송하는 것은 낭비이지 않나? - 웹 페이지의 내용 변경이 없다면, 페이지 내용 전송은 필요없지 않을까? - 이런 것을 가능하게 한다면 무엇을 기억해두어야 할까? - 언제 마지막으로 해당 리소스를 요청해서 받았는지 (Timestamp) - 해당 페이지의 유효시간

    • 어떤 리소스에 활용하면 좋을까? - 이미지, js, css - Timestamp, validtime 함께
      • HTML (X)
        • 조금만 변경되도 다른 자원을 받도록 되는 경우가 많기 때문
      • User 정보에 따라 달라지는 경우
        • 애매함

    문법

  • Last-Modified: HTTP-Date - 응답 헤더 - Last-Modified는 Date보다 이후여서는 안된다(Must Not) - 미래에서 리소스가 올 수는 없으니까

  • expires

  • age

  • cache-control

  • If-Modified-Since: HTTP-Date - 요청 헤더 - 만약 해당 Date보다 Modified가 이후라면 (해당 요청시점이후에 수정되었다면) - 200 OK - 그렇지 않다면 - 304 Not Modified - Body가 없다.

    • Etag
      • 자원의 수정이 가해졌는지 확인할 수 있는 문자열
      • Weak eTag (W/”syzzy”)
        • 리소스에 의미있는 수준의 변화가 없다면 바뀌지 않을 수 있음
      • String eTag (“xyzzy”)
        • 리소스가 조금이라도 변하면 바뀌어야 한다.
      • 문법
        • 요청 헤더
          • If-None-Match: a6f305a
        • 응답 헤더
          • ETag: a8g943l

    POST

  • 생성

  • 생성작업을 GET으로 보낼 경우, 사용자 데이터와 같은 중요한 정보가 캐시되고 (보안적으로 나쁨), 로봇의 임의 요청이 가능하기 때문에 좋지 않다.

    PUT

  • POST와의 차이 - 리소스의 위치를 알고 있을 때 사용

  • 생성하거나, 대체(전체) 할 때 사용

  • 전체 업데이트

PATCH

  • 리소스의 위치를 알고 있을 때 사용
  • 부분적인 업데이트

DELETE

  • 리소스 삭제 요청

OPTIONS

  • 어떠한 리소스를 대상으로 어떤 동작을 할 수 있는지 던져볼 때 사용
  • Allow라는 header로 OPTIONS, GET, HEAD 이런식으로 알려줌
  • Body는 없고 HEAD만 오는 요청

TRACE

  • 해당 리소스를 가기 위해 어떤 프록시를 타고 갔는지 보여줌

CONNECT

  • SSL 터널링 등 특수 용도에 사용하는 메소드

Attributes

  • 멱등성
    • 여러번 요청해도 효과는 한번 요청한 것과 같음
  • 안전성
    • 여러번 요청 걸어도 결과가 같기 때문
    • GET, HEAD와 같은 메서드는 리소스에 영향을 주지 않기 때문에 안전
    • 그렇지 않은 메서드 같은 경우 Non Safe Method

Summary

Method안전성멱급성특징
GETOO
POSTXX생성이기 때문에 멱급성을 만족하기 못함
PUTXO정보를 바꾸는 것 가능, 그렇지만 전체를 보내야 함, 전체를 항상 업데이트 하기 때문에 멱급성 만족
PATCHXX서버 리소스를 수정, 리소스의 내용이 어떠냐에 따라 부분적 결과만 바뀌기 때문에 항상 같은 결과를 기대할 수 없음
HEADGET 요청시 어떤 헤더들을 받는지 알려줌 (GET과 같으나 본문 없음)
TRACE요청이 서버에 들렀다가 응답 반환까지 거치는 프록시를 알려줌
OPTIONS특정 URL에 대한 옵션들을 알려줌, 사용가능한 메소드 반환
DELETEXO서버의 리소스를 삭제, 같은 리소스가 있을 수 없기 때문에 멱급성 만족