[Network] HTTP 메서드 데이터 전송 방법

hi·2022년 8월 26일
0

클라이언트 👉 서버

데이터 전달 방식은 크게 두가지로 나뉜다

  1. 쿼리 파라미터 사용 - GET
  2. 메시지 바디 사용 - POST, PUT, PATCH

🔎 여러 상황별 데이터 전송 방법

1. 정적 데이터 조회 (GET)

  • 이미지, 정적 텍스트 문서
  • 추가적인 데이터 전송이 없음
  • 쿼리 파라미터 없이 리소스 경로로 단순하게 조회

2. 동적 데이터 조회 (GET)

  • 주로 검색, 정렬 필터
  • 쿼리 파라미터를 기반으로 정렬 필터하여 결과 동적으로 생성

💡 GET도 쿼리 파라미터 대신 메시지 바디를 사용할 수 있지만, 지원하지 않는 서버가 많아 권장 X

3. HTML Form 데이터 전송 (GET, POST)

1. POST - 저장

POST /action HTTP/1.1
HOST: localhost:8080
Content-Type: application/x-www-form-urlencoded 👈

username=kim&age=20 👈
  • Content-Type: application/x-www-form-urlencoded 사용

    • POST 방식만 사용 , form의 경우 application/x-www-form-urlencoded
    • Form 내용을 메시지 바디를 통해 전송 (key=value, 쿼리 파라미터 형식)
    • 전송 데이터 url encoding 처리

🔎 GET 방식으로 전송하게 되면?
GET은 메시지 바디를 사용하지 않아 쿼리 파라미터로 전달됨
but, 저장시엔 사용하지 말자

🔎 GET / POST 구분 이유?
설계 원칙을 지키기 위해, 규칙을 지키지 않을 경우의 혼선을 생각


2. 파일 형식 전송

<form action="" method="" enctype="multipart/form-data">

👇 요청 메시지

POST /action HTTP/1.1
HOST: localhost:8080
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="intro.png"
Content-Type: image/Png

109293208aOpdfk34u.....
------XXX--
  • Content-Type: multipart/form-data;

    • 파일 업로드 같은 바이너리 데이터 전송시 사용
    • 다른 종류의 여러 파일과 폼 내용 함께 전송 가능 (multipart)
  • html form 전송은 GET, POST만 지원


4. HTTP API 전송

HTML Form을 사용하지 않는 거의 모든 상황

  • 서버 to 서버
    • 백엔드 시스템 통신
  • 앱 클라이언트

    • 아이폰, 안드로이드
  • 웹 클라이언트

    • HTML 에서 Form 전송 대신 JS를 통한 통신에 사용 (AJAX)
    • ex) React, Vue.Js 같은 웹 클라이언트와 API 통신
  • POST, PUT, PATCH : 메시지 바디를 통해 데이터 전송

  • GET : 조회, 쿼리 파라미터로 데이터 전달

  • Content-Type: appliation/json을 주로 사용 (사실상 표준)

    • TEXT, XML, JSON 등

0개의 댓글