Kodėl „javascript“ gauna „Access-Control-Allow-Origin“? Yra, kai reikalaujama išteklių klaida, kai paštininkas to nedaro?

Bandau daryti leidimą naudojant „ JavaScript“ , prisijungdamas prie „ RESTful“ API, įmontuotą kolboje . Tačiau kai pateikiu užklausą, gaunu šią klaidą:

XMLHttpRequest negali įkelti http: // myApiUrl / login . Prašomas šaltinis neturi „Access-Control-Allow-Origin“ antraštės. Todėl originalas „null“ neleidžiamas.

Žinau, kad API arba nuotolinis šaltinis turėtų nustatyti antraštę, bet kodėl jis veikė, kai pateikiau užklausą „Chrome“ pašto siuntėjo plėtinyje?

Tai užklausos kodas:

 $.ajax({ type: "POST", dataType: 'text', url: api, username: 'user', password: 'pass', crossDomain : true, xhrFields: { withCredentials: true } }) .done(function( data ) { console.log("done"); }) .fail( function(xhr, textStatus, errorThrown) { alert(xhr.responseText); alert(textStatus); }); 
2045 m
17 нояб. Jedi lapkričio 17 d 2013-11-17 22:29 '13, 10:29 pm 2013-11-17 22:29
@ 40 atsakymų
  • 1
  • 2

Jei suprantu teisingai, XMLHttpRequest atliekate kitame domene nei jūsų puslapis. Taigi, naršyklė ją blokuoja, nes ji dėl saugumo priežasčių paprastai pašalina tą patį šaltinį. Jei norite atlikti kryžminio domeno užklausą, turite daryti ką nors kito. Pamoka, kaip tai pasiekti, naudojant CORS .

Kai naudojate paštininką, jie neapsiriboja šia politika. Cituota iš „ Cross-Origin XMLHttpRequest“ :

Reguliarūs tinklalapiai gali naudoti XMLHttpRequest objektą, kad galėtumėte siųsti ir gauti duomenis iš nuotolinių serverių, tačiau juos riboja ta pati kilmės politika. Plėtiniai nėra tokie riboti. Plėtinys gali kalbėti su nuotoliniais serveriais, kurie yra ne jos kilmės, jei pirmiausia prašo leidimo gauti kryžminę kilmę.

1109
Atsakymas yra MD. 17 нояб. Sahib Bin Mahboob lapkričio 17 d 2013-11-17 22:49 '13, 10:49 PM 2013-11-17 22:49

Tai nėra gamybos pataisa arba kai paraiška turi būti rodoma klientui, tai naudinga tik tuomet, kai vartotojo sąsaja ir kūrimo programa yra skirtinguose serveriuose ir iš tikrųjų yra tame pačiame serveryje. Pavyzdžiui: kuriant bet kurios programos vartotojo sąsają, jei reikia ją išbandyti vietoje, nukreipiant į „backend“ serverį, šiuo atveju tai idealus sprendimas. Gaminių taisymui CORS antraštės turi būti pridėtos prie serverio serverio, kad būtų galima naudotis kryžminiu turiniu.

Paprasčiausias būdas yra paprasčiausiai pridėti „Google“ chromo plėtinį, kad galėtumėte naudotis naudojant CORS.

( https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi?hl=lt )

Paprasčiausiai įjunkite šį plėtinį, jei norite leisti prieigą prie užklausos antraštės „prieigos kontrolės-leisti kilmę“ .

Or

„Windows“ įklijuokite šią komandą į >

 chrome.exe --user-data-dir="C:/Chrome dev session" --disable-web-security 

Tai atvers naują chromo naršyklę, kuri leis pasiekti užklausos antraštę „prieigos kontrolės-leisti-kilmę“ .

478
04 марта '15 в 9:42 2015-03-04 09:42 atsakymas pateikiamas shruti kovo 04 '15 , 9:42 2015-03-04 09:42

Jei grįšite prie JSON , pabandykite naudoti JSONP (pažymėkite P pabaigoje), kad galėtumėte kalbėti tarp domenų:

 $.ajax({ type: "POST", dataType: 'jsonp', ...... etc ...... 

Sužinokite daugiau apie tai, kaip dirbti su JSONP čia :

JSONP atsiradimas - iš esmės nuoseklus tarptinklinis scenarijus - atvėrė duris galingiems turinio kūriniams. Daugelis gerai žinomų svetainių teikia JSONP paslaugas, leidžiančias jums pasiekti jų turinį per iš anksto nustatytą API.

322
22 февр. Atsakymą pateikė Gavinas vasario 22 d. 2014-02-22 03:42 '14 at 3:42 2014-02-22 03:42

Labai lengva nuspręsti, ar naudojate PHP . Tiesiog pridėkite šį scenarijų PHP puslapio pradžioje, kuris apdoroja užklausą:

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

Įspėjimas Tai yra jūsų php failo saugumo problema, kuri gali sukelti užpuolikus. Turite naudoti autentifikavimo sesijas ir slapukus, kad būtų užkirstas kelias failui / paslaugai iš šio atakos. Jūsų paslauga yra pažeidžiama suklastotam sukčiavimui (CSRF).

Jei naudojate raudoną „Node“, node-red/settings.js faile turite įjungti CORS, nepateikiant komentarų šiose eilutėse:

 // The following property can be used to configure cross-origin resource sharing // in the HTTP nodes. // See https://github.com/troygoode/node-cors#configuration-options for // details on its contents. The following is a basic permissive set of options: httpNodeCors: { origin: "*", methods: "GET,PUT,POST,DELETE" }, 
199
03 дек. atsakymas yra suteiktas šešėliai sherif 03 dec. 2014-12-03 23:24 '14 ne 23:24 2014-12-03 23:24

Noriu, kad kas nors anksčiau pasidalintų šia svetaine su manimi http://cors.io/ , jis sutaupytų daug laiko, palyginti su statyba ir pasikliautų savo įgaliojimais. Tačiau, kai pereisite prie gamybos, jūsų įgaliotasis serveris yra geriausias pasirinkimas, nes vis dar valdote visus savo duomenų aspektus.

Viskas ko jums reikia:

https://cors.io/?http://HTTP_YOUR_LINK_HERE

164
22 июля '15 в 1:08 2015-07-22 01:08 atsakymą pateikė „ yoshyosh“ liepos 22 d., 15 val. 1:08 2015-07-22 01:08

Jei naudojate „ Node.js“ , pabandykite:

 app.use(function(req, res, next) { res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); next(); }); 

Papildoma informacija: CORS ExpressJS

67
12 февр. Atsakymą pateikė Nguyen Tran , vasario 12 d. 2016-02-12 19:27 '16 at 19:27 pm 2016-02-12 19:27

Problema susijusi su keliais domenais, naudojant „Ajax“. Turite būti tikri, kad prieigą prie failų naudosite tuo pačiu keliu http:// be www. (arba prieigą iš http://www. ir nusiųskite į tą patį kelią, įskaitant www. ), kurią naršyklė laiko skirtingu domenu, kai pasiekiama www. taip matote, kur yra problema. Jūs siunčiate į kitą domeną, o naršyklė blokuoja srautą dėl išleidimo problemos.

Jei API nėra talpinama tame pačiame priegloboje, kurį prašote, srautas užblokuojamas ir jums reikės rasti kitą būdą bendrauti su API.

63
12 марта '14 в 11:53 2014-03-12 11:53 atsakymą pateikė Alin Razvan kovo 14 d. 14 val. 11:53 2014-03-12 11:53

Taigi, kaip
$ .ajax ({tipas: "POST" - OPTIONS skambučiai)
$ .post ( - sukelia POST)

abu skirtingi postai teisingai skambina „POST“, bet kai jie bus vadinami „OPTIONS“

Interneto paslaugoms C # - webapi

Pridėkite šį kodą į web.config failą, esantį prie žymos <system.webServer>. Jis veiks

 <httpProtocol> <customHeaders> <add name="Access-Control-Allow-Origin" value="*" /> </customHeaders> </httpProtocol> 

Įsitikinkite, kad nepadarėte jokių klaidų skambinant „ajax“

Jquery

 $.ajax({ url: 'http://mysite.microsoft.sample.xyz.com/api/mycall', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, type: "POST",  dataType: "json", data: { }, success: function (result) { console.log(result); }, error: function () { console.log("error"); } }); 

4 kampinis išleidimas, žr. Http://www.hubfly.com/blog/solutions/how-to-fix-angular-4-api-call-issues/

Pastaba Jei norite atsisiųsti turinį iš trečiosios šalies svetainės, tai nepadės . Galite išbandyti šį kodą, bet ne javascript.

 System.Net.WebClient wc = new System.Net.WebClient(); string str = wc.DownloadString("http://mysite.microsoft.sample.xyz.com/api/mycall"); 
48
13 дек. George Livingston atsakymas gruodžio 13 d 2016-12-13 16:02 '16 at 16:02 pm 2016-12-13 16:02

Pabandykite XDomain ,

Santrauka: Švari alternatyva „JavaScript CORS / polyfill“. Nereikalaujama serverio konfigūracijos - tiesiog pridėkite proxy.html į domeną, su kuriuo norite bendrauti. Ši biblioteka naudoja XHook, kad susietų visus XHRs , todėl XDomain turėtų veikti kartu su bet kuria biblioteka.

22
01 апр. atsakymą pateikė vartotojo3359786 01 balandis. 2014-04-01 10:46 '14, 10:46, 2014-04-01 10:46

Jei nenorite:

  1. Išjungti „Chrome“ žiniatinklio saugumą
  2. Naudokite JSONP
  3. Jei norite nukreipti užklausas, naudokite trečiosios šalies svetainę.

ir esate tikri, kad jūsų serveryje palaikoma CORS parama (patikrinkite CORS čia: http://www.test-cors.org/ )

Tada jums reikia perduoti kilmės parametrą su jūsų prašymu. Šis šaltinis turi atitikti šaltinį, kurį naršyklė siunčia su jūsų užklausa.

Jį galite pamatyti čia: http://www.wikinomad.com/app/detail/Campgrounds/3591

Redagavimo funkcija siunčia GET ir POST užklausą kitam domenui, kad gautų duomenis. Nustatau šaltinio parametrą, kuris išsprendžia problemą. Backend yra MediaWiki variklis.

TL; DR: pridėkite savo skambučių parametrą „kilmė“, kuris turėtų būti „Origin“ parametras, kurį siunčia jūsų naršyklė (jūs negalite suklastoti kilmės parametro)

11
07 июля '16 в 7:26 2016-07-07 07:26 atsakymą pateikė Ganesh Krishnan, liepos 07 d. 16, 07:26 2016-07-07 07:26

Turėjau tokią konfigūraciją, dėl kurios tą pačią klaidą prašau atsakyti iš serverio.

Serverio pusė: SparkJava → suteikia REST-API
Kliento pusė: „ ExtJs6“ → suteikia naršyklės atvaizdavimą

Serverio pusėje turėjau tai pridėti:

 Spark.get("/someRestCallToSpark", (req, res) -> { res.header("Access-Control-Allow-Origin", "*"); //important, otherwise its not working return "some text"; }); 

Kliento pusėje turėjau tai įtraukti į užklausą:

 Ext.Ajax.request({ url: "http://localhost:4567/someRestCallToSpark", useDefaultXhrHeader: false, //important, otherwise its not working success: function(response, opts) {console.log("success")}, failure: function(response, opts) {console.log("failure")} }); 
8
18 сент. Atsakymą pateikia kiltek 18 sep . 2015-09-18 17:50 '15, 17:50 pm 2015-09-18 17:50

Remiantis atsakymu į „shruti“ , sukūriau „Chrome“ naršyklės nuorodą su būtinais argumentais: 2019

Turėjau problemos, kai naudojosi „AngularJS“ prieigai prie savo API. Tas pats užklausa veikė „SoapUI 5.0“ ir „ColdFusion“. Mano GET metodas jau turėjo „Access-Control-Allow-Origin“ antraštę.

Sužinojau, kad „ AngularJS“ pateikia „bandymų“ OPTIONS užklausą . „ColdFusion“ pagal nutylėjimą generuoja „OPTIONS“ metodą, bet ne tiek daug, kad šios antraštės yra ypatingos. Atsakant į šį OPTIONS skambutį įvyko klaida, o ne mano sąmoningas GET skambutis. Pridėjus žemiau esantį „OPTIONS“ metodą į savo API, problema buvo išspręsta.

 <cffunction name="optionsMethod" access="remote" output="false" returntype="any" httpmethod="OPTIONS" description="Method to respond to AngularJS trial call"> <cfheader name="Access-Control-Allow-Headers" value="Content-Type,x-requested-with,Authorization,Access-Control-Allow-Origin"> <cfheader name="Access-Control-Allow-Methods" value="GET,OPTIONS"> <cfheader name="Access-Control-Allow-Origin" value="*"> <cfheader name="Access-Control-Max-Age" value="360"> </cffunction> 
8
29 янв. Leonido Alzino atsakymas sausio 29 d 2015-01-29 03:06 '15 at 3:06 2015-01-29 03:06

Galite išspręsti šią problemą naudodami „YQL“, kad galėtumėte perduoti užklausą per „Yahoo“ serverius. Tai tik kelios kodo eilutės:

 var yql_url = 'https://query.yahooapis.com/v1/public/yql'; var url = 'your api url'; $.ajax({ 'url': yql_url, 'data': { 'q': 'SELECT * FROM json WHERE url="'+url+'"', 'format': 'json', 'jsonCompat': 'new', }, 'dataType': 'jsonp', 'success': function(response) { console.log(response); }, }); 

Čia yra nuoroda su paaiškinimu: https://vverma.net/fetch-any-json-using-jsonp-and-yql.html

7
21 нояб. Atsakymas pateikiamas camnesia 21 lapkričio. 2016-11-21 17:59 '16 at 17:59 pm 2016-11-21 17:59

https://github.com/Rob--W/cors-anywhere/ suteikia (Node.js) kodą, kurį galite naudoti norėdami konfigūruoti ir paleisti savo CORS proxy serverį. Ji yra aktyviai palaikoma ir suteikia daug funkcijų, kaip valdyti proxy elgesį ne tik siunčiant teisingas „ Access-Control-* atsakymo antraštes.

https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS pateikia išsamią informaciją apie tai, kaip naršyklės tvarko kryžminę kilmę, kad kliento žiniatinklio programos sukurtų iš „JavaScript“ ir kokias antraštes reikia konfigūruoti siųsti. jei galite, prašyti serverio.

Tuo atveju, kai svetainė, į kurią reikia siųsti užklausą ir gauti atsakymą, negrąžina „ Access-Control-Allow-Origin atsakymo antraštės, naršyklės visada blokuos jų kilmės užklausas, kurias jie pateikia tiesiogiai jūsų kliento pusės JavaScript scenarijaus kode. Ir jei svetainė nėra ta, kurią jūs valdote, ir galite pritaikyti elgesį, vienintelis dalykas, kuris šiuo atveju veiks, yra proxy užklausos - per savo pradinį serverį, kurį pradėjote, arba atviru tarpiniu serveriu.

Kaip minėta kituose komentaruose, yra priežasčių, kodėl nepasitikite atviru įgaliotiniu su jūsų prašymais. Tačiau, jei žinote, ką darote, ir nuspręsite, kad jūsų poreikius atitinkantis atviras tarpinis serveris veikia, https://cors-anywhere.herokuapp.com/ yra patikimai prieinamas, aktyviai palaikomas ir veikia kaip pavyzdys https://github.com/Rob--W/cors-anywhere/ .

Kaip ir kiti čia paminėti atviri tarpiniai serveriai (bent jau atrodo, kad pora nebėra), kaip veikia, yra tai, kad vietoj jūsų kliento kodo, siunčiančio užklausą tiesiogiai, pvz., http://foo.com , atsiunčiate jį https://cors-anywhere.herokuapp.com/http://foo.com , o proxy prideda būtinas „ Access-Control-* antraštes į atsakymą, kurį mato naršyklė.

7
12 марта '17 в 10:01 2017-03-12 10:01 atsakymą pateikia „ oldhowbarker“ kovo 12 d., 17 val. 10:01 2017-03-12 10:01

Mano atveju naudoju JEE7 JAX-RS programą, o šie gudrybės man puikiai veikė:

 @GET @Path("{id}") public Response getEventData(@PathParam("id") String id) throws FileNotFoundException { InputStream inputStream = getClass().getClassLoader().getResourceAsStream("/eventdata/" + id + ".json"); JsonReader jsonReader = Json.createReader(inputStream); return Response.ok(jsonReader.readObject()).header("Access-Control-Allow-Origin", "*").build(); } 
5
13 авг. Bhuwan Gautam atsakymas, pateiktas rugpjūčio 13 d 2016-08-13 19:40 '16 at 7:40 pm 2016-08-13 19:40

Jei naudojate „ Entity Framework“ , atrodo, kad ši klaida kartais įvyksta, net jei turite CORS . Supratau, kad klaida įvyko dėl to, kad nebuvo užpildyta užklausa. Tikiuosi, kad tai padės kitiems toje pačioje situacijoje.

Toliau pateiktame kode XMLHttpRequest cannot load http://myApiUrl/login. No 'Access-Control-Allow-Origin' header is present on the requested resource. klaida XMLHttpRequest cannot load http://myApiUrl/login. No 'Access-Control-Allow-Origin' header is present on the requested resource. nepavykti XMLHttpRequest cannot load http://myApiUrl/login. No 'Access-Control-Allow-Origin' header is present on the requested resource. XMLHttpRequest cannot load http://myApiUrl/login. No 'Access-Control-Allow-Origin' header is present on the requested resource. :

 using (DBContext db = new DBContext()) { return db.Customers.Select(x => new { Name = x.Name, CustomerId = x.CustomerId, }); } 

Norėdami išspręsti šią problemą, užklausos pabaigoje turite baigti užbaigti, pvz., .ToList() arba .FirstOrDefault() :

 using (DBContext db = new DBContext()) { return db.Customers.Select(x => new { Name = x.Name, CustomerId = x.CustomerId, }).ToList(); } 
5
03 нояб. atsakymą pateikė Loyalar, lapkričio 3 d. 2015-11-03 11:00 '15 11:00 val. 2015-11-03 11:00

Jei naršyklėje gaunate šį klaidos pranešimą:

 No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin '…' is therefore not allowed access 

kai bandote atlikti AJAX POST / GET užklausą nuotoliniam serveriui, kuris nėra kontroliuojamas, pamiršite šį paprastą pataisymą:

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

Jums iš tikrųjų reikia, ypač jei naudojate „JavaScript“, kad įvykdytumėte „Ajax“ užklausą - vidinį tarpinį serverį, kuris priima jūsų užklausą ir siunčia jį į nuotolinį serverį.

Pirma, „JavaScript“ kode skambinkite „Ajax“ į savo serverį, pavyzdžiui:

 $.ajax({ url: yourserver.com/controller/proxy.php, async: false, type: "POST", dataType: "json", data: data, success: function (result) { JSON.parse(result); }, error: function (xhr, ajaxOptions, thrownError) { console.log(xhr); } }); 

Tada sukurkite paprastą PHP failą, vadinamą proxy.php, kad apvyniotumėte POST duomenis ir pridėtumėte jį prie nuotolinio URL serverio kaip parametrus. Pateiksiu pavyzdį, kaip susiduriu su šia problema naudojant „Expedia“ paieškos API:

 if (isset($_POST)) { $apiKey = $_POST['apiKey']; $cid = $_POST['cid']; $minorRev = 99; $url = 'http://api.ean.com/ean-services/rs/hotel/v3/list?' . 'cid='. $cid . ' . 'minorRev=' . $minorRev . ' . 'apiKey=' . $apiKey; echo json_encode(file_get_contents($url)); } 

Atlieka:

 echo json_encode(file_get_contents($url)); 

Jūs paprasčiausiai vykdote tą patį užklausą, bet serverio pusėje, ir po to jis turėtų veikti gerai.

Atsakymas nukopijuojamas ir įklijuotas iš „ NizarBsb“

4
26 окт. atsakymas suteiktas Flash Oct 26. 2017-10-26 16:23 '17, 16:23 pm 2017-10-26 16:23

Aš galėjau sėkmingai nuspręsti (mano šriftų atveju) naudoti htaccess, bet akivaizdu, kad OP nustato šiek tiek kitokį. Tačiau galite naudoti „FileMatch“ šabloną ir pridėti bet kokį plėtinį, kad jis nesukurtų kroso klaidos.

 <IfModule mod_headers.c> <FilesMatch "\.(ttf|ttc|otf|eot|woff|woff2|font.css|css)$"> Header set Access-Control-Allow-Origin "*" </FilesMatch> </IfModule> 

https://httpd.apache.org/docs/2.4/mod/core.html#filesmatch

4
15 июня '17 в 11:39 2017-06-15 11:39 atsakymas duotas danų birželio 15 d. 17 val. 11:39 2017-06-15 11:39

„Go>

Pirmiausia galite pažvelgti į MDN CORS Doc ir sužinoti, kas yra CORS. Kiek aš žinau, CORS kalba apie tai, ar leisti „Origin Request“ pasiekti serverio išteklius, ar ne.

Ir jūs galite apriboti, kuris užklausos šaltinis gali pasiekti serverį, serverio atsakymo Header nustatydamas „ Access-Control-Allow-Origin “.

Pavyzdžiui, serverio atsakyme nustatant toliau nurodytą antraštę, prie jūsų serverio galima pasiekti tik iš http://foo.example :

 Access-Control-Allow-Origin: http://foo.example 

ir tada leisti užklausą, išsiųstą iš bet kurio šaltinio (arba domeno):

 Access-Control-Allow-Origin: * 

Ir kaip žinau klaidos pranešime, requested resource reiškia serverio išteklius, todėl No 'Access-Control-Allow-Origin' header is present on the requested resource. reiškia, kad nenustatėte „ Access-Control-Allow-Origin antraštės serverio atsakyme, arba galbūt jį nustatėte, tačiau užklausos šaltinis nėra Access-Control-Allow-Origin , todėl užklausa neleidžiama:

Nėra „Access-Control-Allow-Origin“ antraštės prašomame šaltinyje. Todėl originalas „null“ neleidžiamas.

„Go>gorilla/mux API serveriui kurti „ localhost:9091 , ir leidžiu CORS pridėti "Access-Control-Allow-Origin", "*" atsakymo antraštėje:

 func main() { // API Server Code router := mux.NewRouter() // API route is /people, //Methods("GET", "OPTIONS") means it support GET, OPTIONS router.HandleFunc("/people", GetPeople).Methods("GET", "OPTIONS") log.Fatal(http.ListenAndServe(":9091", router)) } // Method of '/people' route func GetPeople(w http.ResponseWriter, r *http.Request) { // Allow CORS by setting * in sever response w.Header().Set("Access-Control-Allow-Origin", "*") w.Header().Set("Access-Control-Allow-Headers", "Content-Type") json.NewEncoder(w).Encode("OKOK") } 

Ir naudoju „JavaScript“ kliente, „ localhost:9092 norite, kad „Chrome“ galėtų sėkmingai gauti „OKOK“ iš serverio localhost:9091 .

 function GetPeople() { try { var xhttp = new XMLHttpRequest(); xhttp.open("GET", "http://localhost:9091/people", false); xhttp.setRequestHeader("Content-type", "text/html"); xhttp.send(); var response = JSON.parse(xhttp.response); alert(xhttp.response); } catch (error) { alert(error.message); } } 

Be to, galite patikrinti užklausos / atsakymo antraštę su tokiais įrankiais kaip Fiddler .

4
19 нояб. atsakymą pateikė „ yu yang Jian Nov 19“ 2017-11-19 15:19 '17 15:19 2017-11-19 15:19

Populiarus klausimas - dar vienas dalykas, kurį reikia pažvelgti, jei jį perskaitėte, ir nieko daugiau nepadėjo. Jei turite CDN, pavyzdžiui, „Akamai“, „Limelight“ ar pan., Galite patikrinti talpyklos raktą, kurį turite išteklių URI. Jei jame nėra „Origin“ antraštės vertės, galite grąžinti atsakymą į talpyklos užklausą kitam šaltiniui. Mes tiesiog praleido pusę dienos derinimo. CDN konfigūracija buvo atnaujinta, kad į ją būtų įtraukta tik keletas pasirinktų domenų, kurie yra mūsų, ir kad visi kiti nustatytų nulinę reikšmę. Atrodo, kad tai veikia ir leidžia naršyklėms iš žinomų domenų naršyti mūsų išteklius. Žinoma, visi kiti atsakymai yra būtina sąlyga norint pasiekti čia, bet jei CDN yra pirmasis perėjimas iš jūsų naršyklės, tai yra kažkas, į kurį reikia atsižvelgti.

Mūsų atveju galėtume matyti, kaip kai kurie prašymai patenka į mūsų paslaugą, bet ne tiek, kiek iš svetainės siunčiama suma. Tai parodė mus į CDN. Galėjome grįžti ir matyti, kad pirminis prašymas buvo pateiktas naudojant tiesioginį prašymą, o ne AJAX naršyklės skambučio, o „Access-Control-Allow-Origin“ atsakymo antraštė nebuvo įtraukta. Atrodo, kad CDN išsaugojo šią vertę. „Akamai CDN“ konfigūracijos konfigūracija, kad būtų atsižvelgta į „Origin“ užklausos antraštės vertę kaip atitikmenį, atrodė, kad ji veikia mums.

4
07 сент. Atsakymas pateikiamas Nr. 2017-09-07 17:49 '17, 17:49 PM 2017-09-07 17:49

Daug kartų tai atsitinka man iš javascript į savo php api, dėl vienos iš kelių priežasčių. Pamiršau įdėti <?php header('Access-Control-Allow-Origin: *'); ? <?php header('Access-Control-Allow-Origin: *'); ? vienas Tai naudinga norint pasiekti kryžminius domenus. Kita priežastis yra ta, kad „jQuery ajax“ užklausoje nurodau konkretų duomenų tipą ir grąžinu kitą duomenų tipą, todėl jis pateikia klaidą.

Paskutinis ir labiausiai žinomas šio klaidos argumentas yra tas, kad pageidaujamame puslapyje yra sintaksės klaida. Jei spustelėsite šio puslapio URL savo naršyklėje, greičiausiai pamatysite klaidos analizę ir turėsite eilutės numerį problemai išspręsti.

Tikiuosi, kad tai padės kam nors. Prireikė šiek tiek laiko derinti šią problemą, ir norėčiau, kad turėčiau tikrintinų dalykų sąrašą.

3
25 марта '16 в 23:54 2016-03-25 23:54 Atsakymą pateikė Garrett Tacoronte , kovo 25 d., 16 val. 23:54 2016-03-25 23:54

Dėl išsamumo „ Apache“ leidžia:

 Header set Access-Control-Allow-Origin "http://www.allowonlyfromthisurl.com" Header set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT" Header set Access-Control-Max-Age "1000" Header set Access-Control-Allow-Headers "x-requested-with, Content-Type, Accept-Encoding, Accept-> 
2
20 нояб. atsakymas pateikiamas zak 20 nov. 2017-11-20 03:05 '17 at 3:05 2017-11-20 03:05

Gavau šią klaidą iš „ $http.get . Мне нужно было использовать $http.jsonp .

2
ответ дан Travis Heeter 13 февр. '17 в 20:46 2017-02-13 20:46