티스토리 뷰

BackEnd/JAVA

[Ch02] 3. POST 요청

JINSUKUKU 2021. 12. 10. 16:15

📕 제 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
댓글
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
최근에 올라온 글
글 보관함
Total
Today
Yesterday