๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Web

HTTP GET ๋ฉ”์†Œ๋“œ์™€ POST ๋ฉ”์†Œ๋“œ์˜ ๋น„๊ต

by Leica 2020. 2. 3.
๋ฐ˜์‘ํ˜•

HTTP ์š”์ฒญ ๋ฉ”์†Œ๋“œ๋Š” ์š”์ฒญ ์ž์›์— ๋Œ€ํ•ด ์›น ์„œ๋ฒ„์—๊ฒŒ ๋‚ด๋ฆฌ๋Š” ๋ช…๋ น์ด๋‹ค. ๋ฉ”์†Œ๋“œ์—๋Š” GET, POST, HEAD, PUT, DELETE, TRACE, CONNECT, OPTIONS ๋“ฑ์ด ์žˆ๋‹ค.

 

1. GET ๋ฉ”์†Œ๋“œ

GET ์š”์ฒญ์˜ ํŠน์ง•

  1. URL์— ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์กฐํšŒ์— ์ ํ•ฉํ•˜๋‹ค.
  2. ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ „์†ก์ด ๋ถˆ๊ฐ€ํ•˜๋‹ค.
  3. ์š”์ฒญ ๋ผ์ธ๊ณผ ์š”์ฒญ ํ—ค๋”์— ์ตœ๋Œ€ ํฌ๊ธฐ ์ œํ•œ์ด ์žˆ๋‹ค.
    • ๋Œ€์šฉ๋Ÿ‰ URL๋กœ ์ธํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ๋•Œ๋ฌธ์— ์›น ์„œ๋ฒ„์— ๋”ฐ๋ผ ์ตœ๋Œ€ ํฌ๊ธฐ๋ฅผ ์ œํ•œํ•œ๋‹ค.

 

GET ์š”์ฒญ์˜ ์ข…๋ฅ˜

  1. ์›น ๋ธŒ๋ผ์šฐ์ € ์ฃผ์†Œ์ฐฝ์— URL์„ ์ž…๋ ฅํ•˜๋Š” ๊ฒฝ์šฐ
  2. ๋งํฌ๋ฅผ ํด๋ฆญํ•˜๋Š” ๊ฒฝ์šฐ
  3. ์ž…๋ ฅ ํผ์˜ method ์†์„ฑ๊ฐ’์ด get์ธ ๊ฒฝ์šฐ

 

GET ์š”์ฒญ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ธ์ฝ”๋”ฉ

์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์˜ URI ์ธ์ฝ”๋”ฉ ์„ค์ •

 

GET ์š”์ฒญ 1 - ์›น ๋ธŒ๋ผ์šฐ์ € ์ฃผ์†Œ์ฐฝ์— URL์„ ์ž…๋ ฅํ•˜๋Š” ๊ฒฝ์šฐ

์›น ๋ธŒ๋ผ์šฐ์ € ์ฃผ์†Œ์ฐฝ์— URL์„ ์ž…๋ ฅํ•˜์—ฌ ์„œ๋ฒ„์˜ ์ž์›์„ ์š”์ฒญํ•˜๋Š” ๊ฒฝ์šฐ GET ์š”์ฒญ์ด ๋ฐœ์ƒํ•œ๋‹ค.

์ฃผ์†Œ์ฐฝ์— daum.net์„ ์ž…๋ ฅํ•˜๋ฉด ์š”์ฒญ ๋ผ์ธ์€ 'GET http://www.daum.net/ HTTP/1.1'์™€ ๊ฐ™๋‹ค.

 

GET ์š”์ฒญ 2 - ๋งํฌ๋ฅผ ํด๋ฆญํ•˜๋Š” ๊ฒฝ์šฐ

HTML์˜ <a> ํƒœ๊ทธ๋Š” GET ์š”์ฒญ์„ ๋งŒ๋“ค๊ธฐ ๋•Œ๋ฌธ์— ๋งํฌ๋ฅผ ํด๋ฆญํ•  ๋•Œ GET์œผ๋กœ ์š”์ฒญํ•œ๋‹ค.

 

GET ์š”์ฒญ 3 - ์ž…๋ ฅ ํผ์˜ method ์†์„ฑ๊ฐ’์ด get์ธ ๊ฒฝ์šฐ

์ž…๋ ฅ ํผ์˜ method ์†์„ฑ๊ฐ’์ด 'get'์ธ ๊ฒฝ์šฐ, ์„œ๋ฒ„์— GET ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.

 

<form action="SomeServlet" method="get">
	<!-- ... -->
</form> 

 

method ์†์„ฑ๊ฐ’์˜ ๊ธฐ๋ณธ๊ฐ’์ด get์ด๊ธฐ ๋•Œ๋ฌธ์— GET์œผ๋กœ ์š”์ฒญํ•  ๊ฒฝ์šฐ ์ƒ๋žตํ•ด๋„ ๋œ๋‹ค.

 

GET ์š”์ฒญ์˜ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ ํ˜•์‹

GET์œผ๋กœ ์š”์ฒญํ•˜๋Š” ๊ฒฝ์šฐ ์„œ๋ฒ„์— ๋ณด๋‚ผ ๋ฐ์ดํ„ฐ๋Š” URI์— ๋ถ™์ธ๋‹ค.

 

์˜ˆ : http://localhost:8080/web02/CalculatorServlet?v1=1&op=%2B&v2=1

? : URI์™€ ๋ณด๋‚ผ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ๋ถ„

& : ๋ฐ์ดํ„ฐ๋“ค์„ ๊ตฌ๋ถ„

= : ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„๊ณผ ๊ฐ’์„ ๊ตฌ๋ถ„

 

GET์˜ ์‚ฌ์šฉ

- ์ž๋ฃŒ ๊ฒ€์ƒ‰

- ๊ฒŒ์‹œ๊ธ€ ์กฐํšŒ

- ํŠน์ • ์ƒํ’ˆ์˜ ์ •๋ณด ์กฐํšŒ

์™€ ๊ฐ™์ด ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” ๊ฒฝ์šฐ์— ์ ํ•ฉํ•˜๋‹ค.

 

URL์— ๊ฒ€์ƒ‰์–ด๋‚˜ ๊ฒŒ์‹œ๊ธ€ ๋ฒˆํ˜ธ, ์ƒํ’ˆ ๋ฒˆํ˜ธ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์ผ์ด๋‚˜ ๋ฉ”์‹œ์ง€๋ฅผ ํ†ตํ•ด ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ ์ „๋‹ฌํ•˜๊ธฐ ์‰ฝ๋‹ค. ๋˜ํ•œ '์ฆ๊ฒจ์ฐพ๊ธฐ'์— ์ €์žฅํ•ด๋‘์–ด ์–ธ์ œ๋“ ์ง€ ํ•ด๋‹น ํŽ˜์ด์ง€๋กœ ๋ฐ”๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

 

GET ์š”์ฒญ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ธ์ฝ”๋”ฉ

GET ์š”์ฒญ์€ ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’์ด URI์— ํฌํ•จ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์˜ ์ง€์นจ์— ๋”ฐ๋ผ URI์˜ ์ธ์ฝ”๋”ฉ์„ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค.

ํ†ฐ์บฃ ์„œ๋ฒ„์—์„œ URI ์ธ์ฝ”๋”ฉ์„ ์„ค์ •ํ•˜๋ ค๋ฉด server.xml์„ ์—ด๊ณ  <Connector>์— URIEncoding="UTF-8"์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

 

server.xml

 

GET์˜ ๋ฌธ์ œ์ ๊ณผ ๊ฐœ์„ ๋ฐฉ์•ˆ

1. ๋ณด์•ˆ ๋ฌธ์ œ

GET ์š”์ฒญ์€ ์ฃผ์†Œ์ฐฝ์— ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ์ •๋ณด๊ฐ€ ๊ทธ๋Œ€๋กœ ๋…ธ์ถœ๋œ๋‹ค.

 

2. ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ ์ „์†ก ๋ถˆ๊ฐ€

๋‹น์—ฐํžˆ ์ด๋ฏธ์ง€, ๋™์˜์ƒ๊ฐ™์€ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ์˜ ๋ฐ์ดํ„ฐ๋Š” URL์— ๋ถ™์—ฌ์„œ ๋ณด๋‚ผ ์ˆ˜ ์—†๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ์ธ์ฝ”๋”ฉํ•ด๋„ URI๋‚˜ ํ—ค๋” ์ •๋ณด๊ฐ€ ๋„ˆ๋ฌด ํฌ๋ฉด ์›น ์„œ๋ฒ„์—์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

 

์ด์™€ ๊ฐ™์€ ๋ฌธ์ œ๋Š” POST ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

2. POST ๋ฉ”์†Œ๋“œ

POST ์š”์ฒญ์˜ ํŠน์ง•

  1. URL์— ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋˜์ง€ ์•Š์•„ ์™ธ๋ถ€์— ๋…ธ์ถœ๋˜์ง€ ์•Š๋Š”๋‹ค.
  2. ๋ฉ”์‹œ์ง€ ๋ณธ๋ฌธ์— ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•œ๋‹ค.
  3. ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ „์†ก์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

POST ์š”์ฒญ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ธ์ฝ”๋”ฉ

ServletRequest.setCharacterEncoding() ์‚ฌ์šฉ

 

POST ๋ฐฉ์‹์œผ๋กœ ์ „๋‹ฌํ•˜๋ ค๋ฉด <form> ํƒœ๊ทธ์˜ method ์†์„ฑ์„ 'post'๋กœ ์ง€์ •ํ•œ๋‹ค.

 

<form action="SomeServlet" method="post">
	<!-- ... -->
</form> 

 

POST ์š”์ฒญ์˜ HTTP ์š”์ฒญ ์ •๋ณด ์˜ˆ


POST http://localhost:8080/web02/LoginServlet HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Content-Length: 24
Cache-Control: max-age=0
Origin: http://localhost:8080
Upgrade-Insecure-Requests: 1
Content-Typeapplication/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36
Sec-Fetch-User: ?1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: navigate
Referer: http://localhost:8080/web02/PostTest.html
Accept-Encoding: gzip, deflate, br
Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7

id=abc123&password=1234*


 

์ฒซ ๋ฒˆ์งธ ์š”์ฒญ ๋ผ์ธ์˜ ๋ฉ”์†Œ๋“œ๊ฐ€ 'POST'๋กœ ์ง€์ •๋˜์–ด ์žˆ๋‹ค.

๋ณด๋‚ด๋Š” ๋ฐ์ดํ„ฐ์˜ ๊ธธ์ด๋ฅผ ์•Œ๋ ค์ฃผ๋Š” Content-Length ํ—ค๋”์™€ ๋ณด๋‚ด๋Š” ๋ฐ์ดํ„ฐ์˜ ํ˜•์‹์„ ์•Œ๋ ค์ฃผ๋Š” Content-Type ํ—ค๋”๊ฐ€ ๋ถ™๋Š”๋‹ค. <form> ํƒœ๊ทธ์˜ ์ž…๋ ฅ๊ฐ’์€ ๊ธฐ๋ณธ์ ์œผ๋กœ application/x-www-form-urlencoded ํ˜•์‹์œผ๋กœ ๋ณด๋‚ด์ง„๋‹ค.

์„œ๋ฒ„์— ๋ณด๋‚ด๋Š” ๋ฐ์ดํ„ฐ๋Š” ๊ณต๋ฐฑ ๋ผ์ธ ๋‹ค์Œ์˜ Message Body์— ์œ„์น˜ํ•œ๋‹ค. (id=abc123&password=1234*)

GET ์š”์ฒญ์€ ๋ฐ์ดํ„ฐ๊ฐ€ URL์— ํฌํ•จ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ถ€๋ถ„์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

POST ์š”์ฒญ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ธ์ฝ”๋”ฉ

ServletRequest ๊ฐ์ฒด์˜ setCharacterEncoding()์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

setCharacterEncoding()์˜ ์˜ˆ

ServletRequest.setCharacterEncoding() :
POST ์š”์ฒญ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๋ฌธ์ž ์ง‘ํ•ฉ์„ ์„ค์ •ํ•œ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ ISO-8859-1์ด๋‹ค.
getParameter()๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „์— ์ด ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค.

 

POST์˜ ๋ฌธ์ œ์ ๊ณผ ๊ฐœ์„ ๋ฐฉ์•ˆ

GET ๋ฉ”์†Œ๋“œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ POST๋„ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ๋•Œ '์ด๋ฆ„=๊ฐ’&์ด๋ฆ„=๊ฐ’' ํ˜•ํƒœ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๋ฌธ์ž ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ๋•Œ๋Š” ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํŒŒ์ผ ์—…๋กœ๋“œ์™€ ๊ฐ™์ด ์ด๋ฏธ์ง€๋‚˜ ๋™์˜์ƒ๊ฐ™์€ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ๋•Œ๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ ์•ˆ์— '='๋‚˜ '&'๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ ๋•Œ๋Š” ๋ฉ€ํ‹ฐํŒŒํŠธ ์ธ์ฝ”๋”ฉ ๋“ฑ์˜ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค.

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€