클라에서 서버로 데이터를 전송하는 방식 2가지
방식1) 쿼리 파라미터를 통한 데이터 전송 (?
로 시작한 쿼리문)
방식2) HTTP 메시지 바디를 통한 데이터 전송
클라에서 서버로 데이터를 전송하는 상황 4가지
정적 데이터 : 이미지, 정적 데이터 문서
클라이언트가 서버에 GET 메소드를 이용해서 요청 메시지를 보내면 서버가 해당 이미지 리소스를 전달해주는것
위의 경우 요청시에 경로(URI)만을 지정해줬으므로, 서버에서는 경로로 온것만 확인하고 해당 리소스를 데이터 바디에 담아서 응답 메시지로 전달해준다
정리
q=?hello&hl=ko
부분이 쿼리 파라미터이다
해당 쿼리를 서버가 받으면 해당 쿼리를 key-value로 꺼낼수가 있다
그럼 쿼리로 hello
가 왔다는것을 알고 이를 찾아서 응답 메시지로 전달해 준다
정리
html상에서 Form을 사용해서 입력박스를 만들고 웹에서 해당 Form을 통해 값을 입력받는 구조가 있다
action="/save" method="post"
/save에 값이 전달되면 저장이 된다고 가정을 하자
type="text" name="username"
type="text" name="age"
위의 username과 age의 이름이 From의 박스의 이름과 같고 해당 이름으로 입력된 값으로 들어온다
그렇게 값이 들어오고 전송을 누르게 되면 웹브라우저가 HTTP 요청 메시지
를 생성해준다
생성된 HTTP 요청 메시지의 모습
POST /save HTTP/1.1
Host: localhost:8080
Content-Type: application/x-www.form-urlencoded
username=kim&age=20 //query문과 매우 유사한 내용을 body에 넣어줬다 (post이므로)
위와 동일하게 Form을 통해서 HTTP 요청 메시지
를 웹브라우저가 생성했지만, Post대신 Get메소드를 Form박스에서 사용한 모습이다
이런 경우 전달받은 값을 HTTP 요청 메시지의 body가 아닌 Query문으로 변환해서 알아서 넣어준다
물론, Method도 Post가 아닌 GET으로 변경해서 적용한다. 하지만 전달받는 대상이 action/save
이므로 조회가 불가능 해서 정상적인 진행은 되지 않는다
따라서 action/members
등으로 조회가 가능한 곳으로 보내주면 정상적으로 처리가 될 것이다
결론적으로 FORM에서 GET/POST의 사용에 맞춰서 웹브라우저는 알아서 HTTP 요청 메시지
의 구성을 쿼리/BODY 등으로 맞춰서 해준다
이미지 등의 파일을 같이 보낼 사용하는 메서드로 html body에 해당 파일 데이터를 넣어서 보내는 형식을 사용해야 되는데 이때 사용하는 것이 multipart/form-data
형식이다
<form action="/save" method="post" enctype="multipart/form-data">
위와 같은 form을 통해 웹브라우저가 요청 HTTP 메시지를 만들게 된다
그림과 같이 Content-Type으로 multipart/form-data가 들어가고 boundary가 추가된 모습이다
boundary(----XXX
)를 통해 username, age, file등을 구분지어서 보내게 되는데 이런 모습처럼 말그대로 멀티파트를 가지는 data를 보내는 FORM인 것이다
정리
HTML Form submit시 POST 전송
Content-Type : application/x-www-form-urlencoded 사용
HTML From은 GET 전송도 가능하다
Content-Type : multipart/form-data
HTML Form 전송은 GET, POST만 지원한다
안드로이드/ios와 같은 애플리케이션에서 클라이언트에서 서버로 데이터를 바로 전송하는 경우 등과 같다
바로 데이터를 위와 같은 형식으로 만들어서 (주로 라이브러리가 대부분 제공되므로 해당 라이브러리를 이용해서 만든다) 데이터를 전달하면 된다
정리
서버 - 서버
앱 클라이언트
웹 클라이언트
POST, PUT, PATCH : 메시지 바디를 통해 데이터를 전송한다
GET : 조회, 쿼리 파라미터로 데이터 전달
Content-Type : application/json을 주로 사용(거의 표준)