[HTTP] Preflight Request, Simple Request

YTT.ericaยท2024๋…„ 5์›” 14์ผ

CORS์— Preflight Request, Simple Request ์ ˆ์ฐจ

CORS๋ž€

๐Ÿ’ก โ€œ๋‹ค๋ฅธ ์ถœ์ฒ˜โ€์— ๋ฆฌ์†Œ์Šค๋ฅผ ์š”์ฒญํ•  ๋•Œ ์ง€์ผœ์•ผ ํ•˜๋Š” ์ •์ฑ…
  • ์ถ”๊ฐ€ HTTP ํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, ํ•œ ์ถœ์ฒ˜์—์„œ ์‹คํ–‰ ์ค‘์ธ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋‹ค๋ฅธ ์ถœ์ฒ˜์˜ ์„ ํƒํ•œ ์ž์›์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋„๋ก ๋ธŒ๋ผ์šฐ์ €์— ์•Œ๋ ค์คŒ

Preflight Request (์‚ฌ์ „ ์š”์ฒญ)

CORS Preflight Request๋Š” HTTP ์š”์ฒญ ์ „์— ์„œ๋ฒ„ ์ธก์—์„œ ๊ทธ ์š”์ฒญ์˜ ๋ฉ”์„œ๋“œ์™€ ํ—ค๋”์— ๋Œ€ํ•ด ์ธ์‹ํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์š”์ฒญ

์ถœ์ฒ˜: https://velog.io/@wiostz98kr/CORS์˜-๋ชจ๋“ -๊ฒƒ

  • ์„œ๋ฒ„ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ์š”์ฒญ ๋˜๋Š” ์ปค์Šคํ…€ ํ—ค๋”๋ฅผ ํฌํ•จํ•˜๋Š” ์š”์ฒญ POST, PUT, PATCH, GET(with custom headers)
  • OPTIONS ์š”์ฒญ ์ฃผ์–ด์ง„ URL ๋˜๋Š” ์„œ๋ฒ„์— ๋Œ€ํ•ด ํ—ˆ์šฉ๋œ ํ†ต์‹  ์˜ต์…˜์„ ์š”์ฒญ โ†’ ํด๋ผ์ด์–ธํŠธ๋Š” URL์„ ์ง€์ •ํ•˜๊ฑฐ๋‚˜ *๋ฅผ ์ง€์ •ํ•˜์—ฌ ์ „์ฒด ์„œ๋ฒ„๋ฅผ ์ฐธ์กฐ
    OPTIONS /resources/post-here/ HTTP/1.1
    Host: bar.example
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: en-us,en;q=0.5
    Accept-Encoding: gzip,deflate
    Connection: keep-alive
    Origin: https://foo.example
    Access-Control-Request-Method: POST
    Access-Control-Request-Headers: X-PINGOTHER, Content-Type
  • ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ž๋™์œผ๋กœ ๋ฐœ์ƒ Simple Request์˜ ๊ฒฝ์šฐ Preflingt Regust๊ฐ€ ์ƒ๋žต
  • ์˜ˆ์‹œ
    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ DELETE ์š”์ฒญ์„ ํ•˜๊ธฐ ์ „์— Preflight Request๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„๊ฐ€ DELETE๋ฅผ ํ—ˆ์šฉํ•˜๋Š”์ง€ ํ™•์ธ
      OPTIONS /resource/foo
      Access-Control-Request-Method: DELETE
      Access-Control-Request-Headers: origin, x-requested-with
      Origin: https://foo.bar.org
    • ์„œ๋ฒ„๊ฐ€ ํ—ˆ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, Access-Control-Allow-Methods ํ—ค๋” ๊ฐ’์— DELETE๋ฅผ ํฌํ•จํ•˜์—ฌ ์‘๋‹ต
      HTTP/1.1 204 No Content
      Connection: keep-alive
      Access-Control-Allow-Origin: https://foo.bar.org
      Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE
      Access-Control-Max-Age: 86400

Simple Request (๋‹จ์ˆœ ์š”์ฒญ)

CORS Preflight ์š”์ฒญ ์—†์ด ์ง์ ‘ ์ „์†ก๋˜๋Š” ์š”์ฒญ

  • GET, HEAD์™€ ๊ฐ™์ด ์„œ๋ฒ„ ์ƒํƒœ๋ฅผ ์กฐํšŒํ•˜๋Š” ์š”์ฒญ, ์„œ๋ฒ„๋Š” ์‘๋‹ต๊ณผ ํ•จ๊ป˜ CORS ํ—ค๋”๋ฅผ ๋ณด๋‚ด๊ณ , ๋ธŒ๋ผ์šฐ์ €๋Š” ํ•ด๋‹น ํ—ค๋”๊ฐ€ ์š”์ฒญ๊ณผ ๋ถ€ํ•ฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๊ฒฐ๊ณผ๋ฅผ ํ๊ธฐ

์ถœ์ฒ˜: https://velog.io/@wiostz98kr/CORS์˜-๋ชจ๋“ -๊ฒƒ

  • ์•„๋ž˜์˜ ์กฐ๊ฑด์„ ๋ชจ๋‘ ๋งŒ์กฑํ•ด์•ผํ•œ Preflight Request ์ƒ๋žต ๊ฐ€๋Šฅ
    • ์š”์ฒญ์˜ ๋ฉ”์†Œ๋Š” GET, HEAD, POST ์ค‘ ํ•˜๋‚˜์—ฌ์•ผ ํ•จ
    • Accept, Accept-Language, Content-Language, Content-Type, DPR, DOwnlink, Save-Data, Viewport-Width, Width๋ฅผ ์ œ์™ธํ•œ ํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋จ
    • Content-Type๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์— application/x-www-form-urlencoded, multipart/form-data, text/plain๋งŒ ํ—ˆ์šฉ (application/json ์ปจํ…์ธ  ํƒ€์ž… X)
profile
'โ—ก'โœฟ ๊ฟˆ์„ ์ฐพ์•„๊ฐ€๋ณด์ž๊ณ ~ 'โ—ก'โœฟ

0๊ฐœ์˜ ๋Œ“๊ธ€