Server/HTTP

[HTTP] HTTP 메서드 활용 - 클라이언트에서 서버로 데이터 전송

개발자킹콩 2022. 8. 11. 23:09

 

 

 


 

 

/static/star.jpg 에 요청을 하게 되면 별 이미지를 내려준다. 이 경우는 클라이언트 요청 메세지의 header에 path만 지정하고 query parameter를 사용하지 않아도 된다.

 

 


 

조회를 할때 데이터를 전달하는 경우가 존재하며, 동적 데이터를 조회하는 경우이다.

예를 들어, 검색 조회의 경우 검색어를 query parameter로 보내게 된다.

 

 

 


 

Form tag를 하용하고 /save 로 post 메소드를 사용하면 저장이 된다고 하자.

submit type의 버튼을 누르게 되면 웹 브라우저는 form의 데이터를 읽어서 오른쪽 그림과 같이 HTTP 메세지를 생성하고 해당 HTTP 메세지를 packet으로 만들어서 인터넷 망으로 던지게 된다.

여기서, Content-Type을 application/x-www-form-urlencoded 으로 정하게 되고 된다.

Body의 데이터는 query parameter와 유사한 형태로 데이터를 만들게 된다.

 

 

form의 메서드를 GET으로 바꾸게 되고 submit type button을 누르게 되면 똑같이 GET요청인 HTTP 메세지를 만들게 되고 인터넷 망으로 던지게 된다.

여기서, GET이기 때문에 데이터를 Body에 넣지 않고 query parameter로 넣어서 메세지를 만든다.

하지만, 정책상 save action에 사용하는 것이기 때문에 GET이 아닌 POST를 사용하길 권장한다.

오른쪽과 같이 조회의 경우에만 form method를 GET으로 지정하자.

 

 

 

추가로 HTML Form 데이터 전송에서 파일을 전송할 때 사용하는 content-type이 존재한다.

 

 

  • 파일은 보통 binary 형식으로 되어 있다. 
  • HTML Form으로 데이터를 전송하면 Default로 Content-Type을 application/x-www-form-urlencoded 지정하게 된다. 그런데 파일과 같은 데이터가 포함되면 Content-Type가 multipart/form-data로 지정된다.
  • 웹브라우저는 뒤에 나오는 boundary(경계)의 -----XXX 로 데이터를 잘라서 POST 메서드에 맞게 body에 데이터를 넣게되고 packet으로 만들어 인터넷 망으로 던지는 것이다.
  • key-value는 개행을 통해 데이터를 구분한다.
  • 데이터가 끝나는 부분에서는 -----XXX-- 로 마무리 한다.
  • multipart를 통해 여러 형식의 데이터를 한번에 보낼 수 있게 된다. 그리고 보통 binary 데이터를 보낼때 사용한다.

 

 

 

 

웹 말고 앱은 어떻게 하는가?

안드로이드나 아이폰 같은 경우 클라이언트에서 서버로 데이터를 바로 전송해야 한다.

이런 경우, HTTP API 로 데이터를 전송한다고 표현한다. (HTML Form을 쓰지않는 거의 모든 상황을 말함)

이런 경우 HTTP 메세지를 직접 구현해야 하며, 보통 클라이언트 라이브러리가 존재한다.

JSON 형식 데이터를 Body에 넣고 Content-Type을 application/json 으로 지정하면 된다.

 

 

예전에는 XML을 사용했으나 읽기 쉽지 않고 데이터도 여는태그 닫는태그를 사용해 복잡하다.

그래서 심플하고 이해하기 쉽고 데이터 크기고 상대적으로 작은 JSON을 표준으로 사용하고 있다.

그래서 HTTP API의 경우 JSON 데이터 형식을 사용하면 된다.

 

 

 


 

 

 

 

 

 

 

 

 

 

 

 

'Server > HTTP' 카테고리의 다른 글

[HTTP] HTTP 메서드 활용 - HTTP API 설계 예시  (0) 2022.08.12
[HTTP] HTTP Method  (0) 2022.08.11
[HTTP] HTTP 기본  (0) 2022.08.10
[HTTP] URI와 웹 브라우저 요청 흐름  (0) 2022.08.10
[HTTP] 인터넷 네트워크  (0) 2022.08.10