ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • CORS ๊ฐœ์š”
    codeStates front-end/node(server) 2023. 2. 6. 17:29
    ๋ฐ˜์‘ํ˜•

     

     

     

    ๐Ÿ“Œ CORS ๊ฐœ์š”

     

     

    ๐Ÿ“SOP(Same-Origin Policy)

    '๊ฐ™์€ ์ถœ์ฒ˜์˜ ๋ฆฌ์†Œ์Šค๋งŒ ๊ณต์œ ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค' ๋ผ๋Š” ์ •์ฑ…

     

    ๐Ÿ’ก ์ถœ์ฒ˜๊ฐ€ ๋ญ”๊ฐ€์š”?

    ๐Ÿ“– ์ถœ์ฒ˜๋Š” ํ”„๋กœํ† ์ฝœ, ํ˜ธ์ŠคํŠธ, ํฌํŠธ์˜ ์กฐํ•ฉ, ์ด ์ค‘ ํ•˜๋‚˜๋ผ๋„ ๋‹ค๋ฅด๋ฉด ๋™์ผ ์ถœ์ฒ˜ x

     

    ์ถœ์ฒ˜๊ฐ€ ๋‹ค๋ฅธ ์˜ˆ์‹œ

    • http / https -> ๋‘ url์€ ํ”„๋กœํ† ์ฝœ์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋™์ผ ์ถœ์ฒ˜ X
    • tistory.hwantech.com / velog.hwantech.com -> ๋‘ url์€ ํ˜ธ์ŠคํŠธ๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋™์ผ ์ถœ์ฒ˜ O
    • http://hwantech.tistory.com/81 / http://hwantech.tistory.com -> http ๊ธฐ๋ณธ ํฌํŠธ๋Š” 80 ์ด๋‹ค ๊ทธ๋Ÿฌ๋ฏ€๋กœ                              ๋’ค์— url์€ ํฌํŠธ๊ฐ€ ์ ํ˜€ ์žˆ์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธํฌํŠธ 80์ด๊ธฐ ๋•Œ๋ฌธ์— ๋™์ผ ์ถœ์ฒ˜ X
    • https://hwantech.tistory.com:443 / https:hwantech.tistory.com -> http ๊ธฐ๋ณธ ํฌํŠธ๋Š” 443 ์ด๋‹ค ๊ทธ๋Ÿฌ๋ฏ€๋กœ                              ๋’ค์— utl์€ ํฌํŠธ๊ฐ€ ์ ํ˜€ ์žˆ์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธํฌํŠธ 443์ด๊ธฐ ๋•Œ๋ฌธ์— ๋™์ผ ์ถœ์ฒ˜ O

     

    SOP๊ฐ€ ์ƒ๊ฒจ๋‚œ ์ด์œ 

     

    ์ž ์žฌ์ ์œผ๋กœ ํ•ด๋กœ์šธ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์„œ๋ฅผ ๋ถ„๋ฆฌํ•จ์œผ๋กœ์จ ๊ณต๊ฒฉ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๋กœ๋ฅผ ์ค„์—ฌ์ค€๋‹ค

    ํ•ดํ‚น๋“ฑ์˜ ์œ„ํ˜‘์—์„œ ์•ˆ์ „ํ•ด์ง„๋‹ค

     

     

    ๐Ÿ“CORS (Cross-Origin Resource)

     

    SOP ์ •์ฑ…์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, ๋‹ค๋ฅธ ์ถœ์ฒ˜ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ์„๊นŒ?

    ์œ„ ๋ฌธ์ œ์ƒํ™ฉ์œผ๋กœ ์ธํ•ด CORS๊ฐ€ ํ•„์š”ํ•˜๋‹ค

    CORS๋ž€ ๊ต์ฐจ ์ถœ์ฒ˜ ๋ฆฌ์†Œ์Šค ๊ณต์œ 

    ์ถ”๊ฐ€ HTTP ํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, ํ•œ ์ถœ์ฒ˜์—์„œ ์‹คํ–‰ ์ค‘์ธ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด

    ๋‹ค๋ฅธ ์ถœ์ฒ˜์˜ ์„ ํƒํ•œ ์ž์›์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๋ถ€์—ฌ

     

    ๐Ÿ‘‰๐Ÿป๐Ÿ‘‰๐Ÿป ๋ธŒ๋ผ์šฐ์ €๋Š” SOP์— ์˜ํ•ด ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค๋ฅธ ์ถœ์ฒ˜์˜ ๋ฆฌ์†Œ์Šค ๊ณต์œ ๋ฅผ ๋ง‰์ง€๋งŒ, CORS๋ฅผ

    ์‚ฌ์šฉํ•˜๋ฉด ์ ‘๊ทผ ๊ถŒํ•œ์„ ์–ป์„ ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๊ฒƒ 

     

     

    ๋‹ค๋ฅธ ์ถœ์ฒ˜์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ€์ ธ์˜ค๋ ค๊ณ  ํ–ˆ์ง€๋งŒ SOP ๋•Œ๋ฌธ์— ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
    CORS ์„ค์ •์„ ํ†ตํ•ด ์„œ๋ฒ„์˜ ์‘๋‹ต ํ—ค๋”์— ‘Access-Control-Allow-Origin’์„ ์ž‘์„ฑํ•˜๋ฉด ์ ‘๊ทผ ๊ถŒํ•œ์„
    ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

     

     

    ๐Ÿ“ CORS ๋™์ž‘ ๋ฐฉ์‹

     

    ๐Ÿ”— ํ”„๋ฆฌํ”Œ๋ผ์ดํŠธ ์š”์ฒญ(Preflight Reqest)

     

    ์‹ค์ œ ์š”์ฒญ์ด ๋ณด๋‚ด๊ธฐ ์ „, OPTIONS  ๋ฉ”์„œ๋“œ๋กœ ์‚ฌ์ „ ์š”์ฒญ์„ ๋ณด๋‚ด ํ•ด๋‹น ์ถœ์ฒ˜ ๋ฆฌ์†Œ์Šค์— ์ ‘๊ทผ ๊ถŒํ•œ์ด

    ์žˆ๋Š”์ง€๋ถ€ํ„ฐ ํ™•์ธํ•˜๋Š” ๊ฒƒ์„ ํ”„๋ฆฌํ”Œ๋ผ์ดํŠธ ์š”์ฒญ์ด๋ผ๊ณ  ํ•œ๋‹ค

     

     

     

    ํ”„๋ฆฌํ”Œ๋ผ์ดํŠธ ์š”์ฒญ์€ ์™œ ํ•„์š”ํ• ๊นŒ?

    • ๋ฏธ๋ฆฌ ๊ถŒํ•œ์„ ํ™•์ธํ•˜์—ฌ, ์ฒ˜์Œ๋ถ€ํ„ฐ ํ†ต์งธ๋กœ ๋ณด๋‚ด๋Š” ๊ฒƒ๋ณด๋‹ค ๋ฆฌ์†Œ์Šค ๋ฉด์—์„œ ํšจ์œจ์ 
    • ๋Œ€๋น„ํ•˜์ง€ ์•Š์€ ์„œ๋ฒ„ ๋ณดํ˜ธ

     

    ํ”„๋ฆฌํ”Œ๋ผ์ดํŠธ ์š”์ฒญ ๊ณผ์ •

    • ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์— ์‚ฌ์ „ ์š”์ฒญ์„ ๋ณด๋‚ด ํ™•์ธํ•˜๊ณ , ์„œ๋ฒ„๋Š” ํ•ด๋‹น ์‚ฌ์ „ ์š”์ฒญ์— ์‘๋‹ต์„ ํ•œ๋‹ค.
    • ์„œ๋ฒ„๊ฐ€ ์‚ฌ์ „ ์š”์ฒญ์„ ํ—ˆ์šฉํ–ˆ๋‹ค๋ฉด ๋‹ค์‹œ ๋ณธ ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.
    • ์ด 2๋ฒˆ์˜ ํ†ต์‹ ์„ ์ฃผ๊ณ  ๋ฐ›๋Š”๋‹ค.

     

    ํ”„๋ฆฌ ํ”Œ๋ผ์ดํŠธ ์š”์ฒญ ํฌ๋งท

    • Origin: ์š”์ฒญ ์ถœ์ฒ˜
    • Access-Control-Request-Method: ์‹ค์ œ ์š”์ฒญ ๋ฉ”์†Œ๋“œ
    • Access-Control-Request-Headers: ์‹ค์ œ ์š”์ฒญ์˜ ์ถ”๊ฐ€ ํ—ค๋”

     

    ํ”„๋ฆฌ ํ”Œ๋ผ์ดํŠธ ์‘๋‹ต ํฌ๋งท

    • Access-Control-Allow-Origin: ์„œ๋ฒ„ ์ธก ํ—ˆ๊ฐ€ ์ถœ์ฒ˜
    • Access-Control-Allow-Method: ์„œ๋ฒ„ ์ธก ํ—ˆ๊ฐ€ ํ—ค๋“œ
    • Access-Control-Allow-Headers: ์„œ๋ฒ„ ์ธก ํ—ˆ๊ฐ€ ํ—ค๋”
    • Access-Control-Max-Age: ํ”„๋ฆฌํ”Œ๋ผ์ดํŠธ ์‘๋‹ต ์บ์‹œ ์‹œ๊ฐ„

     

     

     

    ๐Ÿ”— ๋‹จ์ˆœ ์š”์ฒญ(Simple Reqest)

     

    ํ”„๋ฆฌํ”Œ๋ผ์ดํŠธ ์š”์ฒญ์„ ์ƒ๋žตํ•˜๊ณ  ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๊ฒƒ

     

    ๋งŒ์กฑ ์กฐ๊ฑด

    • GET, HEAD, POST ์š”์ฒญ ์ค‘ ํ•˜๋‚˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • ์ž๋™์œผ๋กœ ์„ค์ •๋˜๋Š” ํ—ค๋” ์™ธ์—, Accept, Accept-Language, Content-Language, Content-Type ํ—ค๋”์˜ ๊ฐ’๋งŒ ์ˆ˜๋™์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
      • Content-Type ํ—ค๋”์—๋Š” application/x-www-form-urlencoded, multipart/form-data, text/plain ๊ฐ’๋งŒ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค.

     

    ๐Ÿ”— ์ธ์ฆ์ •๋ณด๋ฅผ ํฌํ•จํ•œ ์š”์ฒญ(Credential Reqest)

     

    ์š”์ฒญ ํ—ค๋”์— ์ธ์ฆ ์ •๋ณด๋ฅผ ๋‹ด์•„ ๋ณด๋‚ด๋Š” ์š”์ฒญ, ํ”„๋ก ํŠธ, ์„œ๋ฒ„ ์–‘์ธก ๋ชจ๋‘ CORS ์„ค์ •์ด ํ•„์š”

     

    • ํ”„๋ก ํŠธ ์ธก์—์„œ๋Š” ์š”์ฒญ ํ—ค๋”์— withCredentials : true ๋ฅผ ๋„ฃ์–ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • ์„œ๋ฒ„ ์ธก์—์„œ๋Š” ์‘๋‹ต ํ—ค๋”์— Access-Control-Allow-Credentials : true ๋ฅผ ๋„ฃ์–ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • ์„œ๋ฒ„ ์ธก์—์„œ Access-Control-Allow-Origin ์„ ์„ค์ •ํ•  ๋•Œ, ๋ชจ๋“  ์ถœ์ฒ˜๋ฅผ ํ—ˆ์šฉํ•œ๋‹ค๋Š” ๋œป์˜ ์™€์ผ๋“œ์นด๋“œ(*)๋กœ ์„ค์ •ํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ธ์ฆ ์ •๋ณด๋ฅผ ๋‹ค๋ฃจ๋Š” ๋งŒํผ ์ถœ์ฒ˜๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ์„ค์ •ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

     

    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€

Designed by Tistory.