Axios: рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд░реЙрд╕-рд╕рд╛рдЗрдЯ рдкреЛрд╕реНрдЯ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 11 рдЬрдире░ 2016  ┬╖  70рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: axios/axios

рдирдорд╕реНрддреЗ,

рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡реЗ рдХреНрд░реЙрд╕-рд╕рд╛рдЗрдЯ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХреБрдЫ рд░рд┐рд▓реАрдЬрд╝ рдереАрдВ, рдлрд┐рд░ рднреА рдореИрдВ рдЗрд╕реЗ рдХрд╛рдо рдкрд░ рдирд╣реАрдВ рд▓рд╛ рд╕рдХрддрд╛ред рдореИрдВрдиреЗ рдкрд┐рдЫрд▓реА рдкреЛрд╕реНрдЯреЛрдВ рдХреЛ рдЦреЛрджрд╛ рдФрд░ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА:

  • рдХреНрд░реЙрд╕рдбреЛрдореЗрди: рд╕рдЪ
  • рдПрдХреНрд╕рдбреЛрдореЗрди: рд╕рдЪ
    *xDomainRequest: рд╕рдЪ

рдХреЙрдиреНрдлрд┐рдЧ рдХреЛред рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред (рдпрджрд┐ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ, рддреЛ рд░реАрдбрдореА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдорджрдж рдорд┐рд▓реЗрдЧреАред)

рдХреГрдкрдпрд╛ рдЬрд▓реНрдж рд╕рд▓рд╛рд╣ рджреЗрдВред рд╢реБрдХреНрд░рд┐рдпрд╛ред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЗрддрдирд╛ рдмрдбрд╝рд╛ рдореБрджреНрджрд╛ рдХреИрд╕реЗ рд╕реБрд▓рдЭрд╛рдпрд╛ рдирд╣реАрдВ рдЧрдпрд╛?

рд╕рднреА 70 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдореЗрдВ withCredentials рдХреЛ true рдкрд░ рднреА рд╕реЗрдЯ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдореИрдВ рдмрд╕ рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рднреА рднрд╛рдЧ рдЧрдпрд╛ рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдореИрдХ рдкрд░ рдореЗрд░реЗ рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдореЗрдВ 3 рджрд┐рди рдФрд░ рд░рд╛рддреЗрдВ рдмрд┐рддрд╛рдИрдВ рдФрд░ рд╡реЗрдирд┐рд▓рд╛ рдПрдХреНрд╕рдПрдЪрдЖрд░ рдЕрдиреБрд░реЛрдз рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдЖрдЬрдорд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдФрд░ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдореЗрд░рд╛ рдиреЗрдЯрд╡рд░реНрдХ рдирд╣реАрдВ рдереА, рдмрд▓реНрдХрд┐ рдЕрдХреНрд╖ред

рдореИрдВ рднреА рд╕рд╣реА рдкрд░ рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдХреЗ рд╕рд╛рде рдХреНрд░реЙрд╕-рд╕рд╛рдЗрдЯ рдЕрдиреБрд░реЛрдз рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдиреЗрдЯрд╡рд░реНрдХ рдЕрдиреБрд░реЛрдз рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдЖрдкрдХреЛ рдПрдХ ERR_EMPTY_RESPONSE рдорд┐рд▓рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЫреЛрдбрд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣реА рдЕрдиреБрд░реЛрдз рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдЬреИрд╕рд╛ рд╣реИред

рдпрд╣ рдореЗрд░рд╛ рд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИ:

const myApi = axios.create({
  baseURL: 'http://someUrl/someEndpoint',
  timeout: 10000,
  withCredentials: true,
  transformRequest: [(data) => JSON.stringify(data.data)],
  headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
});'

рдЕрдЧрд░ рдореБрдЭреЗ рдореМрдХрд╛ рдорд┐рд▓рд╛ рддреЛ рдореИрдВ рдЗрд╕ рдкрд░ рдФрд░ рдЧреМрд░ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред

рдУрд╣ рдЕрдЪреНрдЫрд╛ рдореИрдВ рдкрд╛рдЧрд▓ рдирд╣реАрдВ рд╣реВрдБред :) рдХреГрдкрдпрд╛ рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдЗрд╕ рдкрд░ рдЧреМрд░ рдХрд░реЗрдВред

рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдореЗрд░рд╛ рдореБрджреНрджрд╛ рдПрдХреНрд╕рд┐рдпреЛрд╕ рд╕реЗ рдЕрд╕рдВрдмрдВрдзрд┐рдд рдерд╛ред рд╕рд┐рд╕реНрдХреЛ рдПрдиреАрдХрдиреЗрдХреНрдЯ рдореЗрд░реА рдорд╢реАрди рд╕реЗ рд╡рд┐рдХрд▓реНрдк рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд░реЛрдХ рд░рд╣рд╛ рдерд╛ ... рдХреНрдпреЛрдВрдХрд┐ рдХрд╛рд░рдг?

рдХреНрд░реЙрд╕ рдбреЛрдореЗрди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдпрд╣ рдкреБрд░рд╛рдиреЗ IE рдХреЗ рд▓рд┐рдП XDomainRequest рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ред https://github.com/mzabriskie/axios/blob/master/lib/adapters/xhr.js#L22

рдХреНрдпрд╛ рдЖрдк рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдХреМрди рд╕рд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░, OS, axios рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг, рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ред

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

рд╕рд┐рд╕реНрдХреЛ рдПрдиреАрдХрдиреЗрдХреНрдЯ рдФрд░ рд╕рдВрднрд╡рддрдГ рдЕрдиреНрдп рд╡реАрдкреАрдПрди рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдкрд┐рдд рдореИрдХ рдкрд░ рдХреНрд░реЙрд╕ рд╕рд╛рдЗрдЯ рдЕрдиреБрд░реЛрдз рдХрд░рдХреЗ рдЗрд╕реЗ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдореЗрд░рд╛ рдкрд░реНрдпрд╛рд╡рд░рдг рд╣реИ:

  • рдЕрдХреНрд╖ 0.8.1
  • рдПрд▓ рдХреИрдкрд┐рдЯрд╛рди
  • рдХреНрд░реЛрдо
  • рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢: "рдирд╣реАрдВ 'рдкрд╣реБрдВрдЪ-рдирд┐рдпрдВрддреНрд░рдг-рдЕрдиреБрдорддрд┐ рджреЗрдВ-рдЙрддреНрдкрддреНрддрд┐' рд╢реАрд░реНрд╖рд▓реЗрдЦ рдЕрдиреБрд░реЛрдзрд┐рдд рд╕рдВрд╕рд╛рдзрди рдкрд░ рдореМрдЬреВрдж рд╣реИред рдЙрддреНрдкрддреНрддрд┐ ' http://localhost : 3000' рдЗрд╕рд▓рд┐рдП рдкрд╣реБрдВрдЪ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИред"

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╡рд╣реА рдЕрдиреБрд░реЛрдз рдХрд░реНрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЗрд╕ рдорд╛рдорд▓реЗ рдХреА рддрд▓рд╛рд╢ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рд╕реАрдУрдЖрд░рдПрд╕ рдХреЗ рд╕рд╛рде рд╕рд░реНрд╡рд░ рд╕реЗ рдПрдХ рдкреНрд░реАрдлреНрд▓рд╛рдЗрдЯ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХреЗ рдХрд┐ рдЕрдиреБрд░реЛрдз рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдЖрдк рдЕрдиреБрд░реЛрдз рд╣реИ рдХрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА OPTIONS рдЕрдиреБрд░реЛрдз рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдзрд┐ рдХреА рд╕реНрдерд╛рдкрдирд╛ рджреНрд╡рд╛рд░рд╛ рд╣реИрдбрд░ Acces-Control-Allow-Origin: * рдЬреЛ рдХрд┐рд╕реА рднреА рдореВрд▓ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдЖрдк рдХреЗрд╡рд▓ рдХреБрдЫ рдореВрд▓ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ Acces-Control-Allow-Origin: http://example.com ред

рд╣рд╛рдВ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рд╕рд░реНрд╡рд░ рдореЗрд░рд╛ рдирд╣реАрдВ рд╣реИред рдореИрдВ рдПрдХ рдмрд╛рд╕ (рдмреИрдХрдПрдВрдб-рдП-рдП-рд╕рд░реНрд╡рд┐рд╕) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдФрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдореЗрд░реЗ рдбреЛрдореЗрди рдХреЛ рдЕрдиреБрдордд рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рд╣реИред рдореИрдВрдиреЗ рдЬрд╛рдБрдЪ рдХреА рд╣реИ рдХрд┐ рдЙрдХреНрдд рдмрд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЛ рдРрд╕реА рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рддреЛ рдирд╣реАрдВ рд╣реБрдИ рд╣реИред

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

рдХреНрдпрд╛ рдЖрдк рдЕрдкрдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдиреЗрдЯрд╡рд░реНрдХ рдЯреИрдм рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡рд┐рдХрд▓реНрдк рдЕрдиреБрд░реЛрдз рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдкрдХреЛ рдЬреЛ рдорд┐рд▓рддрд╛ рд╣реИ рдЙрд╕реЗ рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдбреЗрдЯрд╛ рдФрд░ рд╣реЗрдбрд░ рджреЗрдЦрдиреЗ рд╕реЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдбреАрдмрдЧ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреАред

рдзрдиреНрдпрд╡рд╛рдж

рдпрд╣рд╛рдВ рд╢реАрд░реНрд╖рд▓реЗрдЦ рд╣реИрдВ:

image

рдЬрдм рдореИрдВ рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреЛ рдЙрдирдХреЗ API рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП axios рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ GitHub рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╢реАрд░реНрд╖рд▓реЗрдЦ рдпрд╣рд╛рдВ рджрд┐рдП рдЧрдП рд╣реИрдВ:

screen shot 2016-01-19 at 11 36 54 am

рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ GitHub Access-Control-Allow-Origin: * рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдЖрдкрдХреЗ Baas рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХреЛрдИ рднреА Access-Control рдЯрд╛рдЗрдк рд╣реЗрдбрд░ рдирд╣реАрдВ рд╣реИред

рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБ рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБред рд╕реБрдкрд░ рджреЗрд░ рд╕реЗ рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИред рдореБрдЭреЗ рдЗрд╕ рдкрд░ рдереЛрдбрд╝рд╛ рдФрд░ рдЧреМрд░ рдХрд░рдиреЗ рджреЗрдВред рдЖрдкрдХрд╛ рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдЬреЛ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдпрд╛ рдирд╣реАрдВред рдореВрд▓ рд░реВрдк рд╕реЗ, рдореИрдВ рдЕрдкрдиреЗ рд░рд┐рдореЛрдЯ рд╕рд░реНрд╡рд░ рдХреЛ рдПрдХ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЕрдиреБрд░реЛрдз рднреЗрдЬ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдПрдХ рдХреБрдХреА рд╡рд╛рдкрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╕рд░реНрд╡рд░ рдкрд░ рдЖрдиреЗ рд╡рд╛рд▓реА рдХреЙрд▓ _don't_ рдЙрдирдХреЗ рд╕рд╛рде рдХреБрдХреАрдЬрд╝ рднреЗрдЬрддреА рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИред

рдпрд╣рд╛рдВ POST рдХреЙрд▓ рд╕реЗ рд▓реЙрдЧрд┐рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реАрд░реНрд╖рд▓реЗрдЦ рджрд┐рдП рдЧрдП рд╣реИрдВ:
login

рдФрд░ рдЕрдм рдПрдХ рдлреЙрд▓реЛрдЕрдк GET рдХреЙрд▓:
verify

origin рдЕрдВрддрд░реНрдЧрдд рд╕реВрдЪреАрдмрджреНрдз IP рдкрддрд╛ рдореЗрд░рд╛ рдЕрдкрдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдЕрдЧрд░ рдпрд╣ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЧрд▓рдд рдЬрдЧрд╣ рд╣реИ, рддреЛ рдореБрдЭреЗ рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдмрдирд╛рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛ рд░рд╣реА рд╣реИ, рдпрд╛ рдЙрдкрдпреБрдХреНрдд рдореМрдЬреВрджрд╛ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред

рдПрдХ рдирдИ рд╢рд┐рдХрди рдХреЗ рд░реВрдк рдореЗрдВ; рдореИрдВрдиреЗ рд╕реАрдзреЗ XHR рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЕрдиреБрд╡рд░реНрддреА GET рдХреЙрд▓ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдХреБрдХреА рдХреЛ рдареАрдХ рд╕рд╛рде рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, Axios рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╣реА рдХреЙрд▓ рдХрд░рдирд╛, рдЙрд╕реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореИрдВрдиреЗ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИред

рдЙрд╣ред рдХреГрдкрдпрд╛ рдЕрд╡рд╣реЗрд▓рдирд╛ рдХрд░реЗрдВ - рдореИрдВ рдПрдХреНрд╕рд┐рдпреЛрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рдЪреАрдЬреЛрдВ рдХреЛ рдирд╣реАрдВ рднреЗрдЬ рд░рд╣рд╛ рдерд╛ :)

рдореИрдВ рднреА рдЗрд╕реА рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред
рд╡рд┐рдХрд▓реНрдк рдХреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреЛрд╕реНрдЯ рдХреЙрд▓ рдХреЛрд░ рдореЗрдВ рдлрдВрд╕ рдЬрд╛рддрд╛ рд╣реИред
http://stackoverflow.com/questions/36907693/axios-cors-issue-with-github-oauth-not-getting-access-token

рдЗрддрдирд╛ рдмрдбрд╝рд╛ рдореБрджреНрджрд╛ рдХреИрд╕реЗ рд╕реБрд▓рдЭрд╛рдпрд╛ рдирд╣реАрдВ рдЧрдпрд╛?

+1

+1

+1

+1

+1

+1

+1

@dsacramon рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬреЛ рдЖрдк рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ? рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд░рд┐рдкреЛрд░реНрдЯ рдХреА рдЬрд╛ рд░рд╣реА рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╕рд░реНрд╡рд░ рдпрд╛ рдЭреВрдареЗ рдЕрд▓рд╛рд░реНрдо рдХреА рд╕рдорд╕реНрдпрд╛ рд╣реИрдВред рдпрджрд┐ рдХреЛрдИ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рддреНрд░реБрдЯрд┐ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рдареАрдХ рдХрд░рдиреЗ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред

рдЗрд╕реЗ рднреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛

XMLHttpRequest https://en.wikipedia.org/w/api.php?action=opensearch&format=json&search=fish рд▓реЛрдб рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ http://localhost : 3000' рдЗрд╕рд▓рд┐рдП рдкрд╣реБрдВрдЪ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИред

рдЗрд╕реЗ рдлрд╝реЗрдЪ рдЯреВ рдиреЛрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдХреНрд░реЛрдо рдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЕрдкрдиреА рдЕрдиреБрд░реЛрдз рд╕реЗрдЯрд┐рдВрдЧ рдиреАрддрд┐ рдХреЛ рдФрд░ рд╕рдЦреНрдд рдмрдирд╛ рджрд┐рдпрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╢реАрд░реНрд╖рд▓реЗрдЦ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА (рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛)ред

рдпрд╣рд╛рдВ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рджреЛрдиреЛрдВ рдиреЗ https рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛)

рдЙрджрд╛рд╣рд░рдг 1 - рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

axios.get('https://randomuser.me/api/')
  .then(function (response) {
    console.log(response.data);
  })
  .catch(function (error) {
    console.log(error);
  });

рдЙрджрд╛рд╣рд░рдг 2 - рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ - рддреНрд░реБрдЯрд┐ рджрд┐рдЦрд╛ рд░рд╣рд╛ рд╣реИ?

axios.get('https://en.wikipedia.org/w/api.php?action=opensearch&format=json&search=fish')
  .then(function (response) {
    console.log(response.data);
  })
  .catch(function (error) {
    console.log(error);
  });

рдпрд╣рд╛рдБ рддреНрд░реБрдЯрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реИ

[object Error] {
  config: [object Object] {
    data: undefined,
    headers: [object Object] { ... },
    maxContentLength: -1,
    method: "get",
    timeout: 0,
    transformRequest: [object Object] { ... },
    transformResponse: [object Object] { ... },
    url: "https://en.wikipedia.org/w/api.php?action=opensearch&format=json&search=fish",
    validateStatus: function validateStatus(status) {
      return status >= 200 && status < 300;
    },
    xsrfCookieName: "XSRF-TOKEN",
    xsrfHeaderName: "X-XSRF-TOKEN"
  },
  response: undefined
}

рдХреБрдЫ рдРрд╕рд╛ рдЬреЛ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдореЗрд╢рди рдореЗрдВ рд╣реИ? рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдБ рдХрд┐ PROTECTION_PREFIX рдмрд┐рдЯ рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ?

[object Object] {
  0: function transformResponse(data) {
      /*eslint no-param-reassign:0*/
      if (typeof data === 'string') {
        data = data.replace(PROTECTION_PREFIX, '');
        try {
          data = JSON.parse(data);
        } catch (e) { /* Ignore */ }
      }
      return data;
    }
}

рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реБрдП рднреА

рдореЛрдб: 'рдиреЛ-рдХреЙрд░реНрд╕'
рд▓рд╛рдиреЗ рдореЗрдВ рдЕрднреА рднреА рдпрд╣ рддреНрд░реБрдЯрд┐ рджреЗрддрд╛ рд╣реИ

рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЙрддреНрддрд░ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИрдВ рдФрд░ рдмрд╕ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╢реАрд░реНрд╖рд▓реЗрдЦ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдмрд╕ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЦреЗрд▓рддрд╛ рд░рд╣реЗрдЧрд╛ред

рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдПрдкреАрдЖрдИ рд╕рд┐рд░реНрдл рдПрдХ рднрджреНрджрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рджреВрд╕рд░реЛрдВ рдкрд░ рдПрдХ рд╣реА рддреНрд░реБрдЯрд┐?

рдореИрдВ рдЗрд╕ рдХреЛрдб рдХреЛ рд╣рдЯрд╛рддрд╛ рд╣реВрдВ, рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ: axios.defaults.withCredentials = true

рдореБрдЭреЗ jsonp . рдХреЗ рд╕рд╛рде рдареАрдХ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдПрдкреАрдЖрдИ рдорд┐рд▓рд╛ рд╣реИ

var jsonp = require('jsonp');

// search for 'frog'
jsonp('https://en.wikipedia.org/w/api.php?action=opensearch&search=frog&format=json', null, function (err, data) {
  if (err) {
    console.error(err.message);
  } else {
    console.log(data);
  }
});

рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

Axios рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ред рдпрд╣рд╛рдБ рдореЗрд░реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдШрдЯрдХ рд╣реИ:

import React, { Component } from 'react'
import axios from 'axios'

export default class User extends Component {
  constructor(props){
    super(props)

    // axios.defaults.withCredentials = true

    const config = {
    method: 'get',
    url: 'https://api.airbnb.com/v2/users/2917444?client_id=3092nxybyb0otqw18e8nh5nty&_format=v1_legacy_show',
    headers: {'X-Requested-With': 'XMLHttpRequest'},
    responseType: 'json',
    withCredentials: true,
  }

    axios.request(config)
      .then(response => { console.log('response: ', response) });

  }

  render() {
    return (
      <div>User</div>
    )
  }
}

_рдиреЛрдЯ: рдореИрдВ рдиреЛрдб рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде рдПрдкреАрдЖрдИ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдареАрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред_

рдореИрдВ рдЙрд╕реА рддреНрд░реБрдЯрд┐ рдореЗрдВ рднрд╛рдЧ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ @Sinistralis рд╣реИред рдореИрдХ рдУрдПрд╕рдПрдХреНрд╕ рдореЗрдВ рдХреНрд░реЛрдо рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдореБрдЭреЗ рд╕реАрдУрдЖрд░рдПрд╕ рдЕрдиреБрд░реЛрдзреЛрдВ рдкрд░ net::ERR_EMPTY_RESPONSE рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдареАрдХ рд╕реЗ рдХрд┐рдП рдЧрдП рд╣реИрдВ (рдореЗрд░рд╛ рд╕рд░реНрд╡рд░ рд╡рд┐рдХрд▓реНрдк рд╕рд╣рд┐рдд рд╕рднреА рд╕реАрдУрдЖрд░рдПрд╕ рд╢реАрд░реНрд╖рд▓реЗрдЦреЛрдВ рдХреЛ рдареАрдХ рд╕реЗ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ)ред рдпрд╣ рдЕрдЬреАрдм рд╣реИ рдХреНрдпреЛрдВрдХрд┐ iOS10 рд╕рдлрд╛рд░реА рдкрд░, рдареАрдХ рд╡рд╣реА рдХреЛрдб рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдЖрдк рдкрд░ рдереЛрдбрд╝рд╛ рдФрд░ рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗред

рдХреНрд░реЛрдо рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдкреБрд░рд╛рдиреЗ рдореИрдХ (10.11) рдкрд░, рдореИрдВ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рдареАрдХ рдЙрд╕реА рдХреЛрдб рдХреЗ рд╕рд╛рде рдкреБрди: рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдпреЗ рд╡рд╛рдХрдИ рдмрд╣реБрдд рдЕрдЬреАрдм рд╣реИ. рдЖрдк рдЗрд╕ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдРрдк рдкрд░ рдЬрд╛рдХрд░ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ: http://lights.suyashkumar.com рдФрд░ рдХрдВрд╕реЛрд▓ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг (рдХреЛрдб рдпрд╣рд╛рдВ рд╣реИ ред рдХреБрдЫ рдорд╢реАрдиреЛрдВ рдкрд░ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реЛрдЧреА рдФрд░ рдпрд╣ рдЖрдкрдХреЛ рд▓реЙрдЧрд┐рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред рджреВрд╕рд░реЛрдВ рдкрд░ рдпрд╣ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдФрд░ рдЖрдкрдХреЛ рдореБрдЦреНрдп рдкреГрд╖реНрда рдкрд░ рдЫреЛрдбрд╝ рджреЗрдЧрд╛ред

рдореЗрд░реА рддреНрд░реБрдЯрд┐ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд┐рдпрд╛ред рдореЗрд░реЗ рд▓рд┐рдП, рдЖрд╡реЗрджрди рдкреНрд░рд╛рд░рдВрдн рдкрд░ рд╢реВрдиреНрдп рдорд╛рди рдХреЗ рд╕рд╛рде config.headers рдореЗрдВ рд╢реАрд░реНрд╖рд▓реЗрдЦ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдореЗрдВ рдпрд╣ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдереА (рдпрд╣ рд╕реНрдерд╛рдиреАрдп рд╕рдВрдЧреНрд░рд╣рдг рд╕реЗ рдПрдХ рдорд╛рди рдЦреАрдВрдЪрддрд╛ рд╣реИ, рдФрд░ рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ)ред рдорд╛рди рдХреЛ рд░рд┐рдХреНрдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрд╕рд╛рдЗрди рдХрд░рдирд╛ рдЬрдм рдорд╛рди рд╢реВрдиреНрдп рд╣реЛрддрд╛ рд╣реИ рддреЛ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИред рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдпрд╣ рдРрд╕рд╛ рдХреБрдЫ рд╣реИ рдЬреЛ axios рдХреЗ рднреАрддрд░ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╢реВрдиреНрдп рд╣реЗрдбрд░ рдХреЛ xhr рдореЗрдВ рдкрд╛рд╕ рдХрд░рдиреЗ рдореЗрдВ рдореВрд▓реНрдп рд╣реИ рдпрджрд┐ рдпрд╣ _ рдХрднреА-рдХрднреА_ рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИ)ред

рдЗрд╕реА рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ рд╡рд╛рд▓реЗ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдХреБрдЫ рд╡реАрдкреАрдПрди рдХреНрд▓рд╛рдЗрдВрдЯ рд╡рд┐рдХрд▓реНрдк рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рднреА рд░реЛрдХ рд╕рдХрддреЗ рд╣реИрдВ ( рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ)

рднреНрд░рд╛рдордХ CORS рддреНрд░реБрдЯрд┐ рдЕрднреА рднреА рдЕрдХреНрд╖ рдореЗрдВ рд╣реИред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП fetch рдкреЙрд▓реАрдлрд╝рд┐рд▓ mode: 'no-cors' рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЪрд╛рд▓рд┐рдд рдЕрдиреНрдп рд╡рд╛рддрд╛рд╡рд░рдгреЛрдВ рдореЗрдВ рдорд╢реАрдиреЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд╡рд┐рднрд┐рдиреНрди рдмрдВрджрд░рдЧрд╛рд╣реЛрдВ рдкрд░ рдПрдХ рд╣реА рдорд╢реАрди рдкрд░ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ!

@dreki рдХреГрдкрдпрд╛ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдореБрджреНрджреЗ рдХрд╛ рд╡рд┐рд╡рд░рдг рдкреНрд░рджрд╛рди рдХрд░реЗрдВред

рдЖрдк рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдкрд░ рдХреБрдЫ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдЬрдм рд╕рд░реНрд╡рд░ рдХреЗрд╡рд▓ рдЖрдкрдХреЗ рдореВрд▓ рд╕реЗ рдЕрдиреБрд░реЛрдз рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░реЗ рдпрд╣рд╛рдВ рдПрдХ рдмрдбрд╝реА рд╕реБрд░рдХреНрд╖рд╛ рд░рд┐рд╕рд╛рд╡ рд╣реЛрдЧреА (рдФрд░ "рд╣рдо" рдХреЗ рд╕рд╛рде рдореЗрд░рд╛ рдорддрд▓рдм рд╕рдВрдкреВрд░реНрдг рдЗрдВрдЯрд░рдиреЗрдЯ рд╣реИ) ...

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ axios рдпрд╣рд╛рдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрд░реВрдк рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИред

рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╢реАрд░реНрд╖рд▓реЗрдЦ Access-Control-Allow-Origin рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдорд╛рдиреНрдп рдореВрд▓ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рдиреНрд╣реЗрдВ рдЗрд╕ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд╕реЗрд╡рд╛ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред рдпрджрд┐ рдЖрдкрдХрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рдореВрд▓ рд╕реЗ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рдЗрд╕ рддрд░рд╣ рдХреА рдХрдВрд╕реЛрд▓ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдЕрдиреБрд░реЛрдз рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:

XMLHttpRequest http://localhost :8080/v1/api/search?q=candles рд▓реЛрдб рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдЕрдиреБрд░реЛрдзрд┐рдд рд╕рдВрд╕рд╛рдзрди рдкрд░ рдХреЛрдИ 'рдкрд╣реБрдВрдЪ-рдирд┐рдпрдВрддреНрд░рдг-рдЕрдиреБрдорддрд┐ рджреЗрдВ-рдЙрддреНрдкрддреНрддрд┐' рд╢реАрд░реНрд╖рд▓реЗрдЦ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред рдЙрддреНрдкрддреНрддрд┐ ' http://localhost :9999' рдЗрд╕рд▓рд┐рдП рдПрдХреНрд╕реЗрд╕ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИред

рдЖрдк рдЕрддрд┐рдерд┐ рд╕реВрдЪреА рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВред

рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд┐рдпрд╛ред
localhost:3000 рдкрд░ рдореЗрд░реЗ vue рдРрдк рд╕реЗ localhost:8080 рдкрд░ рдореЗрд░реА рдПрдХреНрд╕рдкреНрд░реЗрд╕ рдПрдкреАрдЖрдИ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдПрдХ рддреНрд░реБрдЯрд┐ рд╡рд╛рдкрд╕ рдорд┐рд▓ рд░рд╣реА рдереАред
рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ http:// рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред
рддреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ http://localhost:3000 рдХреЗ рдмрдЬрд╛рдп localhost:3000 рдЬрдм рджреЗрд╡ рдкрд░реАрдХреНрд╖рдг рдХрд░ред

рдореБрдЭреЗ рд╡рд┐рдХрд┐рдореАрдбрд┐рдпрд╛ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рдереАред рдЙрдирдХреЗ CORS рдкреГрд╖реНрда (https://www.mediawiki.org/wiki/Manual:$wgCrossSiteAJAXdomains) рдореЗрдВ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ рдореИрдВрдиреЗ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдореВрд▓ = * рдЬреЛрдбрд╝рд╛ рдФрд░ рдЗрд╕рдиреЗ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░ рджрд┐рдпрд╛ред

axios.get('https://en.wikipedia.org/w/api.php?action=opensearch&format=json&origin=*&search=Albert') .then(function(res) { console.log(res); }) .catch(function(err) { console.log('Error: =>' + err); })

рднрд▓реЗ рд╣реА рдореБрдЭреЗ рдбрд░рд╛рд╡рдирд╛ cors рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдорд┐рд▓рд╛, рдореЗрд░рд╛ рдЕрдиреБрд░реЛрдз рд╕рд░реНрд╡рд░ рдХреЛ рдорд╛рд░ рд░рд╣рд╛ рдерд╛ред

XMLHttpRequest cannot load "...url here...". No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access.

Axios рдЯреАрдо, рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ???

@mellogarrett рдпрд╣ рдПрдХ рдЕрдХреНрд╖реАрдп рд╕рдВрдмрдВрдзрд┐рдд рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕реЗ рдкрдврд╝реЗрдВ: https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS

рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЙрджреНрдзрд░рдг:

"рд╕реБрд░рдХреНрд╖рд╛ рдХрд╛рд░рдгреЛрдВ рд╕реЗ, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рднреАрддрд░ рд╕реЗ рд╢реБрд░реВ рдХрд┐рдП рдЧрдП рдХреНрд░реЙрд╕-рдУрд░рд┐рдЬрд┐рди HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, XMLHttpRequest рдФрд░ Fetch рд╕рдорд╛рди-рдореВрд▓ рдиреАрддрд┐ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, XMLHttpRequest рдпрд╛ Fetch рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рдбреЛрдореЗрди рдХреЗ рд▓рд┐рдП HTTP рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╕реБрдзрд╛рд░, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рдХреНрд░реЗрддрд╛рдУрдВ рд╕реЗ рдХреНрд░реЙрд╕-рдбреЛрдореЗрди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ред"

рдЬрд┐рди рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЙрдирдореЗрдВ рд╕реЗ рдХрдИ рдХреЗ рдкрд╛рд╕ рд╢рд╛рдпрдж рд╡рд┐рдХрд▓реНрдк рдЕрдиреБрд░реЛрдз рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рд╡рд╛рд▓рд╛ рд╕рд░реНрд╡рд░ рдирд╣реАрдВ рд╣реИред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ OPTIONS рдФрд░ POST рдЕрдиреБрд░реЛрдзреЛрдВ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИрдВрдбрд▓рд░ (CORS рд╣реЗрдбрд░ рдХреЗ рд╕рд╛рде) рд╣реИрдВред рдХреНрд▓рд╛рдЗрдВрдЯ (Axios) рдкрд╣рд▓реЗ OPTIONS рдХреЛ рдкрд┐рдВрдЧ рдХрд░реЗрдЧрд╛ рдФрд░ рдлрд┐рд░ POST рдХрд░реЗрдЧрд╛ред

рдореБрдЭреЗ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдкрд░ рд╡рд╣реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрд░реЛрдорд┐рдпрдо рдкрд░ рдирд╣реАрдВред рддрдм рдореБрдЭреЗ рдпрд╛рдж рдЖрдпрд╛ рдХрд┐ рдиреЛрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд╣рд╛рдВ (рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдореЗрдВ) рд░рд┐рдореЛрдЯ рд╕рд░реНрд╡рд░ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХреЛ рд░реЛрдХ рд░рд╣рд╛ рдерд╛ред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ NoScript (рдпрд╛ рд╕рдорд╛рди рдкреНрд▓рдЧрдЗрди) рд╕реНрдерд╛рдкрд┐рдд рд╣реИ, рддреЛ рдкрд╣рд▓реЗ рдЙрд╕реЗ рдЬрд╛рдВрдЪреЗрдВред
рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдореБрджреНрджрд╛ рдПрдХреНрд╕рд┐рдпреЛрд╕ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рдерд╛ред рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдХрд┐рд╕реА рдФрд░ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рдкрд╛рд╕ рд╕рднреА рд╕рдорд╛рди рд▓рдХреНрд╖рдг рдереЗ рд▓реЗрдХрд┐рди рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХ php.ini рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ред

рдореЗрд░рд╛ рдкреНрд░реАрдлреНрд▓рд╛рдЗрдЯ рд╡рд┐рдХрд▓реНрдк рдЕрдиреБрд░реЛрдз рд╕рдлрд▓ рд░рд╣рд╛ рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рдЙрдЪрд┐рдд POST рдЕрдиреБрд░реЛрдз рдЖрдпрд╛ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрднреА рднреА @mellogarrett рдХреЗ рд╕рдорд╛рди No 'Access-Control-Allow-Origin' header is present on the requested resource... рдорд┐рд▓ рд░рд╣рд╛ рдерд╛ред рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдЬреАрдм рд▓рдЧ рд░рд╣рд╛ рдерд╛ рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ CORS рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Chrome рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдЙрд╕рдХреЗ рдмрд╛рдж, рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рдерд╛ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ PHP рддреНрд░реБрдЯрд┐ рдереА:

Deprecated: Automatically populating $HTTP_RAW_POST_DATA is deprecated and will be removed in a future version. To avoid this warning set 'always_populate_raw_post_data' to '-1' in php.ini and use the php://input stream instead. in Unknown on line 0

рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдпрджрд┐ рдЖрдк PHP 5.6 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдЕрдкрдиреЗ php.ini рдореЗрдВ always_populate_raw_post_data рдХреЛ рдЕрдирдХрдореНрдореЗрдВрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ -1 рд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдФрд░ рдХреЛ рд╕рдорд╕реНрдпрд╛ рдирд┐рд╡рд╛рд░рдг рдХреЗ рдХреБрдЫ рдШрдВрдЯреЛрдВ рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реИ

рдЕрд░реЗ @daltonamitchell рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ (рд╢рд░реНрддреЗрдВ рдмрддрд╛рддреА рд╣реИрдВ рдХрд┐ рдпрд╣ рд╡рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ)ред рд▓реЗрдХрд┐рди рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ: рдЖрдкрдиреЗ рдХреИрд╕реЗ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдХрд┐ рд░реЙ рдкреЛрд╕реНрдЯ рдбреЗрдЯрд╛-рдПрд░рд░ рд╕рдорд╕реНрдпрд╛ рдереА? рдХреНрд░реЛрдо рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЖрдкрдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рд╕реАрдУрдЖрд░рдПрд╕ рдЕрдиреБрд░реЛрдз рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рдм рдХреБрдЫ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣реЗрдбрд░ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╕реЗрдЯ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж рдореИрдВ рдЗрд╕реЗ рдкреНрд▓рдЧрдЗрди рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рддреЛ рд╢рд╛рдпрдж рдмрд╣рд┐рд╖реНрдХрд░рдг рд╕рдВрджреЗрд╢ рдЕрднреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛ рдЕрднреА рднреА рд╣реЛ рд╕рдХрддреА рд╣реИ ...? рдХреНрдпрд╛ рдЖрдк рдХреБрдЫ рд╕рд▓рд╛рд╣ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕рдХреА рдЬрд╛рдВрдЪ рдХреИрд╕реЗ рдХрд░реЗрдВ?

@ RT-TL рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ CORS рдХреЛ рдмреНрд▓реЙрдХ рдХрд┐рдП рдмрд┐рдирд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рд╛рдордЧреНрд░реА рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрд░реАрдХреНрд╖рдг рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдореИрдВ рд╕рд┐рд░реНрдл Hello World рддрд░рд╣ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реМрдЯрд╛ рд░рд╣рд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдПрдХ рдмрд╛рд░ рдЬрдм рдореИрдВрдиреЗ CORS рдХреЛ рдЕрдХреНрд╖рдо рдХрд░ рджрд┐рдпрд╛ рддреЛ рдореИрдВрдиреЗ рдХреБрдЫ рдРрд╕рд╛ рджреЗрдЦрд╛

Deprecated: Automatically populating $HTTP_RAW_POST_DATA is deprecated and will be removed in a future version. To avoid this warning set 'always_populate_raw_post_data' to '-1' in php.ini and use the php://input stream instead. in Unknown on line 0
Hello World

рдЕрдкрдиреЗ рдирд┐рдпрдВрддреНрд░рдХ рд╡рд┐рдзрд┐ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE) рдпрд╛ error_reporting(E_ALL) рдЬреЛрдбрд╝рдХрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ PHP рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдВ рд╕рдХреНрд╖рдо рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЕрднреА рднреА рдХреБрдЫ рднреА рдирд╣реАрдВ рджреЗрдЦрддреЗ рд╣реИрдВ рддреЛ рдореИрдВ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рд░рд▓ JSON рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рд╡реЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рджрд┐рдЦрддреЗ рд╣реИрдВред

рдХреНрдпрд╛ рдХреЛрдИ рдЕрднреА рднреА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ? рдореИрдВ рдЙрд╕реА рдореЗрдВ рднрд╛рдЧ рд░рд╣рд╛ рд╣реВрдБ:

const instance = axios.create({
    baseURL: 'http://localhost/',
    responseType: 'json',
    headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
        'Authorization': 'test',
        'X-Test': 'testing'
    }
})
axios.get('v2/portal/bar/foo?')

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╢реАрд░реНрд╖рд▓реЗрдЦ

HTTP/1.1 401 Unauthorized
Server: nginx/1.11.10
Date: Fri, 24 Mar 2017 07:12:13 GMT
Content-Type: application/json; charset=UTF-8
Content-Length: 0
Connection: keep-alive
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, PUT, DELETE, GET, OPTIONS
Access-Control-Allow-Headers: *

рдЕрдиреБрд░реЛрдз рд╢реАрд░реНрд╖рд▓реЗрдЦ

OPTIONS /v2/portal/bar/foo? HTTP/1.1
Host: localhost
Connection: keep-alive
Access-Control-Request-Method: GET
Origin: http://localhost:3000
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36
Access-Control-Request-Headers: authorization,content-type,x-test
Accept: */*
Referer: http://localhost:3000/dashboard/report
Accept-Encoding: gzip, deflate, sdch, br
Accept-Language: en-US,en;q=0.8,fr;q=0.6,nl;q=0.4,zh-TW;q=0.2,zh;q=0.2,zh-CN;q=0.2

рдореИрдВ рд╕рдордЭ рдирд╣реАрдВ рдкрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░рд╛ рдХреЛрдИ рднреА рд╣реЗрдбрд░ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреНрдпреЛрдВ рдирд╣реАрдВ рднреЗрдЬрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдпрд╣рд╛рдВ рд╡рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ, рд╡рд┐рдХрд▓реНрдк рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреЛрд╕реНрдЯ рдЕрдиреБрд░реЛрдз рдирд╣реАрдВ рд╣реИред

TLDR: рдЬрдм рддрдХ рдореИрдВ JSON.stingify рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛, рддрдм рддрдХ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдПрдХреНрд╕рд┐рдпреЛрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ

рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рднреА рджреЗрдЦрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╡рд┐рдХрд▓реНрдк рдХреНрд░реЙрд╕ рдореВрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реЗрдбрд░ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде 200 рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдИ рдкреЛрд╕реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВ рдЗрд╕ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдХрд┐рд╕реА рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдореЗрд░реЗ рдЕрдиреБрд░реЛрдз рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:

рдореЗрд░рд╛ рд╕рд░реНрд╡рд░ Access-Control-Allow-Origin: * рд╕рд╛рде рдЬрд╡рд╛рдм рджреЗ рд░рд╣рд╛ рд╣реИ
рдпрд╣рд╛рдВ рдХреЛрдб рдФрд░ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдХреЗ рд╕рд╛рде рд╕рднреА рдЙрджрд╛рд╣рд░рдг рджрд┐рдП рдЧрдП рд╣реИрдВ:

рдЕрдХреНрд╖:

axios.post('http://localhost:3001/card', { test: 'test' })

axios_cors


рд▓рд╛рдирд╛:

    return fetch('http://localhost:3001/card', {
      method: 'POST',
      body: { test: 'test' },
    })

fetch_no_stringify

JSON.stringify

    return fetch('http://localhost:3001/card', {
      method: 'POST',
      body: JSON.stringify({ test: 'test' }),
    })

fetch_cors

рдореИрдВ JSON.stringify рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдПрдХреНрд╕рд┐рдпреЛрд╕ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛:

    return axios.post('http://localhost:3001/card', JSON.stringify({ test: 'test' }));

axios_json_stringify

рдореБрдЭреЗ рдЙрд╕реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рдерд╛ рдЬреИрд╕рд╛ рдХрд┐ @khitaker рдиреЗ рд╕рдордЭрд╛рдпрд╛, axios рдореЗрд░реА рдХреБрдХреА рдХреЛ рдареАрдХ рд╕реЗ рдирд╣реАрдВ рднреЗрдЬ рд░рд╣рд╛ рдерд╛ рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдХрдо рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ рд╣реБрдИрдВ (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реБрд░рдХреНрд╖рд╛ рдЪрд┐рдВрддрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг)ред рджреВрд╕рд░реА рдУрд░ рдирд┐рдпрдорд┐рдд XHR рдЕрдиреБрд░реЛрдз рдиреЗ рдареАрдХ рдХрд╛рдо рдХрд┐рдпрд╛ред рдлрд┐рд░ рдЬреИрд╕рд╛ рдХрд┐ @zlyi рдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдХрд┐ рдореИрдВрдиреЗ рдЕрднреА axios.defaults.withCredentials = true; рд▓рд╛рдЗрди рдЬреЛрдбрд╝реА рд╣реИ рдФрд░ рд╕рдм рдХреБрдЫ рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрд╛ред

рд╕рдм рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдЕрднреА рднреА рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИред :(

рд╕рдм рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдЕрднреА рднреА рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИред :(

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛ .htacsess рдореЗрдВ рдЬреЛрдбрд╝рдХрд░ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ рд╣реИ:

<IfModule mod_headers.c> 
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type" 
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS" 
</IfModule>

рдореИрдВ рдкреНрд░реЙрдХреНрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред рдкреНрд░реЙрдХреНрд╕реА рдХреЛ package.json

{
    "proxy": "http://some-url/some-endpoint"
}

рдлрд┐рд░ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВ:

axios.get('/user?ID=12345')
  .then(function (response) {
    console.log(response)
  })
  .catch(function (error) {
    console.log(error)
  })

рдпрд╣ рдПрдХ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдЖрдкрдХреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╢реАрд░реНрд╖рд▓реЗрдЦ рдореЗрдВ 'Acces-Control-Allow-Origin': '*' рд╣реИред рдпрджрд┐ рдЖрдк рдПрдХреНрд╕рдкреНрд░реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЕрдзрд┐рдХ рдордЬрдмреВрдд/рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП npm-cors рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

+1 @ProfNandaa
рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд╕реНрдерд╛рдиреАрдп рд╕рд░реНрд╡рд░ рдореЗрдВ рдПрдХ рдирд┐рд░реНрдпрд╛рдд рдмрдирд╛рдпрд╛ рд╣реИ

# cors.js file
module.exports = (req, res, next) => {
  res.setHeader("Access-Control-Allow-Origin", "*");
  res.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  next();
}

рддреЛ рдореИрдВ рдЕрд╕рд╛рдЗрди рдХрд░рддрд╛ рд╣реВрдВ:
```
const cors = рдЖрд╡рд╢реНрдпрдХрддрд╛ ('cors');
рд░рд╛рдЙрдЯрд░ред рдЙрдкрдпреЛрдЧ (рдХреЛрд░реНрд╕);
````
рдЕрдм рдЖрдЧреЗ рдмрдврд╝реЛ... рдзрдиреНрдпрд╡рд╛рдж

рддреНрд░реБрдЯрд┐ рддрдм рд╣реЛрдЧреА рдЬрдм рд╕рд░реНрд╡рд░ рд╡рд┐рдХрд▓реНрдк рдЕрдиреБрд░реЛрдз рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

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

рдореИрдВрдиреЗ рдЙрдкрд░реЛрдХреНрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд┐рдпрд╛, рдЬрд╣рд╛рдВ Axios.post(url, obj) рдиреЗ CORS 403 рдирд┐рд╖рд┐рджреНрдз рддреНрд░реБрдЯрд┐ рд▓реМрдЯрд╛ рджреА, рд▓реЗрдХрд┐рди рдЗрд╕реЗ Axios.post(url, JSON.stringify(obj)) рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ред

рдореИрдВ рд╕рд┐рд░реНрдл рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдПрдкреАрдЖрдИ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдореЗрдВ рдкрд░реЗрд╢рд╛рдиреА рд╣реБрдИ рд╣реИред рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдЬреЛ рдПрдХрдорд╛рддреНрд░ рд╕рдорд╛рдзрд╛рди рдкрд╛рдпрд╛ рд╣реИ, рд╡рд╣ рдКрдкрд░ рдерд┐рдпрд╛рдЧреЛрдбреЗрдмрд╛рд╕реНрдЯреЛрд╕ рджреНрд╡рд╛рд░рд╛ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╣реИред

рдореИрдВрдиреЗ рдмрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП jsonp рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдФрд░ рдореИрдВ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред

рдореБрдЭреЗ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдереА рдФрд░ рдХреЛрдЖ-рдХреЙрд░реНрд╕ рдПрдХ рдЖрд╕рд╛рди рд╕рдорд╛рдзрд╛рди рдерд╛! (ProfNandaa рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдПрдХреНрд╕рдкреНрд░реЗрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП npm-cors)

рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЕрднреА рднреА рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ: Axios CORs рдХреЗ рд╕рд╛рде рдареАрдХ рдХрд╛рдо рдХрд░реЗрдЧрд╛ , OPTIONS рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд╕рд╛рде, JSON рдХреЛ рдЕрдиреБрд░реЛрдз рдХреЗ рдореБрдЦреНрдп рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдмрд┐рдирд╛ JSON.encoded рднреЗрдЬреЗ, рдФрд░ рдХреБрдХреАрдЬрд╝ рдХреЗ рд╕рд╛рде рднреЗрдЬрд╛ рдФрд░ рдареАрдХ рд╕реЗ рдЬрд╛рд░реА рд░рдЦрд╛, рдЬрдм рддрдХ рдХрд┐ Axios рдФрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рд╡рд╛рд▓рд╛ рд╕рд░реНрд╡рд░ рдареАрдХ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЗрд╕рдореЗрдВ рдХреБрдЫ рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рдкрд░реАрдХреНрд╖рдг рдФрд░ рддреНрд░реБрдЯрд┐ рд╣реБрдИ рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдкрд╛рд╕ Axios рдХреЗ рд╕рд╛рде рдареАрдХ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреНрд░реЙрд╕ рдбреЛрдореЗрди рдЕрдиреБрд░реЛрдз рд╣реИрдВред

рдХреБрдЫ рдмрд┐рдВрджреБ:

рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ

  • рд╕рд░реНрд╡рд░ рд╡рд┐рдХрд▓реНрдк рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ 200 рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рднреА рд╣реИ, рд╕рднреА рд╕рд╣реА рд╣реЗрдбрд░ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде, "рдкреНрд░реАрдлреНрд▓рд╛рдЗрдЯреЗрдб" рдЕрдиреБрд░реЛрдз рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред

  • рдЕрдиреБрд░реЛрдз рд╕рд╣реА рд╣реЗрдбрд░ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╕рд░реНрд╡рд░ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реЗрдбрд░ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИред

  • рдпрджрд┐ рдХреБрдХреАрдЬрд╝/рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╢реАрд░реНрд╖рд▓реЗрдЦ рдпрд╛ рдЯреАрдПрд▓рдПрд╕ рдХреНрд▓рд╛рдЗрдВрдЯ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВ, рддреЛ рдПрдХреНрд╕рд┐рдпреЛрд╕ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдХреЛ рд╕рддреНрдп рдкрд░ рднреЗрдЬреЗрдВред рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ ( axios.defaults.withCredentials = true ) рдпрд╛ рдкреНрд░рддрд┐ рдЕрдиреБрд░реЛрдз рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рд╕рдлрд▓ рдЕрдиреБрд░реЛрдз рд╢реАрд░реНрд╖рд▓реЗрдЦ

Access-Control-Request-Headers: Content-Type
Access-Control-Request-Method: GET

рдЙрджрд╛рд╣рд░рдг рд╕рдлрд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╢реАрд░реНрд╖рд▓реЗрдЦ

Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: X-PINGOTHER, Content-Type
Access-Control-Allow-Methods: GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS
Access-Control-Allow-Origin: http://your-origin-url.com

рд╣рдордиреЗ рдзреАрд░реЗ-рдзреАрд░реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╢реАрд░реНрд╖рд▓реЗрдЦ рдЬреЛрдбрд╝реЗ рдФрд░ рдкрд╛рдпрд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХреЗ рд╕рд╛рде рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдирд┐рджрд╛рди рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдерд╛

Access-Control-Allow-Credentials: true рдмрд┐рдирд╛ рдХреБрдХреАрдЬрд╝ рдирд╣реАрдВ рднреЗрдЬреА рдЬрд╛ рд░рд╣реА рдереАрдВ рдпрд╛ рдмрдиреА рдирд╣реАрдВ рд░рд╣ рд░рд╣реА рдереАрдВ, рдЬреЛ рдЙрд╕ рд╣реЗрдбрд░ рдХреЗ

рдЗрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрдврд╝рдиреЗ рд╕реЗ рдорджрдж рдорд┐рд▓рддреА рд╣реИред

рдХрд┐рд╕реА рдХреЛ рднреА рд╕рдорд╕реНрдпрд╛ рд╣реИ, ...Allow-Headers: Content-Type рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

Access-Control-Allow-Origin: '*'
Access-Control-Allow-Methods: ...
Access-Control-Allow-Headers: Content-Type, Accept

рдореИрдВ 'рдЕрдиреБрдорддрд┐-рдирд┐рдпрдВрддреНрд░рдг-рдЕрдиреБрдорддрд┐-рдЙрддреНрдкрддреНрддрд┐: *' рдирд╛рдордХ рдЗрд╕ рдХреНрд░реЛрдо рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ
рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреА рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред
2017-07-19 14 06 37

рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рднреА рдЬреЛ рдпрд╣ рдирд╣реАрдВ рд╕рдордЭрддрд╛ рд╣реИ рдХрд┐ Axios рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рдареАрдХ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛:

рдпрд╣ рдХреЛрдИ Axios рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЬреЗрдПрд╕ рдЙрди рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджреЗрдЧрд╛ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдЙрдЪрд┐рдд рд╢реАрд░реНрд╖рд▓реЗрдЦ рд╕реЗрдЯ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрдк рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рд░рд┐рдПрдХреНрдЯ рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рддреЛ рднреНрд░рдорд┐рдд рди рд╣реЛрдВ, рдпрд╣ рдХреЛрдИ рд░рд┐рдПрдХреНрдЯ рдпрд╛ рдПрдХреНрд╕рд┐рдпреЛрд╕ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ CORS рдорд╛рдирдХ рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╣реИред

рдЬреЗрдХрдПрд▓реНрдбрд░ рдпрд╣рд╛рдВ рдЖрдкрдХреЗ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдкрд░ рдЖрдкрдХреЛ рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рд╡рд░рдг рджреЗрддрд╛ рд╣реИ: https://github.com/mzabriskie/axios/issues/191#issuecomment -311069164

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЙрд╕ рд╕рд░реНрд╡рд░ рдкрд░ рдХреЛрдИ рдирд┐рдпрдВрддреНрд░рдг рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд▓рд┐рдП рд╕рд╛рдордЧреНрд░реА рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрд╕реЗ рд╕рд╣реА рд╣реЗрдбрд░ рдХреЗ рд╕рд╛рде рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреНрдпреЛрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд╖реНрдЯрдкреНрд░рдж рд╣реИ рдЬрдм рдЖрдк рдХрд┐рд╕реА рд╕рд░реНрд╡рд░ рд╕реЗ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдХреНрдпреЛрдВрдХрд┐ рд╕рд░реНрд╡рд░ рдХреЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╢реАрд░реНрд╖рд▓реЗрдЦ рд╕реЗрдЯ рдирд╣реАрдВ рд╣реИред рдЕрддреНрдпрдзрд┐рдХ рдкреНрд░рддрд┐рдмрдВрдзрд╛рддреНрдордХ рд▓рдЧрддрд╛ рд╣реИред рдУрд╣ рдЕрдЪреНрдЫрд╛ ...

@ рд░реЙрдмрд┐рдиреНрд╕-рдПрд▓реНрдбреЛ рджреЛрдмрд╛рд░рд╛, рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рд╕рд╣реА рд╣реИрдВред

рдореЗрд░реА рдореВрд▓ рдЯрд┐рдкреНрдкрдгреА:

For those commenting saying "Add OPTION request handling to your server", that does not work. I'm running a local environment that has OPTION request handling enabled.

I experienced this issue identically as a user above, where Axios.post(url, obj) returned the CORS 403 forbidden error, but updating that to Axios.post(url, JSON.stringify(obj)) worked correctly.

рдпрджрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╕рд░реНрд╡рд░ рд╕рдорд╕реНрдпрд╛ рдереА, рдФрд░ рдПрдХреНрд╕рд┐рдпреЛрд╕ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдереА, рддреЛ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд░рдиреЗ рд╕реЗ рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рдкрдбрд╝рддрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рдХрд▓реНрдк рдЕрдиреБрд░реЛрдз рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╡рд┐рдлрд▓ рд╣реЛ рдЧрдпрд╛ рд╣реЛрддрд╛ред

@alexanderbanks

рд╡рд┐рдХрд▓реНрдк HTTP рд╡рд┐рдзрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рдереА рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рд▓рд┐рдЦрд╛ рдПрдХ рдЖрдВрддрд░рд┐рдХ рдПрдкреАрдЖрдИ рдкрд░ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реИ (рдЖрдВрддрд░рд┐рдХ рдПрдкреАрдЖрдИ рдпрд╣рд╛рдВ рд╕рд░реНрд╡рд░ рд╣реИ)ред рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд░рд╣реА: Failed to load resource: Origin http://localhost:7149 is not allowed by Access-Control-Allow-Origin. XMLHttpRequest cannot load http://localhost:8902/user-login due to access control checks.

рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдпрд╣ рдПрдХ рдПрдХреНрд╕рд┐рдпреЛрд╕ рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдпреВрдирд┐рд░реЗрд╕реНрдЯ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рд╡рд╣реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд░рд╣реАред рддреЛ рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдпрд╣ рдХреБрдЫ рдФрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдпрд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреИрд╕реЗ рд╣реА рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдПрдкреАрдЖрдИ рд╕рд░реНрд╡рд░ (рдЬреЛ рдПрдХ рдиреЛрдбрдЬ + рдПрдХреНрд╕рдкреНрд░реЗрд╕ рдПрдкреАрдЖрдИ рд╣реИ) рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝рд╛, рд╕рдм рдХреБрдЫ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдкрд░ рдПрдХреНрд╕рд┐рдпреЛрд╕ рдФрд░ рдпреВрдирд┐рд░реЗрд╕реНрдЯ рджреЛрдиреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛:

app.use(function(req, res, next) { res.header("Access-Control-Allow-Origin", "*"); next(); });

рд╢рд╛рдпрдж рдпрд╣рд╛рдВ рдкрд░реНрджреЗ рдХреЗ рдкреАрдЫреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рдХреА рдореЗрд░реА рд╕рдордЭ рдХреБрдЫ рд╣рдж рддрдХ рд╕реАрдорд┐рдд рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рд░реНрд╡рд░ рдкрд░ рдЗрд╕ рдмрд┐рдЯ рдХреЛрдб рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдХрд░ рджреАред

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХрд╛ рд╕рд░реНрд╡рд░ рдореВрд▓ рдкрд╣реБрдВрдЪ рдХреЛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдпрджрд┐ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдиреЛ-рдХреЙрд░реНрд╕ рд╣реЛ рд░рд╣рд╛ рд╣реИ рддреЛ рдЗрд╕реЗ рдЖрдЬрдорд╛рдПрдВ:

    return axios(url, {
      method: 'POST',
      mode: 'no-cors',
      headers: {
        Accept: 'application/json',
        'Content-Type': 'application/json',
      },
      withCredentials: true,
      credentials: 'same-origin',
    }).then(response => {
    })

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдБ рдХреБрдЫ рд▓реЛрдЧ рднреНрд░рдорд┐рдд рд╣реИрдВ рдХрд┐ CORS рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореВрд▓ рд╕рдорд╕реНрдпрд╛ CORS рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдереА, рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдорд╕реНрдпрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ CORS рдареАрдХ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рднрд▓реЗ рд╣реА рдкреЛрд╕реНрдЯ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рди рдХрд┐ рд╕рд░реНрд╡рд░ рдХреЛ рдареАрдХ рд╕реЗ рдХреИрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рдП

рдПрдкреАрдЖрдИ рдЕрдЬреАрдм рдЕрднрд┐рдирдпред рд╕рднреА cors GET рдЕрдиреБрд░реЛрдз "рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕: рдЯреНрд░реВ" рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛ред
POST рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП, рд╕рдорд╛рди рдореВрд▓ рдЕрдиреБрд░реЛрдз рдбреЗрдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬрдмрдХрд┐ CORS POST рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ рдЬрдм рдореИрдВ рдбреЗрдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд░рддрд╛ рд╣реВрдВред

рдмрд┐рд▓реНрдХреБрд▓ рдХрд╛рд░рдг рдирд╣реАрдВ рдорд┐рд▓рд╛ рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИред

рдореБрдЭреЗ рдЦреЗрдж рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕ рдзрд╛рдЧреЗ рдХреЛ рдмрдВрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рд╣реА рд╡рд┐рд╖рдп рдХреЗ рдЖрд╕рдкрд╛рд╕ рдордВрдбрд▓рд┐рдпрд╛рдВ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдореБрджреНрджреЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЧрд▓рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдХрд╛рд░рдг рд╕рд╛рдорд╛рдиреНрдп CORS рдореБрджреНрджреЗ, POST рдЕрдиреБрд░реЛрдз рдлрд╝реЙрд░реНрдо-urlencoded рдХреЗ рдмрдЬрд╛рдп JSON рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдЖрджрд┐) рддреЛ рдХреГрдкрдпрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдЦреЛрд▓реЗрдВред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

ghost picture ghost  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

achingbrain picture achingbrain  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Shu-Ji picture Shu-Ji  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

altruisticsoftware picture altruisticsoftware  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

9tor picture 9tor  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ