HTTP 메소드
- 종류
GET
- 요청이 캐시된다.
- 브라우저, 로봇이 임의로 요청이 가능하다.
Conditional GET
-
클라이언트는 이전에 한번 요청해서 돌려받은 리소스에 대해 다시한번 요청을 할 때, 불필요한 트래픽을 줄이기 위해, 해당 리소스가 변경된 경우에만 다시 보내달라고 요청할 수 있다.
-
이러한 방법때문에 실제로 웹브라우저를 사용할 때, 모든 요청이 서버로 들어가지 않는 경우가 더 많다.
-
언제 사용할까? - 클라이언트가 어떤 웹 페이지 접근 후, 다시 같은 페이지 접근했을 때, 서버가 그 페이지의 모든 내용을 다시 전송하는 것은 낭비이지 않나? - 웹 페이지의 내용 변경이 없다면, 페이지 내용 전송은 필요없지 않을까? - 이런 것을 가능하게 한다면 무엇을 기억해두어야 할까? - 언제 마지막으로 해당 리소스를 요청해서 받았는지 (Timestamp) - 해당 페이지의 유효시간
- 어떤 리소스에 활용하면 좋을까?
- 이미지, js, css
- Timestamp, validtime 함께
- HTML (X)
- 조금만 변경되도 다른 자원을 받도록 되는 경우가 많기 때문
- User 정보에 따라 달라지는 경우
- 애매함
- HTML (X)
문법
- 어떤 리소스에 활용하면 좋을까?
- 이미지, js, css
- Timestamp, validtime 함께
-
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 이런식으로 알려줌
HEAD
- Body는 없고 HEAD만 오는 요청
TRACE
- 해당 리소스를 가기 위해 어떤 프록시를 타고 갔는지 보여줌
CONNECT
- SSL 터널링 등 특수 용도에 사용하는 메소드
Attributes
- 멱등성
- 여러번 요청해도 효과는 한번 요청한 것과 같음
- 안전성
- 여러번 요청 걸어도 결과가 같기 때문
- GET, HEAD와 같은 메서드는 리소스에 영향을 주지 않기 때문에 안전
- 그렇지 않은 메서드 같은 경우 Non Safe Method
Summary
| Method | 안전성 | 멱급성 | 특징 |
|---|---|---|---|
| GET | O | O | |
| POST | X | X | 생성이기 때문에 멱급성을 만족하기 못함 |
| PUT | X | O | 정보를 바꾸는 것 가능, 그렇지만 전체를 보내야 함, 전체를 항상 업데이트 하기 때문에 멱급성 만족 |
| PATCH | X | X | 서버 리소스를 수정, 리소스의 내용이 어떠냐에 따라 부분적 결과만 바뀌기 때문에 항상 같은 결과를 기대할 수 없음 |
| HEAD | GET 요청시 어떤 헤더들을 받는지 알려줌 (GET과 같으나 본문 없음) | ||
| TRACE | 요청이 서버에 들렀다가 응답 반환까지 거치는 프록시를 알려줌 | ||
| OPTIONS | 특정 URL에 대한 옵션들을 알려줌, 사용가능한 메소드 반환 | ||
| DELETE | X | O | 서버의 리소스를 삭제, 같은 리소스가 있을 수 없기 때문에 멱급성 만족 |