HyperText Transfer Protocol
http๋ html ๋ฌธ์์ ๊ฐ์ ๋ฆฌ์์ค๋ค์ ๊ตํํ๊ธฐ ์ํด ๋ง๋ค์ด์ง Protocal(ํต์ ๊ท์ฝ)์ด๋ค. HTTP๋ ์น์์ ์ด๋ฃจ์ด์ง๋ ๋ชจ๋ ๋ฐ์ดํฐ ๊ตํ์ ๊ธฐ์ด์ด๋ฉฐ, ํด๋ผ์ด์ธํธ-์๋ฒ ํ๋กํ ์ฝ์ด๊ธฐ๋ ํ๋ค.
GET
, POST
, PUT
, DELETE
, OPTIONS
๋ฑ๋ฑ์ด ์๋ค.GET
๊ณผ POST
๊ฐ ์ฐ์ธ๋ค./login
1.0
, 1.1
, 2.0
๋ฑ์ด ์๋ค.GET / search HTTP / 1.1
:
์ด ์ฌ์ฉ๋จ)application/json
Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Type: application/json
Content-Length: 257
Host: google.com
User-Agent: HTTPie/0.9.3
POST /payment-sync HTTP/1.1
Accept: application/json
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 83
Content-Type: application/json
Host: intropython.com
User-Agent: HTTPie/0.9.3
{
"imp_uid": "imp_1234567890",
"merchant_uid": "order_id_8237352",
"status": "paid"
}
1) Status Line
Response์ ์ํ๋ฅผ ๊ฐ๋ตํ๊ฒ ๋ํ๋ด์ฃผ๋ ๋ถ๋ถ์ด๋ค. 3๋ถ๋ถ์ผ๋ก ๊ตฌ์ฑ๋์ด์๋ค.
- HTTP๋ฒ์
- Status code:์๋ต ์ํ๋ฅผ ๋ํ๋ด๋ ์ฝ๋, ์ซ์๋ก ๋์ด์๋ ์ฝ๋์ด๋ค. ์๋ฅผ๋ค์ด, 200
- Status text:์๋ต์ํ๋ฅผ ๊ฐ๋ตํ๊ฒ ์ค๋ช
ํด ์ฃผ๋ ๋ถ๋ถ์ด๋ค. ์๋ฅผ๋ค์ด, "Not Found"
>HTTP/1.1 404 Not Found
2) Headers
Response์ headers์ ๋์ผํ๋ค. ๋ค๋ง response์์๋ง ์ฌ์ฉ๋๋ header ๊ฐ๋ค์ด ์๋ค. ์๋ฅผ๋ค์ด, User-Agent
๋์ ์ Server
ํค๋๊ฐ ์ฌ์ฉ๋๋ค.
3) Body
Response์ body์ ์ผ๋ฐ์ ์ผ๋ก ๋์ผํ๋ค. Request์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ชจ๋ response๊ฐ body๊ฐ ์์ง๋ ์๋ค. ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ํ์๊ฐ ์์๊ฒฝ์ฐ body๊ฐ ๋น์ด์๊ฒ ๋๋ค.
HTTP/1.1 404 Not Found
Connection: close
Content-Length: 1573
Content-Type: text/html; charset=UTF-8
Date: Mon, 20 Aug 2018 07:59:05 GMT
<!DOCTYPE html>
<html lang=en>
<meta charset=utf-8>
<meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width">
<title>Error 404 (Not Found)!!1</title>
<style>
*{margin:0;padding:0}html,cod.....์๋ต.......
</style>
<a href=//www.google.com/><span id=logo aria-label=Google></span></a>
<p><b>404.</b> <ins>Thatโs an error.</ins>
<p>The requested URL <code>/payment-sync</code> was not found on this server. <ins>Thatโs all we know.</ins>
GET
์ด๋ฆ ๊ทธ๋๋ก ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ์๋ฒ๋ก ๋ถํฐ ๋ฐ์(GET)์๋ ์ฃผ๋ก ์ฌ์ฉ๋๋ ๋ฉ์๋ ์ด๋ค. ๋ฐ์ดํฐ ์์ฑ/์์ /์ญ์ ์์ด ๋ฐ์์ค๊ธฐ๋ง ํ ๋ ์ฌ์ฉ๋๋ค. ๊ฐ์ฅ ๊ฐ๋จํ๊ณ ๋ง์ด ์ฌ์ฉ๋๋ HTTP Method์ด๋ค. ์์์ ๋งํ๋๋ก ์ฃผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ฌ๋ ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ request์ body๋ฅผ ์ ๋ณด๋ด๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
POST
๋ฐ์ดํฐ๋ฅผ ์์ฑ/์์ /์ญ์ ํ ๋ ์ฃผ๋ก ์ฌ์ฉ๋๋ Method์ด๋ค. ๋ฐ์ดํฐ๋ฅผ ์์ฑ ๋ฐ ์์ ํ ๋ ๋ง์ด ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ request body๊ฐ ํฌํจ๋์ ๋ณด๋ด์ง๋ค.
/update
url์์ ์ด๋ค method๋ฅผ ์์ฒญ ๊ฐ๋ฅํ๊ฐ๋ฅผ ์๊ณ ์ถ์ผ๋ฉด ๋จผ์ OPTIONS
์์ฒญ์ ์ฌ์ฉํด์ ํ์ธํ๊ฒ ๋๋ค. http -v OPTIONS http://example.org
OPTIONS / HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 0
Host: example.org
User-Agent: HTTPie/0.9.3
HTTP/1.1 200 OK
Allow: OPTIONS, GET, HEAD, POST
Cache-Control: max-age=604800
Content-Length: 0
Date: Mon, 20 Aug 2018 08:37:45 GMT
Expires: Mon, 27 Aug 2018 08:37:45 GMT
Server: EOS (vny006/0450)
PUT
POST
์ ๋น์ทํ๋ค. ๋ฐ์ดํฐ๋ฅผ ์์ฑํ ๋ ์ฌ์ฉ๋๋ Method์ด๋ค. POST
์ ๊ฒน์น๊ธฐ ๋๋ฌธ์ PUT
๋ก ํต์ผํด์ ์ฌ์ฉํ๋ ๊ณณ๋ ์๋๋ฐ, ์ต๊ทผ ๋ช๋
์ฌ์ด์ POST
์ ๋ฐ๋ ค์ ์ ์ฌ์ฉ ์ํ๋ ์ถ์ธ์ด๋ค.
DELETE
ํน์ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ์์ ์ญ์ ์์ฒญ์ ๋ณด๋ผ ๋ ์ฐ์ด๋ Method์ด๋ค. PUT
๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก POST
์ ๋ฐ๋ ค์ ์ ์ฌ์ฉ ์๋๋ ์ถ์ธ์ด๋ค.
200 OK
๊ฐ์ฅ ์์ฃผ ๋ณด๊ฒ๋๋ status code์ด๋ค. ๋ฌธ์ ์์ด ๋ค ์ ์คํ๋์์๋ ๋ณด๋ด๋ ์ฝ๋์ด๋ค.
301 Moved Permanently
ํด๋น URI๊ฐ ๋ค๋ฅธ ์ฃผ์๋ก ๋ฐ๋์์ ๋ ๋ณด๋ด๋ ์ฝ๋์ด๋ค.
HTTP/1.1 301 Moved Permanently
Location: http://www.example.org/index.asp
400 Bad Request
ํด๋น ์์ฒญ์ด ์๋ชป ๋ ์์ฒญ์ผ๋ ๋ณด๋ด๋ ์ฝ๋์ด๋ค. ์ฃผ๋ก ์์ฒญ์ ํฌํจ๋ input๊ฐ๋ค์ด ์๋ชป๋ ๊ฐ๋ค์ด ๋ณด๋ด์ก์ ๋ ์ฌ์ฉ๋๋ ์ฝ๋์ด๋ค. ์๋ฅผ๋ค์ด, ์ ํ๋ฒํธ๋ฅผ ๋ณด๋ด์ผ ๋๋๋ฐ text๊ฐ ๋ณด๋ด์ก์ ๋ ๋ฑ
401 Unauthorized
์ ์ ๊ฐ ํด๋น ์์ฒญ์ ์งํ ํ ๋ ค๋ฉด ๋จผ์ ๋ก๊ทธ์ธ์ ํ๊ฑฐ๋ ํ์ ๊ฐ์
์ ํ๊ฑฐ๋ ๋ฑ์ด ํ์ํ๋ค๋ ๊ฒ์ ๋ํ๋ด๋ ค ํ ๋ ์ฐ์ด๋ ์ฝ๋์ด๋ค.
403 Forbidden
์ ์ ๊ฐ ํด๋น ์์ฒญ์ ๋ํ ๊ถํ์ด ์๋ค๋ ๋ป์ด๋ค. ์๋ฅผ๋ค์ด, ๋ฌด๋ฃํ์, ์ ๋ฃํ์์ ์ ๊ทผ ๊ถํ๋ฑ
404 Not Found
์์ฒญ๋ uri๊ฐ ์กด์ฌํ์ง ์๋ค๋ ๋ป์ด๋ค.
500 Internal Server Error
์๋ฒ์์ ์๋ฌ๊ฐ ๋ฌ์ ๋ ์ฌ์ฉ๋๋ ์ฝ๋์ด๋ค. API๊ฐ๋ฐ์ ํ๋ ๋ฐฑ์ค๋ ๊ฐ๋ฐ์๋ค์ด ์ซ์ดํ๋ ์ฝ๋์ด๋ค.
๋ฒ์ธ
๋ธ๋ก๊ทธ๋ฅผ ์ฐ๋ค๋ณด๋ URI์ URL์ด ๋ณด์๋ค. ์ด ๋์ ์ฐจ์ด์ ์ ๊ฐ๋จํ๊ฒ ์ ๋ฆฌํด ๋ณด๋ ค๊ณ ํ๋ค.
ํตํฉ ์์ ์๋ณ์(ID)**๋ก์จ, ์ธํฐ๋ท์ ์ฃผ์ ๊ฐ์ ๊ฒ์ผ๋ก, ์ ๋ณด ๋ฆฌ์์ค๋ฅผ ๊ณ ์ ํ๊ฒ ์๋ณํ๊ณ ์์น๋ฅผ ์ง์ ํ ์ ์๋ค.
ํน์ ์๋ฒ์ ํ ๋ฆฌ์์ค์ ๋ํ ๊ตฌ์ฒด์ ์ธ ์์น๋ฅผ ์์ ํ๋ค. URL์ ๋ฆฌ์์ค๊ฐ ์ ํํ ์ด๋์ ์๊ณ ์ด๋ป๊ฒ ์ ๊ทผํ ์ ์๋์ง ๋ถ๋ช ํ ์๋ ค์ค๋ค.
์ฝํ
์ธ ๋ฅผ ์ด๋ฃจ๋ ํ ๋ฆฌ์์ค์ ๋ํด, ๊ทธ ๋ฆฌ์์ค์ ์์น์ ์ํฅ ๋ฐ์ง ์๋ ์ ์ผ๋ฌด์ดํ ์ด๋ฆ์ ๋งํ๋ค.
์ด ์์น ๋
๋ฆฝ์ ์ธ URN์ ๋ฆฌ์์ค๋ฅผ ์ฌ๊ธฐ์ ๊ธฐ ์ฎ๊ธฐ๋๋ผ๋ ๋ฌธ์ ์์ด ๋์ํ๋ค. ๋ฆฌ์์ค๊ฐ ๊ทธ ์ด๋ฆ์ ๋ณํ์ง ์๊ฒ ์ ์งํ๋ ํ, ์ฌ๋ฌ์ข
๋ฅ์ ๋คํธ์ํฌ ์ ์ ํ๋กํ ์ฝ๋ก ์ ๊ทผํด๋ ๋ฌธ์ ๊ฐ ์๋ค.
๋ฐ๋ผ์, ๋ฌด์์ธ์ง๋ฅผ ๋งํ๋ What์ ๊ฐ๋
์ผ๋ก ์๋ก ์ค๋ณต๋์ง ์๋ ์ ์ผํ ๊ฐ์ด์ด์ผํ๋ค