Skip to content

Latest commit

ย 

History

History
108 lines (70 loc) ยท 5.29 KB

CORS.md

File metadata and controls

108 lines (70 loc) ยท 5.29 KB

CORS


๋ชฉ์ฐจ

  1. CORS๋ž€?
  2. SOP๋ž€?
  3. CORS์˜ ์ ‘๊ทผ์ œ์–ด ์‹œ๋‚˜๋ฆฌ์˜ค

CORS๋ž€?

CORS (Cross-Origin Resource Sharing) (๊ต์ฐจ ์ถœ์ฒ˜ ๋ฆฌ์†Œ์Šค ๊ณต์œ )

  • ์ถ”๊ฐ€ HTTP ํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, ํ•œ ์ถœ์ฒ˜์—์„œ ์‹คํ–‰ ์ค‘์ธ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋‹ค๋ฅธ ์ถœ์ฒ˜์˜ ์„ ํƒํ•œ ์ž์›์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋„๋ก ๋ธŒ๋ผ์šฐ์ €์—๊ฒŒ ์•Œ๋ ค์ฃผ๋Š” ์ฒด์ œ
  • ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ฆฌ์†Œ์Šค๊ฐ€ ์ž์‹ ์˜ ์ถœ์ฒ˜์™€ ๋‹ค๋ฅผ ๋•Œ ๊ต์ฐจ ์ถœ์ฒ˜ HTTP ์š”์ฒญ์„ ์‹คํ–‰
  • CORS ์ฒด์ œ๋ฅผ ํ†ตํ•ด ์•ˆ์ „ํ•œ ๊ต์ฐจ ์ถœ์ฒ˜ ์š”์ฒญ ๋ฐ ๋ฐ์ดํ„ฐ ์ „์†ก ์ง€์› - ๋ณด์•ˆ ๋ฌธ์ œ ํ•ด๊ฒฐ
  • CORS ์™ธ์— ์šฐํšŒํ•˜๋Š” ๋ฐฉ์‹: JSONP, Allow CORS ํ”Œ๋Ÿฌ๊ทธ์ธ

cors


SOP๋ž€?

SOP (Same-Origin Policy) (๋™์ผ ์ถœ์ฒ˜ ์ •์ฑ…)

  • ํ•œ ์ถœ์ฒ˜์—์„œ ๋ถˆ๋Ÿฌ์˜จ ๋ฌธ์„œ๋‚˜ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋‹ค๋ฅธ ์ถœ์ฒ˜์—์„œ ๊ฐ€์ ธ์˜จ ๋ฆฌ์†Œ์Šค์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๊ฒƒ์„ ์ œํ•œํ•˜๋Š” ๋ณด์•ˆ ๋ฐฉ์‹
  • ์ž ์žฌ์ ์œผ๋กœ ํ•ด๋กœ์šธ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์„œ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ณต๊ฒฉ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๋กœ ๊ฐ์†Œ
  • ์ถœ์ฒ˜ 3๊ฐ€์ง€๊ฐ€ ๋ชจ๋‘ ๊ฐ™์€ ๊ฒฝ์šฐ๋งŒ ๋™์ผํ•œ ์ถœ์ฒ˜๋ผ๊ณ  ์ธ์ •
    • ๊ทธ๋Ÿฌ๋‚˜ port๋Š” ๋ช…์‹œ๋œ ๊ฒฝ์šฐ์—๋งŒ ๋ฒˆํ˜ธ๊นŒ์ง€ ๊ฐ™์•„์•ผ ํ•˜๋ฉฐ, ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ๊ฐ™๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์ถœ์ฒ˜๋กœ ํŒ๋‹จ ๊ฐ€๋Šฅ
  • Internet Explorer๋Š” ๋น„ํ‘œ์ค€์œผ๋กœ ์—ฌ๊ธฐ๋Š” ๋‹ค๋ฅธ ๋ธŒ๋ผ์šฐ์ €์™€ ๋‹ค๋ฅด๊ฒŒ ๋‹ค์Œ ๋‘ ๊ฒฝ์šฐ๋Š” ์˜ˆ์™ธ์ ์œผ๋กœ ์ธ์ •
    • ์–‘์ชฝ ๋„๋ฉ”์ธ ๋ชจ๋‘๊ฐ€ ๋†’์Œ ๋‹จ๊ณ„์˜ ๋ณด์•ˆ ์ˆ˜์ค€์„ ๊ฐ€์ง„ ๊ฒฝ์šฐ
    • port๊ฐ€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ

Origin (์ถœ์ฒ˜)

  • scheme(protocol: HTTP ๋˜๋Š” HTTPS), host(domain), port(์„ค์ •๋œ ๊ฒฝ์šฐ)๋กœ ์ •์˜
cors_origin_url

์ถœ์ฒ˜ ๋น„๊ต ์˜ˆ์‹œ

URL์ด http://edu.ssafy.com์ผ ๋•Œ ๋‹ค์Œ URL๋“ค๊ณผ ๋™์ผ ์ถœ์ฒ˜์ผ๊นŒ?

URL ๊ฒฐ๊ณผ ์ด์œ 
http://edu.ssafy.com/edu/main/index.do ์„ฑ๊ณต ๊ฒฝ๋กœ๋งŒ ๋‹ค๋ฅด๋‹ค
https://edu.ssafy.com ์‹คํŒจ ํ”„๋กœํ† ์ฝœ์ด ๋‹ค๋ฅด๋‹ค
http://edu.ssafy.com:81 ์‹คํŒจ ํฌํŠธ๊ฐ€ ๋‹ค๋ฅด๋‹ค (http://๋Š” 80์ด ๊ธฐ๋ณธ๊ฐ’)(IE๋Š” ์„ฑ๊ณต)
http://www.ssafy.com ์‹คํŒจ ํ˜ธ์ŠคํŠธ๊ฐ€ ๋‹ค๋ฅด๋‹ค
http://ssafy.com ์‹คํŒจ ํ˜ธ์ŠคํŠธ๊ฐ€ ๋‹ค๋ฅด๋‹ค

CORS์˜ ์ ‘๊ทผ์ œ์–ด ์‹œ๋‚˜๋ฆฌ์˜ค

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

  • Preflight Request ์—†์ด Main Request๋งŒ ์กด์žฌ
  • ๋‹ค์Œ ์กฐ๊ฑด์„ ๋ชจ๋‘ ์ถฉ์กฑํ•ด์•ผ ์š”์ฒญ ๊ฐ€๋Šฅ
    • ๋ฉ”์„œ๋“œ : GET, HEAD, POST ์ค‘ ํ•˜๋‚˜
    • ์œ ์ € ์—์ด์ „ํŠธ๊ฐ€ ์ž๋™์œผ๋กœ ์„ค์ • ํ•œ ํ—ค๋” ์™ธ์— ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ํ—ค๋” : Accept, Accept-Language, Content-Language, Content-Type
    • Content-Type์˜ ํ—ค๋”์— ํ—ˆ์šฉ๋œ ๊ฐ’ : application/x-www-form-urlencoded, multipart/form-data, text/plain

cors_simple_request

Preflight Request (ํ”„๋ฆฌํ”Œ๋ผ์ดํŠธ ์š”์ฒญ)

  • ๊ต์ฐจ ์ถœ์ฒ˜ ์š”์ฒญํ•˜๊ธฐ ์ „์— options ๋ฉ”์„œ๋“œ๋กœ ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์˜ ๋ฆฌ์†Œ์Šค๋กœ HTTP ์š”์ฒญ์„ ๋ณด๋‚ด ์‹ค์ œ๋กœ๋„ ๊ทธ ์š”์ฒญ์ด ์•ˆ์ „ํ•œ์ง€ ํ™•์ธ
  • ์œ ์ € ๋ฐ์ดํ„ฐ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ(์˜ˆ: delete, put)๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ ๋ฏธ๋ฆฌ ์ „์†กํ•˜๋Š” ๊ฒƒ
  • Access-Control-Request-Method์™€ Access-Control-Request-Headers๋ฅผ ๋ณด๊ณ  ์„œ๋ฒ„๋Š” ์š”์ฒญ์„ ์ˆ˜๋ฝํ• ์ง€ ๊ฒฐ์ •
    • Preflight ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ origin ์™ธ์—๋„ ์ž์‹ ์ด ์˜ˆ๋น„ ์š”์ฒญ ์ดํ›„ ๋ณธ ์š”์ฒญ์— ํ•ด๋‹นํ•˜๋Š” ๋‚ด์šฉ๋„ ํ•จ๊ป˜ ์ „์†ก
    • ์„œ๋ฒ„์˜ ์‘๋‹ต์„ ํ†ตํ•ด ์š”์ฒญ์ด ํ—ˆ์šฉ๋˜๋Š”์ง€ ํ™•์ธ ๊ฐ€๋Šฅ
    • Access-Control-Max-Age ํ—ค๋”๊ฐ’์— ๋ช…์‹œํ•œ ์‹œ๊ฐ„ ๋™์•ˆ Preflight ์š”์ฒญ ๋Œ€์‹  ๋ณธ ์š”์ฒญ
  • Preflight Request๊ฐ€ ์„ฑ๊ณตํ•ด์•ผ Main Request ๊ฐ€๋Šฅ
    • ์‹ค์ œ ์‘๋‹ต์—์„œ๋„ Access-Control-Allow-Origin ํ—ค๋” ํ•„์ˆ˜

cors_preflight_request

Credentialed Request (์ธ์ฆ์ •๋ณด ํฌํ•จ ์š”์ฒญ)

  • ๋ธŒ๋ผ์šฐ์ €์˜ ํ† ํฐ, ์ฟ ํ‚ค ์ •๋ณด ๋“ฑ ์‚ฌ์šฉ์ž ์‹๋ณ„ ์ •๋ณด๋ฅผ ๋‹ด์•„ ๋‹ค๋ฅธ ์ถœ์ฒ˜๋กœ ๋ณด๋‚ด๋Š” ์š”์ฒญ์ธ ๊ฒฝ์šฐ
  • ํด๋ผ์ด์–ธํŠธ ์ธก์€ credentials: include ํ•„์ˆ˜ (๋ฌด์กฐ๊ฑด ์ธ์ฆ ์ •๋ณด ํฌํ•จ)
  • ์„œ๋ฒ„ ์ธก์€ Access-Control-Allow-Credentials: true ํ•„์ˆ˜
  • Access-Control-Allow-Origin๋Š” ์ •ํ™•ํ•œ ์ •๋ณด๋งŒ ์žˆ์–ด์•ผ ํ•˜๋ฏ€๋กœ * ์‚ฌ์šฉ ๋ถˆ๊ฐ€

cors_credentialed_request