클라이언트가 서버에게 무언가를 요청할 때 기대하는 행동이다.
GET /posts/{ID}?q=tim&hl=ko
POST /posts
{
"post": "name"
}
PUT /posts/100
{
"post" : "name"
}
PATCH /posts/100
{
"post" : "name"
}
DELETE /posts/
호출해도 리소스가 변경되지 않음
계속 호출해도 결과가 같아야한다.
멱등 메서드:
POST는 멱등이 아니다. 두 번 호출시 문제가 발생할 수 있음(중복 결제)
멱등은 외부 요인으로 중간에 리소스가 변경되는 것 까지 고려하지 않는다.
실제로는 GET, HEAD정도만 캐시로 사용
POST, PATCH는 본문 내용까지 캐시 키로 고려해야하므로 구현이 쉽지 않음
이미지, 정적 텍스트 문서 조회는 GET을 사용한다.
정적 데이터는 쿼리 파라미터 없이 리소스 경로로 조회
Client
GET /board/lion.jpg
Server
HTTP/1.1 200 OK
pqeopwfkqwpoefkqpowefkqpwfk
qpwokfqpwefkqpwoefkqwpofek
검색, 게시판 목록에서 정렬 필터 조회 시 GET을 사용한다.
조회 조건을 줄여주는 필터, 조회 결과를 정렬하는 정렬 조건에 주로 사용
GET은 쿼리 파라미터를 사용해서 데이터를 전달
쿼리 파리미터를 기반으로 결과를 동적으로 생성
POST 전송 - 저장
<from action="/save" method="post">
<input type="text" name="username" />
<input type="text" name="age" />
<button type="submit">전송</button>
</form>
Form 태그에 작성 시 웹브라우저가 HTTP 메시지를 생성해준다.
POST /save HTTP/1.1
HOST: localhost:3000
Content-Type: application/x-www-form-urlencoded
username=kim&age=30
multipart/form-data
<from action="/save" method="post" enctype="multipart/form-data">
<input type="text" name="username" />
<input type="text" name="age" />
<input type="file" name="file1" />
<button type="submit">전송</button>
</form>
POST /save HTTP/1.1
Host: localhost:3000
Content-Type: multipart/form-data; boundary=---XXX
Content-Length:10457
---XXX
Content-Disposition: form-data; name="username"
kim
---XXX
Content-Disposition: form-data; name="age"
20
---XXX
Content-Disposition: form-data; name="file1"; filename="temp.png"
Content-Type: image/png
13pokf23pof2p3o4kf23fn2p3oifn...
-----XXX--
Client가 모두 작성해주면 된다.