티스토리 뷰
📕 제 2장 웹 프로그래밍 기초 다지기
2.3 POST 요청
- <form> 태그의 method 속성을 post로 지정하여 사용한다
- URL에 데이터가 포함되지 않아 외부에 노출되는 위험을 방지한다
- 메시지 본문에 데이터가 포함되므로, 실행 결과의 공유가 불가능하다
- 바이너리 및 대용량 데이터의 전송이 가능하다
POST 요청의 HTTP 프로토콜 확인
POST /web01/LoginServlet HTTP/1.1 # 요청 라인
Host: localhost:9999
Content-Length: 22 # Content-Length 헤더
...
Content-Type: application/x-www-form-urlencoded # Content-Type 헤더
...
# 공백 라인
id=tiger&password=llll # Message-Body
- 첫 번째 요청 라인을 통해 메서드 값이 'POST'로 지정되어 있음을 확인할 수 있다
- 보내는 데이터의 길이를 알려주는 Content-length 헤더 : 22
- 보내는 데이터의 형식을 알려주는 Content-Type 헤더 : application/x-www-form-urlencoded
→ <form> 태그의 입력값은 기본적으로 application/x-www-form-urlencoded 형식으로 인코딩 되어 전송된다
- 서버에 보내는 데이터는 공백 라인 다음에 메시지 본문(Message-Body)에 위치한다
- GET 요청은 데이터가 URL에 포함되므로, 메시지 본문(Message-Body)을 사용하지 않는다
POST 요청의 장단점
장점 : 사용자의 입력값이 URL에 포함되지 않기 때문에 외부에 노출되지 않는다
단점 : 데이터를 URL에 포함하지 않기 때문에 URL만으로 결과 화면에 접근할 수 없다
문제점과 개선방안
- POST방식 역시 key, value의 형태로 데이터를 전달한다
- 문자 데이터를 보낼 때에는 문제가 없지만, 이미지나 동영상과 같은 바이너리 데이터를 전송할 때는 문제가 발생한다
- 바이너리 데이터 안에 = 이나 & 와 같은 문자 코드가 포함되기도 하기 때문이다
- 서버는 & 문자로 매개변수를 구분하고, = 문자로 매개변수의 이름과 값을 분리하므로
- 바이너리 데이터에 이러한 문자코드가 포함되어 있다면 해석에 오류가 있을 수 있다
- 이러한 문제를 해결하기 위해서는 바이너리 데이터를 보낼 때는 다른 형식으로 작성해 보내주어야 한다
'BackEnd > JAVA' 카테고리의 다른 글
[Ch02] 5. 정리 (0) | 2021.12.10 |
---|---|
[Ch02] 4. 파일 업로드 (0) | 2021.12.10 |
[Ch02] 2. GET 요청 (0) | 2021.12.10 |
[Ch02] 1-5. HTTP 클라이언트 만들기 (0) | 2021.12.10 |
[Ch02] 1-4. HTTP 응답 (0) | 2021.12.10 |