Mai mult
De ce nu-mi codul JavaScript obține un "Nu 'Access-Control-Allow-Origin' antet este prezent pe resursa solicitată" eroare atunci când Poștașul nu?
Încerc să fac autorizare folosind JavaScript prin conectarea la Odihnitor API a construit în Vas. Cu toate acestea, atunci când am face solicitare, primesc următoarea eroare:
nu se poate încărca XMLHttpRequest http://myApiUrl/login. Nu 'Access-Control-Allow-Origin' antet este prezent pe resursa solicitată. Originea 'nul' este, prin urmare, nu este permis accesul.
Știu că API sau de la distanță a resurselor trebuie să setați antetul, dar de ce a mers cand am facut cerere prin extensia Chrome Poștaș?
Aceasta este cererea de cod:
$.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);
});
2309
44
Dacă am înțeles bine faci un XMLHttpRequest pentru un alt domeniu decât pagina ta este pe. Deci, browser-ul se blochează, deoarece permite, de obicei, o cerere în aceeași origine, din motive de securitate. Ai nevoie de a face ceva diferit atunci când vrei să faci un cross-domain cerere. Un tutorial despre modul de a realiza că este Folosind CORS.
Atunci când utilizați poștașul nu sunt limitate prin această politică. Citat din Cross-Origin XMLHttpRequest:
Cea mai ușoară cale este să adăugați extensia în google chrome pentru a permite accesul folosind CORS.
(https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi?hl=en-US)
Doar permite această extensie ori de câte ori doriți permite accesul la nici un 'access-control-allow-origin' antet cerere.
Sau
În Windows, pasta această comandă în fugi fereastra
aceasta va deschide o noua chrome browser care permite accesul la nici un 'access-control-allow-origin' antet cerere.
Dacă se poate face cu JSON în schimb, încercați să utilizați JSONP (nota P la sfârșitul) pentru a vorbi între domenii:
Afla mai multe despre lucrul cu JSONP aici:
L's foarte simplu de rezolvat dacă utilizați PHP. Trebuie doar să adăugați următorul script la început de pagină PHP care se ocupă de cerere:
Dacă utilizați Nod-red trebuie să permită CORS în node-red/settings.js dosarul lui de către onu-comentarea următoarele linii:
Dacă utilizați Vas la fel ca și întrebarea; trebuie mai întâi să instalați `balon-cor
Apoi includ vasul cors în aplicația dvs.
O aplicație simplă va arata ca
Pentru mai multe detalii, puteți verifica balon documentația
Aș vrea ca cineva împărtășit acest site cu mine mult timp în urmă http://cors.io l-ar fi salvat o tona de timp în comparație cu clădirea și bazându-se pe propria mea proxy. Cu toate acestea, pe măsură ce trece la producție, având propria proxy este cel mai bun pariu din moment ce încă mai controla toate aspectele legate de datele tale.
Tot ce ai nevoie:
https://cors.io/?http://HTTP_YOUR_LINK_HERE
Dacă utilizați Node.js, încercați să-l:
Mai multe informații: CORS pe ExpressJS
Nu's a cross-domain problema folosind Ajax. Tu trebuie să fii sigur că sunt accesarea fișierelor de pe același
http://
calea fărăwww.
(sau de acces la http://www.și post la aceeași cale, inclusiv
www.) care browser-ul consideră ca un alt domeniu, atunci când accesează prin intermediul unui
www.` calea, astfel încât veți vedea unde este problema. Postați la un domeniu diferit și browser-ul blochează fluxul din cauza originii problema.Dacă API nu este plasat pe aceeași gazdă care se solicită din, fluxul este blocat și va trebui să găsească un alt mod de a comunica cu API.
Pentru că
$.ajax({tipul: "POST" - Apeluri OPȚIUNI
$.post( - Apeluri POST
ambele sunt diferite sună Poștașul "POST" corect, dar atunci când am apel va fi "OPȚIUNI"
Pentru c# servicii web - webapi
Vă rugăm să adăugați următorul cod în dvs. de web.config sub <sistemul.server de web> tag. Acest lucru va funcționa
Vă rugăm să asigurați-vă că nu faceți nici o greșeală în apel ajax
jQuery
Unghiulare 4 problemă, vă rugăm să consultați : http://www.hubfly.com/blog/solutions/how-to-fix-angular-4-api-call-issues/
Notă: Dacă sunteți în căutarea pentru descărcarea de conținut de la terțe părți site-ul apoi acest lucru nu te va ajuta. Puteți încerca următoarele cod, dar nu JavaScript.
Încerca XDomain,
Dacă NU doriți să:
și sunteți sigur că server-ul dvs. are CORS activat atunci (test CORS aici: http://www.test-cors.org/)
Apoi, aveți nevoie pentru a trece de origine parametru cu cererea dumneavoastră. Această origine TREBUIE să se potrivească origine care browser-ul dvs. trimite cu cererea dumneavoastră.
Îl puteți vedea în acțiune aici: http://www.wikinomad.com/app/detail/Campgrounds/3591
Editare funcționalitate trimite o IA & cerere POST la un alt domeniu pentru preluarea datelor. Am stabilit originea parametru care rezolvă problema. Backend este un mediaWiki motor.
tldr: Adăugați "originea" parametru de apeluri care trebuie să fie de Origine parametru care browser-ul dvs. trimite (nu se poate falsifica originea parametru)
Am avut o problema cu asta atunci când am folosit AngularJS pentru a accesa API. Aceeași cerere a lucrat în SoapUI 5.0 si ColdFusion. Mea metoda avut deja Access-Control-Allow-Origin antet.
Am aflat că AngularJS face o "procesul" OPȚIUNI de cerere. ColdFusion, implicit, generează OPȚIUNI metoda, dar nu trebuie mult, aceste antete, în special. Eroarea a fost generat ca răspuns la faptul că OPȚIUNILE de apel, și nu a mea intenționată apel pentru a OBȚINE. După ce am adăugat OPȚIUNI metoda de mai jos pentru a-mi API, problema a fost rezolvată.
Bazat pe shruti's a răspunde, am'am creat o comandă rapidă de la browser-ul Chrome cu nevoie de argumente:
Am avut următoarea configurație, care rezultă în aceeași eroare, atunci când solicită răspunsuri de la server.
Server-side: SparkJava --> oferă RESTUL-API Client-side: ExtJs6 --> oferă Browser-ul de randare
Pe server-side am avut de a adăuga acest răspuns:
Pe client-side I trebuit să adauga această cerere:
https://github.com/Rob--W/cors-anywhere/ oferă (Node.js) cod pe care îl puteți folosi pentru a configura și rula propria ta CORS proxy. Este menținut în mod activ și oferă o serie de caracteristici pentru controlul proxy comportament dincolo de bază trimiterea corectă de Acces-Control-*` anteturile de răspuns.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS are detalii pentru a explica cum browsere se ocupe de cross-origine solicită ca partea clientului aplicatii web face din JavaScript și ce anteturile trebuie să configurați trimiterea de către server o cerere este făcută pentru tine, dacă poți.
În cazul în care un site ai nevoie pentru a face o cerere și a obține un răspuns de la a nu-i reveni
Access-Control-Allow-Origin
antet de răspuns, browsere sunt întotdeauna de gând să blocheze cross-origin solicitări adresate direct de către client-side JavaScript cod de lucru. Și deci, dacă site-ul nu este o poți controla și poate configura comportamentul, singurul lucru care va lucru în acest caz este proxy cererile—fie prin proxy propriu de a executa singur sau printr-un proxy deschis.Așa cum am menționat în alte comentarii aici, există motive bune pentru care nu am încredere într-un proxy deschis cu solicitările dumneavoastră. Asta a spus, dacă știi ce faci și de a vă decide un proxy deschis lucrările pentru nevoile tale, https://cors-anywhere.herokuapp.com/ este unul fiabil disponibile, menținut în mod activ, și care ruleaza un exemplu de https://github.com/Rob--W/cors-anywhere/ cod.
Ca și cu alte proxy-uri deschise menționate aici (un cuplu din care cel puțin par să nu fie disponibile mai), modul în care aceasta funcționează este că în loc de a avea codul de client trimite o cerere direct la, de exemplu,
http://foo.com tu trimite-l la
https://cors-anywhere.herokuapp.com/http://foo.comși proxy adaugă necesare de Acces-Control-*
anteturile de răspuns browser-ul vede.Puteți trece de la problemă prin utilizarea YQL să proxy cererea prin Yahoo's servere. Acesta este la doar câteva linii de cod:
Aici's link-ul cu o explicație: https://vverma.net/fetch-any-json-using-jsonp-and-yql.html
a pune acest lucru în fața url-ul dvs.: https://cors-anywhere.herokuapp.com/
deci, de exemplu: https://cors-anywhere.herokuapp.com/https://www.ndbc.noaa.gov/data/realtime2/46258.txt
În cazul meu, am fost folosind JEE7 JAX-RS cerere și următoarele trucuri lucrat perfect pentru mine:
Dacă utilizați Entity Framework, se pare că această eroare va fi, uneori, aruncat chiar dacă au
COR
ului. Mi-am dat seama că eroarea a avut loc din cauza lipsei de finalizare a interogării. Am'm sperând că acest lucru va ajuta pe alții în aceeași situație.Codul următor poate arunca
XMLHttpRequest nu se poate încărca http://myApiUrl/login. Nu 'Access-Control-Allow-Origin' antet este prezent pe resursa solicitată.
eroare:Pentru a remedia problema, o finalizare apel ca `.ToList () "sau".FirstOrDefault () la sfârșitul interogare este necesar, astfel:
Am reușit cu succes să rezolve (in cazul meu pentru fonturi) folosind htaccess dar, evident, OP cere pic diferit. Dar puteți folosi FileMatch model și se adaugă nici un fel de extensie, astfel încât nu va't da cros de eroare.
https://httpd.apache.org/docs/2.4/mod/core.html#filesmatch
Dacă serverul dvs. este un Springboot Aplicație, atunci vă rugăm să adăugați această adnotare în restul controlerul de la top -
@CrossOrigin
Acesta ar trebui să funcționeze acum . Multumesc