āđāļāļĢāļ·āđāļāļāļĄāļ·āļāļāļāļŠāļāļ CORS
āļāļāļŠāļāļāđāļĨāļ°āļāļĩāļāļąāļāļāđāļĒāļāļēāļĒ CORS (Cross-Origin Resource Sharing) āđāļĨāļ°āļāļģāļāļ API
CORS āļāļ·āļāļāļ°āđāļĢ? CORS (Cross-Origin Resource Sharing) āđāļāđāļāļāļĨāđāļāļāļĩāđāļāļāļļāļāļēāļāđāļŦāđāđāļ§āđāļāđāļāļĢāļēāļ§āđāđāļāļāļĢāđāļŠāļĢāđāļēāļāļāļģāļāļāļāđāļēāļĄāļāđāļāļāļēāļ (āđāļāđāļĄāļ, āđāļāļĢāđāļāļāļāļĨ āļŦāļĢāļ·āļāļāļāļĢāđāļāļāļĩāđāđāļāļāļāđāļēāļāļāļąāļ) āļāļēāļāļŠāļāļĢāļīāļāļāđāļāļĩāđāļāļģāļāļēāļāđāļāđāļāļĢāļēāļ§āđāđāļāļāļĢāđ
āļŠāđāļ§āļāļŦāļąāļ§ CORS āļāļĩāđāļŠāļģāļāļąāļ
Access-Control-Allow-Origin: āļĢāļ°āļāļļāļ§āđāļēāļāđāļāļāļēāļāđāļāđāļāđāļĢāļąāļāļāļāļļāļāļēāļāđāļŦāđāđāļāđāļēāļāļķāļāļāļĢāļąāļāļĒāļēāļāļĢAccess-Control-Allow-Methods: āļĢāļ°āļāļļāļ§āđāļēāļ§āļīāļāļĩāļāļēāļĢ HTTP āđāļāđāļāđāļĢāļąāļāļāļāļļāļāļēāļAccess-Control-Allow-Headers: āļĢāļ°āļāļļāļ§āđāļēāļŠāđāļ§āļāļŦāļąāļ§ HTTP āđāļāļŠāļēāļĄāļēāļĢāļāđāļāđāđāļāđAccess-Control-Allow-Credentials: āļĢāļ°āļāļļāļ§āđāļēāļāļ°āļĢāļ§āļĄāļāđāļāļĄāļđāļĨāļĢāļąāļāļĢāļāļ (āļāļļāļāļāļĩāđ, āļāļēāļĢāļĢāļąāļāļĢāļāļāļāļ§āļēāļĄāļāļđāļāļāđāļāļ HTTP) āļŦāļĢāļ·āļāđāļĄāđ
ðĄ āđāļāļĨāļđāļāļąāļ CORS
āđāļāļĨāļđāļāļąāļāļāļąāđāļāđāļāļīāļĢāđāļāđāļ§āļāļĢāđ
1. Express.js (Node.js):
const cors = require('cors');
app.use(cors({
origin: 'https://example.com',
methods: ['GET', 'POST'],
credentials: true
}));2. Spring Boot (Java):
@CrossOrigin(origins = "https://example.com")
@RestController
public class ApiController { ... }āđāļāļĨāļđāļāļąāļāļāļąāđāļāđāļāļĨāđāļāđāļāļāđ
1. āļāļēāļĢāđāļāđāļāļĢāđāļāļāļāļĩāđāļāļīāļĢāđāļāđāļ§āļāļĢāđ:
// package.json (React)
"proxy": "http://localhost:3001"2. JSONP (āđāļāļāļēāļ° GET):
// āđāļāļĨāļđāļāļąāļāļāļĩāđāļāļģāļāļąāļāđāļāđāđāļĢāļĩāļĒāļāļāđāļēāļĒ
fetch('api?callback=handleResponse')ð§ āļāļēāļĢāļāļģāļŦāļāļāļāđāļē CORS āļāļēāļĄāļŠāļ āļēāļāđāļ§āļāļĨāđāļāļĄ
Next.js
// next.config.js
module.exports = {
async headers() {
return [
{
source: '/api/:path*',
headers: [
{
key: 'Access-Control-Allow-Origin',
value: '*'
}
]
}
]
}
}Nginx
location /api {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods
"GET, POST, OPTIONS";
add_header Access-Control-Allow-Headers
"Content-Type, Authorization";
}Apache
# .htaccess
Header always set Access-Control-Allow-Origin "*"
Header always set Access-Control-Allow-Methods
"GET, POST, OPTIONS"
Header always set Access-Control-Allow-Headers
"Content-Type, Authorization"āļāļēāļĢāļāļģāļŦāļāļāļāđāļē CORS āļāļēāļĄāļŠāļ āļēāļāđāļ§āļāļĨāđāļāļĄ
āļŠāļāļēāļāļāļēāļĢāļāđāļāļēāļĢāļāļāļŠāļāļ
- âĒ āļāļģāļāļāđāļāļāļāđāļēāļĒ: āļāļāļŠāļāļāļāļĪāļāļīāļāļĢāļĢāļĄ CORS āļāļ·āđāļāļāļēāļāļāđāļ§āļĒāļāļģāļāļ GET
- âĒ āļāļģāļāļ Preflight: āļāļāļŠāļāļāļāļģāļāļ preflight āļāđāļ§āļĒāļ§āļīāļāļĩāļāļēāļĢ PUT/DELETE
- âĒ āļŠāđāļ§āļāļŦāļąāļ§āđāļāļāļāļģāļŦāļāļāđāļāļ: āļāļāļŠāļāļāļāļģāļāļāļāđāļ§āļĒāļŠāđāļ§āļāļŦāļąāļ§ Authorization
- âĒ āļāđāļāļĄāļđāļĨāļĢāļąāļāļĢāļāļ: āļāļāļŠāļāļāļāļģāļāļāļāđāļ§āļĒāļāļļāļāļāļĩāđ
- âĒ āļāļēāļĢāļāļąāļāļāļēāļĢāļāđāļāļāļīāļāļāļĨāļēāļ: āļāļāļŠāļāļāļŠāļāļēāļāļāļēāļĢāļāđāļāļ§āļēāļĄāļĨāđāļĄāđāļŦāļĨāļ§
āļāđāļāļāļ§āļĢāļāļīāļāļēāļĢāļāļēāļāđāļēāļāļāļ§āļēāļĄāļāļĨāļāļāļ āļąāļĒ
- âĒ āļĢāļ°āļĄāļąāļāļĢāļ°āļ§āļąāļāļāļēāļĢāđāļāđ wildcard (*) āđāļāļ·āđāļāļāļāļēāļāļāļ§āļēāļĄāđāļŠāļĩāđāļĒāļāļāđāļēāļāļāļ§āļēāļĄāļāļĨāļāļāļ āļąāļĒ
- âĒ āļŦāļĨāļąāļāļāļēāļĢāļŠāļīāļāļāļīāđāļāļąāđāļāļāđāļģ: āļāļāļļāļāļēāļāđāļāļāļēāļ°āļāđāļāļāļēāļāđāļĨāļ°āļ§āļīāļāļĩāļāļēāļĢāļāļĩāđāļāļģāđāļāđāļāđāļāđāļēāļāļąāđāļ
- âĒ āļāđāļāļāļģāļāļąāļāļāđāļāļĄāļđāļĨāļĢāļąāļāļĢāļāļ: āļāļāļļāļāļēāļāđāļāļāļēāļ°āļāđāļāļāļēāļāļāļĩāđāļĢāļ°āļāļļāđāļĄāļ·āđāļāļĢāļ§āļĄāļāđāļāļĄāļđāļĨāļĢāļąāļāļĢāļāļ
- âĒ āļāļēāļĢāļāļĢāļ§āļāļŠāļāļāļāļāļāļī: āļāļĢāļ§āļāļŠāļāļāđāļĨāļ°āļāļąāļāđāļāļāļāđāļĒāļāļēāļĒ CORS āđāļāđāļāļĢāļ°āļĒāļ°
āđāļāļĨāđāļāļĨāļąāļāļāļēāļĢāļāļĩāļāļąāļ CORS
āđāļāļĢāļ·āđāļāļāļĄāļ·āļāļŠāļģāļŦāļĢāļąāļāļāļąāļāļāļąāļāļāļēāđāļāļĢāļēāļ§āđāđāļāļāļĢāđ
- âĒ āļāļĢāļ§āļāļŠāļāļāļāļģāļāļ OPTIONS āđāļāđāļāđāļ Network
- âĒ āļĄāļāļāļŦāļēāļāđāļāļāļ§āļēāļĄāļāđāļāļāļīāļāļāļĨāļēāļ CORS āđāļ Console
- âĒ āļāļĢāļ§āļāļŠāļāļāļŠāđāļ§āļāļŦāļąāļ§ CORS āđāļ Response Headers
āđāļāļĢāļ·āđāļāļāļĄāļ·āļāļāļĩāđāļĄāļĩāļāļĢāļ°āđāļĒāļāļāđ
- âĒ āđāļāļĢāļ·āđāļāļāļĄāļ·āļāļāļāļŠāļāļ CORS (āđāļāļĢāļ·āđāļāļāļĄāļ·āļāļāļĩāđ)
- âĒ Postman (āļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļāļāļŠāļāļ API)
- âĒ āļāļģāļŠāļąāđāļ curl (āļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļāļāļŠāļāļāđāļāļīāļĢāđāļāđāļ§āļāļĢāđāđāļāļĒāļāļĢāļ)