CORS

CORS (Cross-Origin Resource Sharing, ꡐ차 좜처 μžμ› 곡유)

μ •μ˜

ꡐ차 좜처(Cross Origin) κ°„ λ¦¬μ†ŒμŠ€ 곡유(Resource Sharing)의 μ•½μž

μ„œλ‘œ λ‹€λ₯Έ Origin을 κ°–λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 간에 λ¦¬μ†ŒμŠ€λ₯Ό κ³΅μœ ν•˜κ³ μž ν•  λ•Œ μ€€μˆ˜ν•΄μ•Ό ν•  κ·œμ•½λ“€μ„ CORS Policy 라고 함

ν΄λΌμ΄μ–ΈνŠΈ (λ¦¬μ†ŒμŠ€ μš”μ²­μž)

  1. ν”„λ¦¬ν”ŒλΌμ΄νŠΈ μš”μ²­ (OPTIONS) 으둜 μ§€μ›ν•˜λŠ” λ©”μ†Œλ“œ, 헀더 정보 확인

    • Simple Request 인 κ²½μš°μ—λŠ” μƒλž΅λ¨

    • μ•„λž˜λŠ” 이 OPTIONS μš”μ²­μ—μ„œ μ‚¬μš©λ˜λŠ” 헀더듀

      • Access-Control-Request-Method

        • μ‚¬μš© κ°€λŠ₯ν•œ λ©”μ†Œλ“œμΈμ§€λ₯Ό 응닡받기 μœ„ν•œ 헀더

      • Access-Control-Request-Headers

        • μ‚¬μš© κ°€λŠ₯ν•œ 헀더인지λ₯Ό 응닡받기 μœ„ν•œ 헀더

  2. ν”„λ¦¬ν”ŒλΌμ΄νŠΈ μš”μ²­μ„ 기반으둜 μ‹€μ œ μš”μ²­ 전달

    • μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ΅¬ν˜„ν•  λ•Œμ—λŠ” μ‹€μ œ μš”μ²­λ§Œμ„ μž‘μ„±ν•˜λ©°, Fetch λ“±μ˜ μš”μ²­ λ©”μ†Œλ“œκ°€ ν”„λ¦¬ν”ŒλΌμ΄νŠΈλ₯Ό μžλ™μœΌλ‘œ 트리거

μ„œλ²„ (λ¦¬μ†ŒμŠ€ 제곡자)

  • ν”„λ¦¬ν”ŒλΌμ΄νŠΈ(OPTION) μš”μ²­μ— λŒ€ν•΄μ„œλŠ” λ‹€μŒμ˜ 헀더λ₯Ό 톡해 μ§€μ›ν•˜λŠ” λ©”μ†Œλ“œ, 헀더 정보 제곡

    • Allows λ˜λŠ” Access-Control-Allow-Methods

    • Allow-Headers λ˜λŠ” Access-Control-Allow-Headers

  • ν—ˆμš©λœ ν΄λΌμ΄μ–ΈνŠΈμΈμ§€ 검증

    • ν—ˆμš©λœ 헀더라면 Access-Control-Allow-Origin 헀더λ₯Ό ν¬ν•¨ν•œ 응닡 제곡

    • ν”„λ¦¬ν”ŒλΌμ΄νŠΈ, μ‹€μ œ μš”μ²­ λͺ¨λ‘ 이 κ³Όμ •(헀더)이 μš”κ΅¬λ¨

μ„œλ²„-ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­ 흐름

  1. ν΄λΌμ΄μ–ΈνŠΈ β€” ν”„λ¦¬ν”ŒλΌμ΄νŠΈ μš”μ²­

    • Simple Request 인 κ²½μš°μ—λŠ” μƒλž΅λ¨ (μ€‘μš”ν•˜λ―€λ‘œ ν•œ 번 더 κ°•μ‘°)

  2. μ„œλ²„ β€” ν”„λ¦¬ν”ŒλΌμ΄νŠΈ μš”μ²­μ— λŒ€ν•œ 응닡 (μ‚¬μš© κ°€λŠ₯ λ©”μ†Œλ“œ, 헀더 정보 포함)

  3. ν΄λΌμ΄μ–ΈνŠΈ β€” μ„œλ²„μ˜ 응닡 기반으둜 μ‹€μ œ μš”μ²­ λ©”μ‹œμ§€ 생성

  4. μ„œλ²„ β€” μ‹€μ œ μš”μ²­μ— λŒ€ν•œ 응닡

인증 μš”μ²­μΈ 경우

  • ν΄λΌμ΄μ–ΈνŠΈ β€” withCredentials: true

    • 이걸 포함해야 헀더에 μΏ ν‚€ 정보λ₯Ό λ„£μŒ

  • μ„œλ²„ β€” Access-Control-Allow-Credentials: true

    • λΈŒλΌμš°μ €λŠ” 인증 μš”μ²­μ— λŒ€ν•œ 응닡 헀더에 이게 μ—†μœΌλ©΄ 파기

    • μ„œλ²„μ—μ„œ 이 헀더λ₯Ό ν¬ν•¨ν•˜κ³ μž ν•˜λ©΄ Allow-Origin 은 μ™€μΌλ“œμΉ΄λ“œλ‘œ μ„€μ • λΆˆκ°€

μ£Όμ˜μ‚¬ν•­

  • CORSλŠ” 기본적으둜 무쑰건 μš”μ²­μ— origin 정보가 μžˆμ–΄μ•Ό ν—ˆμš©ν•΄μ€„ 수 있음

    • λ¦¬μ†ŒμŠ€λ₯Ό μš”μ²­ν•œ μ˜€λ¦¬μ§„μ΄ ν—ˆμš©λœ μ˜€λ¦¬μ§„μΈμ§€ μ•„λ‹Œμ§€ νŒλ³„ν•΄μ•Ό ν•˜λ―€λ‘œ 당연함

좜처

[MDN] https://developer.mozilla.org/ko/docs/Web/HTTP/CORS

Last updated