[JavaScript] HTTP(Hyper Textย Protocol)
ํ๊ทธ: javascript · HTTP · Header · General Header · Request Header · Response Header · Entity Header · GET · POST · PUT · DELETE · HTTP ์ํย ์ฝ๋ · CORS
1. HTTP(Hyper Textย Protocol)
HTML ๋ฌธ์์ ๊ฐ์ ๋ฆฌ์์ค๋ค์ ๊ฐ์ ธ์ฌ ์ ์๋๋ก ํด์ฃผ๋ย ํ๋กํ ์ฝ
[HTTP ๊ฐ์ - HTTP | MDN](https://developer.mozilla.org/ko/docs/Web/HTTP/Overview) |
(1): HTTP ๋ฉ์์ง
์์ฒญ(request) : ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ๋ก ์ ๋ฌํด์ ์๋ฒ์ ์ก์ ์ด ์ผ์ด๋๊ฒ๋ ํ๋ ๋ฉ์์ง
์๋ต(response) : ์์ฒญ์ ๋ํ ์๋ฒ์ ๋ต๋ณ
(2): HTTP ์์ฒญ
- HTTP ๋ฉ์๋
- ์ฃผ๋กย URL, ๋๋ ํ๋กํ ์ฝ, ํฌํธ, ๋๋ฉ์ธ์ ์ ๋ ๊ฒฝ๋ก
- HTTP ๋ฒ์
1) Header
- General Header(๊ณตํต ํค๋) : ๊ณตํต ํค๋๋ ์์ฒญ ๋ฐ ์๋ต์ ๋ฉ์์ง ๋ชจ๋์์ ์ฌ์ฉ๋์ง๋งย ์ปจํ ์ธ ์๋ ์ ์ฉ๋์ง ์๋ ํค๋
- Request Header(์์ฒญ ํค๋) : HTTP ์์ฒญ์์ ์ฌ์ฉ๋์ง๋ง ๋ฉ์์ง์ ์ปจํ ์ธ ์ ๊ด๋ จ์ด ์๋ HTTP ํค๋
- Response Header(์๋ต ํค๋) : ์์น ๋๋ ์๋ฒ ์์ฒด์ ๋ํ ์ ๋ณด(์ด๋ฆ, ๋ฒ์ )๊ณผ ๊ฐ์ด ์๋ต์ ๋ํ ๋ถ๊ฐ์ ์ธ ์ ๋ณด๋ฅผ ๊ฐ๋ ํค๋
- Entity Header(์ํฐํฐ ํค๋) : ์ปจํ ์ธ ๊ธธ์ด๋ MIME ํ์ ๊ณผ ๊ฐ์ด Entity Body์ ๋ํ ์์ธํ ์ ๋ณด๋ฅผ ํฌํจํ๋ ํค๋
(1) General Header ์ฃผ์ ์์ฑ
- Date : (day-name), (day) (month) (year) (hour):(minute):(econd) GMT
- Connection : close, Keep-Alive โ close๋ ๋ฉ์ธ์ง ๊ตํ ํ TCP ์ฐ๊ฒฐ ์ข ๋ฃ , Keep-Alive๋ ๋ฉ์ธ์ง ๊ตํ ํ TCP ์ฐ๊ฒฐ ์ ์ง
(2) Request Header ์ฃผ์ ์์ฑ
- Host : ์์ฒญํ๋ ์์ ํธ์คํธ๋ช , ํฌํธ ๋ฒํธ
- User-Agent : ์์ฒญ์์ ์ํํธ์จ์ด ์ ๋ณด
Accept : ์ํ๋ ๋ฏธ๋์ด์ ํ์ ๋ฐ ์ฐ์ ์์
Accept: application/json, text/plain, /
json > text > all type ์์ผ๋ก ๋ฐ๋๋ค.
Accept-Language: en-US,en;q=0.5
- ์ธ์ด๋ en์ด๋ค. q๋ ๊ฐ์ค์น.
Accept-Encoding: gzip, deflate, br
- gzip, deflate, br(Brotli) ๋ฑ๋ฑ์ ์์ถ ํฌ๋งท์ ๋ฐ๋๋ค
- cookie : ์๋ฒ์ ์ํด์ ์ด์ ์ ์ ์ฅ๋ ์ฟ ํค๋ฅผ ํฌํจ์ํค๋ ์์ฑ
- Referer : ํ์ฌ ์์ฒญ์ ๋ณด๋ธ ํ์ด์ง์ ์ ๋ ํน์ ๋ถ๋ถ ์ฃผ์๋ฅผ ํฌํจ
(3) Response Header ์ฃผ์ ์์ฑ
- Server : ์๋ฒ ์ํํธ์จ์ด์ ์ ๋ณด
- content-encoding : ์๋ตํ๋ ๋ด์ฉ์ ์ธ์ฝ๋ฉ ํฌ๋งท
- content-type : ์๋ตํ๋ ๋ด์ฉ์ ํ์ ๊ณผ ๋ฌธ์ ํฌ๋งท
- cache-control : ์บ์ ๊ด๋ฆฌ์ ๋ํ ์ ๋ณด
- date : ์๋ต ๋ฉ์ธ์ง๊ฐ ์์ฑ๋ ์๊ฐ
- vary : ์บ์๋ ์๋ต์ ํฅํ์ ์๋ต์ ์ฌ์ฉํ ๊ธฐ์ค
- Set-Cookie : ์๋ฒ์์ ์ฌ์ฉ์์๊ฒ ์ธ์ ์ฟ ํค ์ ๋ณด
- Age : max-age๋ด์์ ์บ์๊ฐ ์ผ๋ง๋ ์ง๋ฌ๋์ง์ ์ด ๋จ์
(4) Entity header ์ฃผ์ ์์ฑ
- Content-Type : ๋ณธ๋ฌธ์ย ๋ฏธ๋์ด ํ์ ์ ๋ํ๋ด๊ธฐ์ํด ์ฌ์ฉ
- Content-Encoding : ๋ฏธ๋์ด ํ์ ์ ์์ถํ๊ธฐ ์ํด์ ์ฌ์ฉ
- Content-Length : ๋ณธ๋ฌธ์ ๊ธธ์ด
- Content-Language : ๋ณธ๋ฌธ์ด ๋์์ผ๋ก ํ๋ ์ธ์ด
- Content-Location : ์ปจํ ์ธ ์ ์ ๊ทผํ ์ ์๋ ์์น
- Allow : ๋ฆฌ์์ค๊ฐ ์ง์ํ๋ ๋ฉ์๋์ ์งํฉ
2) HTTP Method ์ข ๋ฅ
(1) ์ฃผ์ ๋ฉ์๋
- GET :ย ๋ฆฌ์์ค ์กฐํ
- POST:ย ย ์์ฒญ ๋ฐ์ดํฐ ์ฒ๋ฆฌ, ์ฃผ๋ก ๋ฑ๋ก์ ์ฌ์ฉ
- PUT :ย ๋ฆฌ์์ค๋ฅผ ๋์ฒด(๋ฎ์ด์ฐ๊ธฐ), ํด๋น ๋ฆฌ์์ค๊ฐ ์์ผ๋ฉด ์์ฑ
- PATCH :ย ๋ฆฌ์์ค ๋ถ๋ถ ๋ณ๊ฒฝ (PUT์ด ์ ์ฒด ๋ณ๊ฒฝ, PATCH๋ ์ผ๋ถ ๋ณ๊ฒฝ)
- DELETE :ย ๋ฆฌ์์ค ์ญ์
(2) ๊ธฐํ ๋ฉ์๋
- HEAD :ย GET๊ณผ ๋์ผํ์ง๋ง ๋ฉ์์ง ๋ถ๋ถ(body ๋ถ๋ถ)์ ์ ์ธํ๊ณ , ์ํ ์ค๊ณผ ํค๋๋ง ๋ฐํ
- OPTIONS :ย ๋์ ๋ฆฌ์์ค์ ๋ํ ํต์ ๊ฐ๋ฅ ์ต์ (๋ฉ์๋)์ ์ค๋ช (์ฃผ๋ก CORS์์ ์ฌ์ฉ)
- CONNECT :ย ๋์ ์์์ผ๋ก ์๋ณ๋๋ ์๋ฒ์ ๋ํ ํฐ๋์ ์ค์
- TRACE :ย ๋์ ๋ฆฌ์์ค์ ๋ํ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ผ ๋ฉ์์ง ๋ฃจํ๋ฐฑ ํ ์คํธ๋ฅผ ์ํ
GET METHOD ํ์ฉ
์) GET/members/100?username=inpa&height=200
์กฐํํ ๋ POST๋ ์ฌ์ฉํ ์ ์์ง๋ง,ย GET ๋ฉ์๋๋ ์บ์ฑ์ด ๊ฐ๋ฅํ๊ธฐ์ย GET์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ๋ฆฌํ๋ค.
์ ์ ๋ฐ์ดํฐ ์กฐํ
- ์ด๋ฏธ์ง, ์ ์ ํ ์คํธ ๋ฌธ์ GET
- ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ ์์ด ๋ฆฌ์์ค ๊ฒฝ๋ก๋ก ๋จ์ํ๊ฒ ์กฐํ ๊ฐ๋ฅ
์๋ฒ์ ์ ๋ฌํ๊ณ ์ถ์ ๋ฐ์ดํฐ๋ ์ฟผ๋ฆฌ์คํธ๋ง๋ฅผ ํตํด์ ์ ๋ฌ
- ํด๋ผ์ด์ธํธ์์ย /members/100ย ์ผ๋ก 100๋ฒ ๋ฉค๋ฒ๋ฅผ ์กฐํํด์ ์ ๋ณด๋ฅผ ๋ฌ๋ผ๊ณ GET ์์ฒญ
- ์๋ฒ์์๋ ์์ฒญ ๋ฉ์ธ์ง๋ฅผ ๋ถ์ํด ๋ด๋ถ์ ์ ์ ์ ๋ณด๋ฅผ ์กฐํํ ๋ค ๊ฒฐ๊ณผ Response๋ฅผ ๋ง๋ ๋ค.
- ์๋ฒ์์ ํด๋ผ์ด์ดํธ๋ก ์๋ต์ ํด์ค๋ค. ๊ทธ๋ฌ๋ฉด ํด๋ผ์ด์ธํธ์์ ์ ์์ ์ผ๋ก ๋ฐ์ผ๋ฉด 200 OK status๋ฅผ ๊ฐ์ง๋ฉฐ, ํ์์ ๋ณด๋ฅผ ์ป๊ฒ ๋๋ค.
๋์ ๋ฐ์ดํฐ ์กฐํ
- ์ฃผ๋ก ๊ฒ์, ๊ฒ์ํ ๋ชฉ๋ก์์ ๊ฒ์์ด๋ก ์ด์ฉ
- ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ ์ฌ์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ
- ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ย key1=value1&key2=value2ย ๊ตฌ์กฐ๋ก ๋์ด ์์
- ์์ฒญ URL ๋ค์ย ?q=hello&hl=koย ์ฟผ๋ฆฌ ํ๋ผ๋ฏธํฐ๋ฅผ ์ค์ ์์ธํ ์กฐํ ๋ฐ์ดํฐ๋ฅผ ์ป๋๋ค
POST METHOD ํ์ฉ
- ์ ๋ฌํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ/์์ฑ ์์ฒญ ๋ฉ์๋ (Create)
- ๋ฉ์์ง ๋ฐ๋(body)๋ฅผ ํตํด ์๋ฒ๋ก ์์ฒญ ๋ฐ์ดํฐ ์ ๋ฌํ๋ฉด ์๋ฒ๋ ์์ฒญ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ์ฌ ์ ๋ฐ์ดํธ
- ์ ๋ฌ๋ ๋ฐ์ดํฐ๋ก ์ฃผ๋ก ์ ๊ท ๋ฆฌ์์ค ๋ฑ๋ก, ํ๋ก์ธ์ค ์ฒ๋ฆฌ์ ์ฌ์ฉ
- ๋ง์ผ ๋ฐ์ดํฐ๋ฅผ GET ํ๋๋ฐ ์์ด, JSON์ผ๋ก ์กฐํ ๋ฐ์ดํฐ๋ฅผ ๋๊ฒจ์ผ ํ๋ ์ ๋งคํ ๊ฒฝ์ฐ POST๋ฅผ ์ฌ์ฉ
- ํด๋ผ์ด์ธํธ๋ body์ ๋ฑ๋กํ ํ์ ์ ๋ณด๋ฅผ JSON ํํ๋ก ๋ง๋ค์ด ๋ด๊ณ ์๋ฒ๋ก ์ ์กํ๋ค.
- ์๋ฒ์์๋ ๋ฐ์ ๋ฉ์ธ์ง๋ฅผ ๋ถ์ํด ๋ก์ง ๋๋ก ์ฒ๋ฆฌ ํ๋ค. ์๋ฅผ ๋ค์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฑ๋กํ๊ณ ์ ๊ท ์์ด๋๋ฅผ ์์ฑ
- ์ ๊ทํ์์ ๋ํ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋์ ๋ด์์ ํด๋ผ์ด์ธํธ๋ก ์๋ต
PUT METHOD ํ์ฉ
- ๋ง์ผ ์์ฒญ ๋ฉ์ธ์ง์ ๋ฆฌ์์ค๊ฐ ์์ผ๋ฉด ๋ฎ์ด์ฐ๊ณ , ์์ผ๋ฉด ์๋ก ์์ฑ
- ๋ฐ์ดํฐ๋ฅผ ๋์ฒดํด์ผ ํ๋, ํด๋ผ์ด์ธํธ๊ฐ ๋ฆฌ์์ค์ ๊ตฌ์ฒด์ ์ธ ์ ์ฒด ๊ฒฝ๋ก๋ฅผ ์ง์ ํด ๋ณด๋ด์ฃผ์ด์ผ ํ๋ค.
PUT ์์ฒญ์ย ๋ฆฌ์์ค๊ฐ ์๋ ๊ฒฝ์ฐ
- 100๋ฒ ์ ์ ์ ๋ฆฌ์์ค๋ฅผ ๊ต์ฒดํ๊ฒ ๋ค๋ ์์ฒญ์ ๋ณด๋ธ๋ค.
- ๊ธฐ์กด์ย ๋ฐ์ดํฐ๊ฐย ์์๋ค๋ฉดย ์์ ํย ๋์ฒด
- ์๋ฒ์์ ํด๋ผ์ด์ดํธ๋ก ์๋ต์ ํด์ค๋ค. ๊ทธ๋ฌ๋ฉด ํด๋ผ์ด์ธํธ์์ ์ ์์ ์ผ๋ก ๋ฐ์ผ๋ฉด 200 OK status๋ฅผ ๊ฐ์ง๋ฉฐ, ํ์์ ๋ณด๋ฅผ ์ป๊ฒ ๋๋ค.
PUT ์์ฒญ์ ๋ฆฌ์์ค๊ฐ ์๋ ๊ฒฝ์ฐ
- 100๋ฒ ์ ์ ์ ๋ฆฌ์์ค๋ฅผ ๊ต์ฒดํ๊ฒ ๋ค๋ ์์ฒญ์ ๋ณด๋ธ๋ค.
- ๊ธฐ์กด์ ๋ฐ์ดํฐ๊ฐ ์๋ค๋ฉด POST ์ ๊ฐ์ด ์ ๊ท๋ก ์์ฑ
PUT ์์ฒญ์ ์ผ๋ถ ๋ฆฌ์์ค๋ง ๋ณ๊ฒฝํ๊ธธ ์ํ ๊ฒฝ์ฐ
- age๋ง 50์ผ๋ก ๋ณ๊ฒฝํ๋ ค๊ณ ํด๋น ๋ฐ์ดํฐ๋ฅผ PUT์ผ๋ก ์ ๋ฌํ๋ค.
- ํ์ง๋ง ๊ธฐ์กด ๋ฐ์ดํฐ๊ฐย ์์ ํ ๋์ฒด๋์ด ์ด๋ฆ ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋๋ค. (์ด๋๋ PATCH ๋ฉ์๋๋ฅผ ์ด์ฉํด์ผ ํ๋ค)
PATCH METHOD ํ์ฉ
- ๋ง์ผ PATCH๋ฅผ ์ง์ํ์ง ์๋ ์๋ฒ์์๋ ๋์ ์ POST๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
- age๋ง 50์ผ๋ก ๋ณ๊ฒฝํ๋ ค๊ณ ํด๋น ๋ฐ์ดํฐ๋ฅผ PATCH๋ก ์ ๋ฌํ๋ค.
- PUT๊ณผ๋ย ๋ค๋ฅด๊ฒย ํ์ย ์ ๋ณด์์ย age๋งย ๋ณ๊ฒฝ๋๋ค.
DELETE METHOD ํ์ฉ
- ์ํ์ฝ๋๋ ๋๋ถ๋ถ 200์ ์ฌ์ฉํ๊ณ ์ํฉ์ ๋ฐ๋ผ 204๋ฅผ ์ฌ์ฉํ๋ค.
PUT ์์ฒญ์ย ๋ฆฌ์์ค๊ฐ ์๋ ๊ฒฝ์ฐ
- 100๋ฒ์งธ ๋ฉค๋ฒ๋ฅผ ์ ๊ฑฐํ๊ธฐ ์ํด DELETE๋ก ์ ๋ฌ
- ์๋ฒ์์ ์์ฒญ์ ๋ฐ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํด๋น ๋ฆฌ์์ค๋ฅผ ์ ๊ฑฐ
- ์๋ฒ์์ ํด๋ผ์ด์ดํธ๋ก ์๋ต์ ํด์ค๋ค. ๊ทธ๋ฌ๋ฉด ํด๋ผ์ด์ธํธ์์ ์ ์์ ์ผ๋ก ๋ฐ์ผ๋ฉด 200 OK status๋ฅผ ๊ฐ์ง๋ฉฐ, ํ์์ ๋ณด๋ฅผ ์ป๊ฒ ๋๋ค.
PUT ์์ฒญ์ ๋ฆฌ์์ค๊ฐ ์๋ ๊ฒฝ์ฐ
- 100๋ฒ ์ ์ ์ ๋ฆฌ์์ค๋ฅผ ๊ต์ฒดํ๊ฒ ๋ค๋ ์์ฒญ์ ๋ณด๋ธ๋ค.
- ๊ธฐ์กด์ ๋ฐ์ดํฐ๊ฐ ์๋ค๋ฉด POST ์ ๊ฐ์ด ์ ๊ท๋ก ์์ฑ
PUT ์์ฒญ์ ์ผ๋ถ ๋ฆฌ์์ค๋ง ๋ณ๊ฒฝํ๊ธธ ์ํ ๊ฒฝ์ฐ
- age๋ง 50์ผ๋ก ๋ณ๊ฒฝํ๋ ค๊ณ ํด๋น ๋ฐ์ดํฐ๋ฅผ PUT์ผ๋ก ์ ๋ฌํ๋ค.
- ํ์ง๋ง ๊ธฐ์กด ๋ฐ์ดํฐ๊ฐย ์์ ํ ๋์ฒด๋์ด ์ด๋ฆ ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋๋ค. (์ด๋๋ PATCH ๋ฉ์๋๋ฅผ ์ด์ฉํด์ผ ํ๋ค)
3) HTTP ์ํย ์ฝ๋
(1) : 1xx : informational response(์กฐ๊ฑด๋ถ ์๋ต)
- 100 Continue(๊ณ์) : ์ง๊ธ๊น์ง์ ์ํ๊ฐ ๊ด์ฐฎ์ผ๋ฉฐ ํด๋ผ์ด์ธํธ๊ฐ ๊ณ์ํด์ ์์ฒญ์ ํ๊ฑฐ๋ ์ด๋ฏธ ์์ฒญ์ ์๋ฃํ ๊ฒฝ์ฐ์๋ ๋ฌด์ํด๋ ๋๋ ๊ฒ
- 101 Switching Protocol(ํ๋กํ ์ฝ ์ ํ) : ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ธ Upgrade ์์ฒญ ํค๋์ ๋ํ ์๋ต์ ๋ค์ด๊ฐ๋ฉฐ ์๋ฒ์์ ํ๋กํ ์ฝ์ ๋ณ๊ฒฝํ ๊ฒ
- 102 Processingย (์ฒ๋ฆฌ, WebDAV) : ์๋ฒ๊ฐ ์์ฒญ์ ์์ ํ์์ผ๋ฉฐ ์ด๋ฅผ ์ฒ๋ฆฌํ๊ณ ์์ง๋ง, ์์ง ์ ๋๋ก ๋ ์๋ต์ ์๋ ค์ค ์ ์์
- 103 Early Hints (์ฌ์ ๋์) : ์ฃผ๋ก Link ํค๋์ ํจ๊ป ์ฌ์ฉ๋์ด ์๋ฒ๊ฐ ์๋ต์ ์ค๋นํ๋ ๋์ ์ฌ์ฉ์ ์์ด์ ํธ๊ฐ(user agent) ์ฌ์ ๋ก๋ฉ(preloading)์ ์์ํ ์ ์๋๋ก ํจ
(2) : 2xx Success(์ฑ๊ณต)
- 201 Created(์์ฑ๋จ) : ์์ฒญ์ด ์ฑ๊ณต์ ์ด์์ผ๋ฉฐ ๊ทธ ๊ฒฐ๊ณผ๋ก ์๋ก์ด ๋ฆฌ์์ค๊ฐ ์์ฑ๋๋ค. ์ด ์๋ต์ ์ผ๋ฐ์ ์ผ๋ก POST ์์ฒญ ๋๋ ์ผ๋ถ PUT ์์ฒญ ์ดํ์ ๋ฐ๋ผ์ด.
- 202 Accepted(ํ์ฉ๋จ) : ์์ฒญ์ ์์ ํ์์ง๋ง ๊ทธ์ ์ํ์ฌ ํ๋ํ ์ ์๋ค. ์ด ์๋ต์ ์์ฒญ ์ฒ๋ฆฌ์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ์ดํ์ HTTP๋ก ๋น๋๊ธฐ ์๋ต์ ๋ณด๋ด๋ ๊ฒ์ ๋ํด์ ๋ช ํํ๊ฒ ๋ช ์ํ์ง ์์
- 203 Non-Authoritative Information(์ ๋ขฐํ ์ ์๋ ์ ๋ณด) : ๋ฉํ ์ ๋ณด ์ธํธ๊ฐ ์ค๋ฆฌ์ง ์๋ฒ์ ๊ฒ๊ณผ ์ผ์นํ์ง ์์ง๋ง ๋ก์ปฌ์ด๋ ์๋ ํํฐ ๋ณต์ฌ๋ณธ์์ ๋ชจ์์ก์์ ์๋ฏธํ๋ค. ์ด๋ฌํ ์กฐ๊ฑด์์๋ ์ด ์๋ต์ด ์๋๋ผ 200 OK ์๋ต์ ๋ฐ๋์ ์ฐ์ ๋๋ค.
- 204 No Content(๋ด์ฉ ์์) : ์์ฒญ์ ๋ํด์ ๋ณด๋ด์ค ์ ์๋ ์ฝํ ์ธ ๊ฐ ์์ง๋ง, ํค๋๋ ์๋ฏธ์์ ์ ์๋ค. ์ฌ์ฉ์-์์ด์ ํธ๋ ๋ฆฌ์์ค๊ฐ ์บ์ ๋ ํค๋๋ฅผ ์๋ก์ด ๊ฒ์ผ๋ก ์ ๋ฐ์ดํธํ ์ ์๋ค.
(3) : 3xx Redirection(๋ฆฌ๋ค์ด๋ ์ , ๊ฒฝ๋ก ์ฌ์ง์ )
- 301 Moved Permanently(์๊ตฌ์ ์ด๋) : ์์ฒญํ ๋ฆฌ์์ค์ URI๊ฐ ๋ณ๊ฒฝ๋์์์ ์๋ฏธ
- 304 Not Modified(๋ณ๊ฒฝ ์์) : ์บ์๋ฅผ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋๋ค. ์ด๊ฒ์ ํด๋ผ์ด์ธํธ์๊ฒ ์๋ต์ด ์์ ๋์ง ์์์์ ์๋ ค์ฃผ๋ฉฐ, ๊ทธ๋ฌ๋ฏ๋ก ํด๋ผ์ด์ธํธ๋ ๊ณ์ํด์ ์๋ต์ ์บ์ ๋ ๋ฒ์ ์ ์ฌ์ฉํ ์ ์๋ค.
(4) : 4xx Client Error(ํด๋ผ์ด์ธํธ ์ค๋ฅ)
- 400 Bad Request(์๋ชป๋ ์์ฒญ) : ์๋ชป๋ ๋ฌธ๋ฒ์ผ๋ก ์ธํ์ฌ ์๋ฒ๊ฐ ์์ฒญ์ ์ดํดํ ์ ์์
- 401 Unauthorized(๊ถํ ์์) : HTTP ํ์ค์์๋ โ๋ฏธ์น์ธ(unauthorized)โ๋ฅผ ๋ช ํํ ํ๊ณ ์์ง๋ง, ์๋ฏธ์ ์ด ์๋ต์ โ๋น์ธ์ฆ(unauthenticated)โ์ ์๋ฏธ
- 403 Forbidden(์ ๊ทผ ๊ธ์ง) : ํด๋ผ์ด์ธํธ๊ฐ ์ฝํ ์ธ ์ ์ ๊ทผํ ๊ถ๋ฆฌ๋ฅผ ๊ฐ์ง๊ณ ์์ง ์์.(401๊ณผ ๋ค๋ฅธ ์ ์ ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ๊ฐ ๋๊ตฌ์ธ์ง ์๊ณ ์์)
- 404 Not Found(์ฐพ์ ์ ์์) : ์๋ฒ๊ฐ ์์ฒญ๋ฐ์ ๋ฆฌ์์ค๋ฅผ ์ฐพ์ ์ ์๋ค. ๋ธ๋ผ์ฐ์ ์์๋ ์๋ ค์ง์ง ์์ URL์ ์๋ฏธ
- 405 Method Not Allowed(ํ์ฉ๋์ง ์์ ๋ฉ์๋) : ์์ฒญ์ ์ง์ ๋ ๋ฉ์๋๊ฐ URI๋ก ํ์๋ ๋ฆฌ์์ค์ ํ์ฉ๋์ง ์์
- 408 Request Timeout(์์ฒญ ์๊ฐ ์ด๊ณผ) : ์๋ต์ ์์ฒญ์ ํ์ง ์๊ฐ์ด ์ค๋๋ ์ฐ๊ฒฐ์ ์ผ๋ถ ์๋ฒ๊ฐ ์ ์กํ๋ฉฐ, ์ด๋จ ๋์๋ ์ด์ ์ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์ด๋ ํ ์์ฒญ์ด ์์๋ค๊ณ ํ๋๋ผ๋ ๋ณด๋ด์ง๊ธฐ๋ ํจ
(5) : 5xx Server Error(์๋ฒ ์ค๋ฅ)
- 500(๋ด๋ถ ์๋ฒ ์ค๋ฅ) : ์๋ฒ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ฌ ์์ฒญ์ ์ํํ ์ ์์.
- 501(๊ตฌํ๋์ง ์์) : ์๋ฒ์ ์์ฒญ์ ์ํํ ์ ์๋ ๊ธฐ๋ฅ์ด ์์.
- 502 (Bad Gateway, ๋ถ๋ ๊ฒ์ดํธ์จ์ด) : ์๋ฒ๊ฐ ๊ฒ์ดํธ์จ์ด๋ ํ๋ก์ ์ญํ ์ ํ๊ณ ์๊ฑฐ๋ ๋๋ ์ ์คํธ๋ฆผ ์๋ฒ์์ ์๋ชป๋ ์๋ต์ ๋ฐ์.
- 503(์๋น์ค๋ฅผ ์ฌ์ฉํ ์ ์์) : ์๋ฒ๊ฐ ์ค๋ฒ๋ก๋๋์๊ฑฐ๋ ์ ์ง๊ด๋ฆฌ๋ฅผ ์ํด ๋ค์ด๋์๊ธฐ ๋๋ฌธ์ ํ์ฌ ์๋ฒ๋ฅผ ์ฌ์ฉํ ์ ์์.
- 504(๊ฒ์ดํธ์จ์ด ์๊ฐ์ด๊ณผ) : ์๋ฒ๊ฐ ๊ฒ์ดํธ์จ์ด๋ ํ๋ก์ ์ญํ ์ ํ๊ณ ์๊ฑฐ๋ ๋๋ ์ ์คํธ๋ฆผ ์๋ฒ์์ ์ ๋ ์์ฒญ์ ๋ฐ์ง ๋ชปํจ.
4) CORS(๊ต์ฐจ ์ถ์ฒ ๋ฆฌ์์ค ๊ณต์ )
๊ต์ฐจ ์ถ์ฒ ๋ฆฌ์์ค ๊ณต์ (Cross-Origin Resource Sharing,ย CORS)๋ ์ถ๊ฐย HTTPํค๋๋ฅผ ์ฌ์ฉํ์ฌ, ํย ์ถ์ฒ์์ ์คํ ์ค์ธ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ค๋ฅธ ์ถ์ฒ์ ์ ํํ ์์์ ์ ๊ทผํ ์ ์๋ ๊ถํ์ ๋ถ์ฌํ๋๋ก ๋ธ๋ผ์ฐ์ ์ ์๋ ค์ฃผ๋ ์ฒด์
[๊ต์ฐจ ์ถ์ฒ ๋ฆฌ์์ค ๊ณต์ (CORS) - HTTP | MDN](https://developer.mozilla.org/ko/docs/Web/HTTP/CORS) |
(1) ๋์ผ ์ถ์ฒ ์ ์ฑ (Same-Origin Policy) : ๋์ผํ ์ถ์ฒ์ ๋ํ ์ ์ฑ
์ถ์ฒ(Origin)์ ๋์ผํจ์ ๋ URL์ ๊ตฌ์ฑ ์์ ์คย Protocol(Scheme), Host, Port ์ด 3๊ฐ์ง๋ง ๋์ผ ํ๋ค๋ฉด ๋์ผ ์ถ์ฒ๋ก ํ๋จ
์ถ์ฒ๋ฅผ ๋น๊ตํ๋ ๋ก์ง์ ์๋ฒ์ ๊ตฌํ๋ ์คํ์ด ์๋ย ๋ธ๋ผ์ฐ์ ์ ๊ตฌํ๋ ์คํ์
๋ธ๋ผ์ฐ์ ๊ฐ ์ ์ฑ ์ผ๋ก ์ฐจ๋จ์ ํ๋ค๋ ๋ง์, ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํ์ง ์๊ณ ์๋ฒ ๊ฐ์ ํต์ ์ ํ ๋๋ ์ ์ฑ ์ด ์ ์ฉ๋์ง ์๋๋ค๋ ๋ง๊ณผ ๊ฐ์.
์ฆ, ํด๋ผ์ด์ธํธ ๋จ ์ฝ๋์์ API ์์ฒญ์ ํ๋๊ฒ ์๋๋ผ, ์๋ฒ ๋จ ์ฝ๋์์ ๋ค๋ฅธ ์ถ์ฒ์ ์๋ฒ๋ก API ์์ฒญ์ ํ๋ฉด CORS ์๋ฌ๋ก๋ถํฐ ์์ ๋ก์์ง.
๊ทธ๋์ ์ด๋ฅผ ์ด์ฉํ ํ๋ก์(Proxy) ์๋ฒ๋ผ๋ ๊ฒ์ด ์์.
(2) ๊ต์ฐจ ์ถ์ฒ ๋ฆฌ์์ค ๊ณต์ (Cross-Origin Resource Sharing, CORS) : ๋ค๋ฅธ ์ถ์ฒ์ ๋ฆฌ์์ค ๊ณต์ ์ ๋ํ ํ์ฉ/๋นํ์ฉ ์ ์ฑ
๋ธ๋ผ์ฐ์ ์ CORS ๊ธฐ๋ณธ ๋์
- ํด๋ผ์ด์ธํธ์์ HTTP์์ฒญ์ ํค๋์ Origin์ ๋ด์ ์ ๋ฌ
- ์๋ฒ๋ ์๋ตํค๋์ Access-Control-Allow-Origin์ ๋ด์ ํด๋ผ์ด์ธํธ๋ก ์ ๋ฌ
- ํด๋ผ์ด์ธํธ์์ Origin๊ณผ ์๋ฒ๊ฐ ๋ณด๋ด์ค Access-Control-Allow-Origin์ ๋น๊ตํ๋ค.
CORS ํด๊ฒฐ์ฑ
์ ์๋ฒ์ ํ์ฉ์ด ํ์ โ ์๋ฒ์์ย Access-Control-Allow-Origin ย ํค๋์ ํ์ฉํ ์ถ์ฒ๋ฅผ ๊ธฐ์ฌํด์ ํด๋ผ์ด์ธํธ์ ์๋ตํ๋ฉด ๋