рдХреЙрд░реНрд╕ рдЯреЗрд╕реНрдЯрд░

рдХреНрд░реЙрд╕-рдУрд░рд┐рдЬрд┐рди рд░рд┐рд╕реЛрд░реНрд╕ рд╢реЗрдпрд░рд┐рдВрдЧ (рдХреЙрд░реНрд╕) рдиреАрддрд┐рдпреЛрдВ рдФрд░ рдПрдкреАрдЖрдИ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдФрд░ рдбрд┐рдмрдЧ рдХрд░реЗрдВ

рдЕрдиреБрд░реЛрдз рд╕реЗрдЯрд┐рдВрдЧреНрд╕
рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдПрдкреАрдЖрдИ рдЕрдиреБрд░реЛрдз рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ
рдЙрджрд╛рд╣рд░рдг рдЕрдиреБрд░реЛрдз
рдЗрди рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдПрдкреАрдЖрдИ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЖрдЬрд╝рдорд╛рдПрдВ
рдХреЙрд░реНрд╕ рдЬрд╛рдирдХрд╛рд░реА
рдХреЙрд░реНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмреБрдирд┐рдпрд╛рджреА рдЬрд╛рдирдХрд╛рд░реА

рдХреЙрд░реНрд╕ рдХреНрдпрд╛ рд╣реИ? рдХреЙрд░реНрд╕ (рдХреНрд░реЙрд╕-рдУрд░рд┐рдЬрд┐рди рд░рд┐рд╕реЛрд░реНрд╕ рд╢реЗрдпрд░рд┐рдВрдЧ) рдПрдХ рддрдВрддреНрд░ рд╣реИ рдЬреЛ рд╡реЗрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЪрд▓ рд░рд╣реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдХреНрд░реЙрд╕-рдУрд░рд┐рдЬрд┐рди рдЕрдиреБрд░реЛрдз (рд╡рд┐рднрд┐рдиреНрди рдбреЛрдореЗрди, рдкреНрд░реЛрдЯреЛрдХреЙрд▓, рдпрд╛ рдкреЛрд░реНрдЯ) рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдореБрдЦреНрдп рдХреЙрд░реНрд╕ рд╣реЗрдбрд░

  • Access-Control-Allow-Origin: рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рди рдореВрд▓реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрди рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ
  • Access-Control-Allow-Methods: рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рди HTTP рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ
  • Access-Control-Allow-Headers: рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рди HTTP рд╣реЗрдбрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
  • Access-Control-Allow-Credentials: рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ (рдХреБрдХреАрдЬрд╝, HTTP рдкреНрд░рдорд╛рдгреАрдХрд░рдг) рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ

ЁЯТб рдХреЙрд░реНрд╕ рд╕рдорд╛рдзрд╛рди

рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд╕рдорд╛рдзрд╛рди

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. рдЬреЗрдПрд╕рдУрдПрдирдкреА (рдХреЗрд╡рд▓ рдЧреЗрдЯ):

// рд╕реАрдорд┐рдд рд▓реЗрдХрд┐рди рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди
          fetch('api?callback=handleResponse')

ЁЯФз рдкрд░реНрдпрд╛рд╡рд░рдг рджреНрд╡рд╛рд░рд╛ рдХреЙрд░реНрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди

рдиреЗрдХреНрд╕реНрдЯ.рдЬреЗрдПрд╕

// 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"

рдкрд░реНрдпрд╛рд╡рд░рдг рджреНрд╡рд╛рд░рд╛ рдХреЙрд░реНрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди

рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рджреГрд╢реНрдп

  • тАв рд╕рд░рд▓ рдЕрдиреБрд░реЛрдз: рдЧреЗрдЯ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд╕рд╛рде рдмреБрдирд┐рдпрд╛рджреА рдХреЙрд░реНрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ
  • тАв рдкреНрд░реАрдлреНрд▓рд╛рдЗрдЯ рдЕрдиреБрд░реЛрдз: рдкреБрдЯ/рдбрд┐рд▓реАрдЯ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░реАрдлреНрд▓рд╛рдЗрдЯ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ
  • тАв рдХрд╕реНрдЯрдо рд╣реЗрдбрд░: рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╣реЗрдбрд░ рдХреЗ рд╕рд╛рде рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ
  • тАв рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓: рдХреБрдХреАрдЬрд╝ рдХреЗ рд╕рд╛рде рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ
  • тАв рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ: рд╡рд┐рдлрд▓рддрд╛ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ

рд╕реБрд░рдХреНрд╖рд╛ рд╡рд┐рдЪрд╛рд░

  • тАв рд╕реБрд░рдХреНрд╖рд╛ рдЬреЛрдЦрд┐рдореЛрдВ рдХреЗ рдХрд╛рд░рдг рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб (*) рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ
  • тАв рдиреНрдпреВрдирддрдо рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд: рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рдореВрд▓реЛрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ
  • тАв рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдкреНрд░рддрд┐рдмрдВрдз: рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╕рдордп рдХреЗрд╡рд▓ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореВрд▓реЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ
  • тАв рдирд┐рдпрдорд┐рдд рд╕рдореАрдХреНрд╖рд╛: рд╕рдордп-рд╕рдордп рдкрд░ рдХреЙрд░реНрд╕ рдиреАрддрд┐рдпреЛрдВ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдФрд░ рдЕрджреНрдпрддрди рдХрд░реЗрдВ

рдХреЙрд░реНрд╕ рдбрд┐рдмрдЧрд┐рдВрдЧ рдЯрд┐рдкреНрд╕

рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдбреЗрд╡рд▓рдкрд░ рдЙрдкрдХрд░рдг

  • тАв рдиреЗрдЯрд╡рд░реНрдХ рдЯреИрдм рдореЗрдВ OPTIONS рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ
  • тАв рдХрдВрд╕реЛрд▓ рдореЗрдВ рдХреЙрд░реНрд╕ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢реЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдВ
  • тАв рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реЗрдбрд░реЛрдВ рдореЗрдВ рдХреЙрд░реНрд╕ рд╣реЗрдбрд░реЛрдВ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ

рдЙрдкрдпреЛрдЧреА рдЙрдкрдХрд░рдг

  • тАв рдХреЙрд░реНрд╕ рдЯреЗрд╕реНрдЯрд░ (рдпрд╣ рдЙрдкрдХрд░рдг)
  • тАв рдкреЛрд╕реНрдЯрдореИрди (рдПрдкреАрдЖрдИ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП)
  • тАв рдХрд░реНрд▓ рдХрдорд╛рдВрдб (рд╕реАрдзреЗ рд╕рд░реНрд╡рд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП)