Kilmė neleidžiama „Access-Control-Allow-Origin“

Aš darau „ Ajax.request dėl nuotolinio PHP serverio „ Sencha Touch 2“ programoje (suvynioti į „ PhoneGap“ ).

Serverio atsakymas yra toks:

XMLHttpRequest negali atsisiųsti http://nqatalog.negroesquisso.pt/login.php . Naudojant „Access-Control-Allow-Origin“, neleidžiama naudoti kilmės http://localhost:8888 .

Kaip išspręsti šią problemą?

313
13 апр. Ricardo nustatytas balandžio 13 d 2012-04-13 17:50 '12 at 5:50 pm 2012-04-13 17:50
@ 22 atsakymai

Prieš kurį laiką parašiau straipsnį apie šį klausimą, „ Cross Domain AJAX“ .

Paprasčiausias būdas jį tvarkyti, jei turite valdiklio atsakiklio serverį, yra pridėti atsakymo antraštę į:

 Access-Control-Allow-Origin: * 

Tai leis tarp domenų „ Ajax“ . PHP, norite pakeisti tokį atsakymą:

 <?php header('Access-Control-Allow-Origin: *'); ?> 

Jūs galite paprasčiausiai įdėti „ Header set Access-Control-Allow-Origin * į „ Apache“ konfigūraciją arba „htaccess“ failą. Jis tiesiog veikia kaip žavesys.

Iš komentarų tai yra svarbi pastaba: pakaitos simbolis leidžia bet kuriam domenui siųsti užklausas į jūsų kompiuterį. Aš rekomenduoju pakeisti žvaigždutę konkrečiu domenu, kuriame veiks scenarijus.

362
13 апр. Matt Mombrea atsakymas, pateiktas balandžio 13 d 2012-04-13 17:54 '12, 17:54 val. 2012-04-13 17:54

Jei nesate tvarkę serverio, galite tiesiog pridėti šį argumentą „Chrome“ paleidimo priemonėje: --disable-web-security .

Atkreipkite dėmesį, kad nenoriu to naudoti įprastam „naršymui internete“. Jei reikia pagalbos, žr. Šis pranešimas: „Chrome“ išjungti tą pačią kilmės politiką .

Naudodami „Phonegap“ faktiškai kuriate programą ir atsisiųsite ją į savo įrenginį, tai nėra problema.

61
13 апр. Travio Webb atsakymas, pateiktas balandžio 13 d 2012-04-13 19:50 '12 at 7:50 pm 2012-04-13 19:50

Jei naudojate „Apache“, tiesiog pridėkite:

 <ifModule mod_headers.c> Header set Access-Control-Allow-Origin: * </ifModule> 

jūsų konfigūracijoje. Tai užtikrins, kad visi jūsų žiniatinklio serverio atsakymai būtų prieinami bet kurioje kitoje interneto svetainėje. Jei konkrečiame serveryje ketinate naudoti tik savo kompiuterio paslaugas, galite * pakeisti šaltinio serverio URL:

 Header set Access-Control-Allow-Origin: http://my.origin.host 
41
21 авг. atsakymas pateikiamas Reza S 21 rug. 2012-08-21 10:15 '12 10:15 am 2012-08-21 10:15

Jei turite ASP.NET / ASP.NET MVC , šią antraštę galite įtraukti į failą Web.config:

 <system.webServer> ... <httpProtocol> <customHeaders> <!-- Enable Cross Domain AJAX calls --> <remove name="Access-Control-Allow-Origin" /> <add name="Access-Control-Allow-Origin" value="*" /> </customHeaders> </httpProtocol> </system.webServer> 
16
13 авг. Caio Proiete atsakymas 13 rugpjūtis 2013-08-13 23:56 '13, 23:56, 2013-08-13 23:56

Tai buvo pirmasis klausimas / atsakymas, kuris man pasirodė, kai bandžiau išspręsti tą pačią problemą, naudojant ASP.NET MVC kaip mano duomenų šaltinį. Suprantu, kad tai neišsprendžia PHP problemos , tačiau ji yra pakankamai susijusi su vertingumu.

Aš naudoju ASP.NET MVC. Greg Brant'o dienoraščio dienoraštis dirbo man. Galiausiai galite sukurti atributą [HttpHeaderAttribute("Access-Control-Allow-Origin", "*")] , kurį galite pridėti prie valdiklio veiksmų.

Pavyzdžiui:

 public class HttpHeaderAttribute : ActionFilterAttribute { public string Name { get; set; } public string Value { get; set; } public HttpHeaderAttribute(string name, string value) { Name = name; Value = value; } public override void OnResultExecuted(ResultExecutedContext filterContext) { filterContext.HttpContext.Response.AppendHeader(Name, Value); base.OnResultExecuted(filterContext); } } 

Ir tada naudokite jį su:

 [HttpHeaderAttribute("Access-Control-Allow-Origin", "*")] public ActionResult MyVeryAvailableAction(string id) { return Json( "Some public result" ); } 
15
06 июня '13 в 18:24 2013-06-06 18:24 atsakymą pateikė badMonkey birželio 06 d. 13 val. 18:24 2013-06-06 18:24

Kadangi Matt Mombrea yra teisinga serverio pusėje, galite susidurti su kita problema, kuri yra baltojo sąrašo gedimas.

Turite nustatyti savo phonegap.plist. (Naudoju seną telefono pokalbio versiją)

Virvų atveju gali būti tam tikrų pavadinimo ir katalogo pakeitimų. Tačiau žingsniai turėtų būti iš esmės tie patys.

Pirmiausia pasirinkite Palaikomi failai> PhoneGap.plist

2019

10
23 апр. atsakymas duotas steve0hh Bal 23 d 2012-04-23 07:46 '12 at 7:46 2012-04-23 07:46
9
18 авг. atsakymas pateikiamas arun-r 18 rug. 2015-08-18 13:58 '15, 13:58 pm 2015-08-18 13:58

Keli kartus, kai dirbau su įvairiomis API, susidūriau. Dažnai spartusis taisymas yra pridėti „ callback =?“ iki linijos pabaigos. Kartais turi būti simbolis ir kartais „?“: „? Atgalinis atgalinis?“ (žr. „Forecast.io API naudojimas su jQuery“ )

7
19 дек. Francis Baptiste atsakymas gruodžio 19 d 2012-12-19 03:07 '12: 03:07 2012-12-19 03:07

Aš jums duosiu paprastą sprendimą. Mano atveju neturiu prieigos prie serverio. Tokiu atveju galite keisti „ Google Chrome“ naršyklės saugumo politiką, kad būtų galima naudotis „Access-Control-Allow-Origin“. Tai labai paprasta:

  • Sukurkite „Chrome“ naršyklės nuorodą
  • Dešinės pelės mygtuko piktograma → Ypatybės → Nuoroda → Tikslinė

Paprasta "C:\Program Files\Google\Chrome\Application\chrome.exe" --allow-file-access-from-files --disable-web-security įdėjimas "C:\Program Files\Google\Chrome\Application\chrome.exe" --allow-file-access-from-files --disable-web-security .

Vieta gali skirtis. Dabar atidarykite „Chrome“ spustelėję šį nuorodą.

7
16 окт. spalio 16 d. atsakymą pateikė Dibish . 2013-10-16 07:01 '13, 7:01 am 2013-10-16 07:01

Tai gali būti naudinga visiems, kuriems reikalinga „www“ ir „ne www“ versijos versijos versija:

  $referrer = $_SERVER['HTTP_REFERER']; $parts = parse_url($referrer); $domain = $parts['host']; if($domain == 'google.com') { header('Access-Control-Allow-Origin: http://google.com'); } else if($domain == 'www.google.com') { header('Access-Control-Allow-Origin: http://www.google.com'); } 
7
18 июня '13 в 20:37 2013-06-18 20:37 Atsakymas duotas lewsid birželio 18, 13, 20:37 2013-06-18 20:37

jei esate „Apache“, tiesiog pridėkite .htaccess failą į savo katalogą su tokiu turiniu:

 Header set Access-Control-Allow-Origin: * Header set Access-Control-Allow-Headers: content-type Header set Access-Control-Allow-Methods: * 
6
02 сент. Atsakymas suteikiamas Vero O 02 Sep. 2015-09-02 21:31 '15 - 21:31 2015-09-02 21:31

Jei rašote „Chrome“ plėtinį ir gaunate šią klaidą, įsitikinkite, kad pridėjote pagrindinį API URL į savo manifest.json leidimo bloką , pavyzdžiui:

 "permissions": [ "https://itunes.apple.com/" ] 
6
01 февр. atsakymas pateikiamas itzg 01 Feb. 2014-02-01 21:18 '14 at 21:18 2014-02-01 21:18

Taip yra dėl tos pačios kilmės politikos . Daugiau apie „ Mozilla“ kūrėjų tinklą arba „ Wikipedia“ .

Iš esmės, jūsų pavyzdyje reikia įkelti puslapį http://nqatalog.negroesquisso.pt/login.php tik su nqatalog.negroesquisso.pt , o ne localhost .

5
13 апр. antyrat atsakymą pateikė balandžio 13 d 2012-04-13 17:51 '12 at 5:51 PM 2012-04-13 17:51

Ruby on Rails“ galite atlikti valdiklį:

 headers['Access-Control-Allow-Origin'] = '*' 
5
03 сент. atsakymas duotas fuzzyalej 03 sept. 2013-09-03 18:51 '13, 18:51, 2013-09-03 18:51

Jūs galite padaryti jį veikiant nekeisdami serverio įtraukdami HTTP OPTIONS broswer į atsakymą, įskaitant „ Access-Control-Allow-Origin: * antraštę Access-Control-Allow-Origin: * .

„Chrome“ naudokite šį plėtinį . Jei esate „Mozilla“, patikrinkite šį atsakymą .

5
07 апр. atsakymas pateikiamas forzagreen 07 balandžio. 2015-04-07 15:26 '15 15:26 2015-04-07 15:26

Jei tai turite „Angular.js“, įsitikinkite, kad išvengsite prievado numerio taip:

 var Project = $resource( 'http://localhost\\:5648/api/...', {'a':'b'}, { update: { method: 'PUT' } } ); 

Daugiau informacijos rasite čia .

5
18 апр. Atsakymas pateikiamas Marius 18 balandžio. 2013-04-18 12:23 '13, 12:23 2013-14-18 12:23

Mes taip pat turime tokią pačią problemą, kaip ir „phonegap“ programa, išbandyta chromu. Vienas „Windows“ įrenginys, kurį mes naudojame žemiau paketo failo kiekvieną dieną prieš atidarant „Chrome“. Atminkite, kad prieš paleisdami šią funkciją, turite išvalyti visą chromo egzempliorių iš užduočių tvarkytuvo, arba galite pasirinkti chromą, kad jis neveiktų fone.

BATCH: (naudokite cmd)

 cd D:\Program Files (x86)\Google\Chrome\Application\chrome.exe --disable-web-security 
4
11 марта '13 в 9:37 2013-03-11 09:37 atsakymas pateikiamas abksharma kovo 11 d., 13 val. 9:37 2013-03-11 09:37
  **Add this meta tag in your Webservice** header('Content-type: application/json'); header('Access-Control-Allow-Origin: *'); 
1
12 янв. Siddharth Shukla atsakymas yra 12 sausis 2017-01-12 21:40 '17, 21:40 2017-01-12 21:40

Jei dirbate su „Chrome“, galite tiesiog įdiegti „Chrome“ plėtinį iš „Chrome“ parduotuvės, kad išspręstumėte problemas, susijusias su CORS.

Plėtinys: nuoroda Allow-Control-Allow-Origin : [ https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi?hl=enlack AG1]

1
27 дек. Codiee atsakymas, pateiktas gruodžio 27 d. 2017-12-27 10:10 '17 at 10:10 2017-12-27 10:10

Ruby Sinatra

 response['Access-Control-Allow-Origin'] = '*' 

visiems arba

 response['Access-Control-Allow-Origin'] = 'http://yourdomain.name' 
1
07 июня '15 в 23:16 2015-06-07 23:16 atsakymas pateikiamas Michailo Chuprynskio birželio 07 d., 15 val. 23:16 2015-06-07 23:16

Gavę užklausą, galite

 var origin = (req.headers.origin || "*"); 

nei atsakant į skambutį:

 res.writeHead( 206, { 'Access-Control-Allow-Credentials': true, 'Access-Control-Allow-Origin': origin, } ); 
0
10 сент. Atsakymas pateikiamas Sunrising 10 Sep. 2014-09-10 02:10 '14, 2:10 2014-09-10 02:10

Ženklai nėra labai saugi galimybė. Norite, kad jis būtų konkretesnis - patikrinkite atsakymą, kurį parašiau čia tuo pačiu klausimu; kaip apeiti „Access-Control-Allow-Origin“?

-1
24 апр. Rob Quist atsakymas, pateiktas balandžio 24 d 2015-04-24 12:30 '15 12:30 val. 2015-04-24 12:30

Kiti klausimai apie „ žymes arba Ask a Question