Puncte:0

„CORS Multiple Origin Not Allowed” - folosind parse-server și apache2

drapel gi

Folosesc apache2 ca proxy invers pentru serverul meu de analiză. Pentru a permite cererile de origine încrucișată, am încercat inițial să setez:

Antetul setat întotdeauna Access-Control-Allow-Origin „*”

în fișierul de configurare apache împreună cu:

ProxyPass /parse/ http://localhost:1337/parse/
ProxyPassReverse /parse/ http://localhost:1337/parse/
RewriteEngine Pornit
RewriteCond %{REQUEST_METHOD} OPȚIUNI
RewriteRule ^(.*)$ $1 [R=200,L]

După setarea acestui lucru, cererile au fost transmise cu succes de la apache la serverul meu de analiză. Cu toate acestea, acum Webapp-ul meu aruncă CORS Origine multiplă nu este permisă.

În consola pentru dezvoltatori a browserului meu, pot vedea că această opțiune Access-Control-Allow-Origin este setată de două ori.

introduceți descrierea imaginii aici

Am confirmat că a doua instanță a acestui lucru apare din cauza parse-server. Cu toate acestea, nu găsesc o modalitate de a împiedica fie parse-server, fie apache să seteze această opțiune în răspuns.

Am încercat să-mi schimb linia inițială în configurația apache la:

1.

Antetul este întotdeauna gol Access-Control-Allow-Origin "*"
Antet adăugați întotdeauna Access-Control-Allow-Origin „*”
Antet adăugați întotdeauna Access-Control-Allow-Origin „*”
Antet editați întotdeauna Access-Control-Allow-Origin "^$" "*"

Niciuna dintre aceste încercări nu a schimbat nimic. Cu toate acestea, eliminarea Acces-Control-Permite-Origine opțiunea din configurația apache împiedică cererea inițială să ajungă la parse-server, deci aceasta nu este o opțiune.

Folosesc versiunea apache2 2.4.29 și parse-server 4.10.3.

Știe cineva o modalitate de a face asta să funcționeze?

Puncte:2
drapel cn

În primul rând, cred că este important să înțelegem puțin despre cum funcționează CORS:

  • CORS este validat la nivelul clientului de către browser.
  • Pentru a verifica dacă o origine (domeniu, protocol sau port diferit) are permisiunea de a accesa o altă origine a cerere înainte de zbor poate fi emis înainte de cererea de fapt Cross-Origin. Această solicitare folosește metoda OPȚIUNI și trebuie să conțină Controlul accesului antete în răspuns.

Deci, de ce spun asta: bănuiesc motivul pentru care trebuie să setați Acces-Control-Permite-Origine antetul din Apache pentru ca cererea să fie „în curs” este că configurația dvs. Apache nu este proxy OPȚIUNE cereri. Acest lucru face ca browserul să primească un răspuns neașteptat la solicitările înainte de zbor și să arunce o eroare CORS înainte chiar de a încerca să facă cererea reală.

Deoarece CORS este validat în browser, proxy-ul invers Apache nu ar trebui să joace niciun rol în el.Când serverul dvs. de backend (server de analiză) este configurat corect pentru a gestiona solicitările CORS și trimite Controlul accesului-* antete totul ar trebui să funcționeze, indiferent de câte proxy ai pune între ele. Asta atâta timp cât proxy-ul transmite toate solicitările.

Alternativ, este posibil să doriți să „plecați” configurația CORS în proxy-ul invers, dar acest lucru pare inutil aici. Din moment ce vezi doi Acces-Control-Permite-Origine antete din răspuns, bănuiesc că serverul de analiză încearcă deja să gestioneze cererea CORS.

Vă recomand să verificați mai întâi configurația Apache și să vă asigurați OPȚIUNE cererile sunt transmise către serverul de analiză. Dacă nu ar trebui să fie așa, m-aș uita la solicitările pe care browserul le face în fila de rețea a instrumentelor de dezvoltare:

  • Cum arată cererea înainte de zbor? Există măcar o cerere înainte de zbor?
  • Reușește sau eșuează și cu ce eroare?
  • Care sunt Controlul accesului-* antete de răspuns la cererea înainte de zbor?
  • Este emisă cererea finală? Care sunt anteturile de răspuns la cererea respectivă?

De asemenea, puteți depana aceste lucruri apelând serviciile cu răsuci prin setarea antetului de origine.

curl -v -X PUT -H „Origine: https://example.com” https://www.example.org

În acest fel, puteți simula cererile către serviciul dvs. de backend și puteți vedea ce anteturi trimite.

Puncte:0
drapel cn

În consola pentru dezvoltatori a browserului meu, pot vedea că această opțiune Access-Control-Allow-Origin este setată de două ori.

Referitor la anteturile duplicate, am răspuns o intrebare asemanatoare recent pe lista de corespondență.

Trebuie să citești referință de configurare pentru directiva Header cu atenție pentru a înțelege ce se întâmplă. Vezi în jurul următorului text: "nu oferă nicio listă unică „normalizată” de anteturi". În esență, așa cum înțeleg eu, de succes (implicit) și mereu sunt numele a două tabele (liste) separate de anteturi.

Încercați următoarele:

Antetul onsuccess dezactivat Access-Control-Allow-Origin
Antetul setat întotdeauna Access-Control-Allow-Origin „*”
Vinoth Rc avatar
drapel fr
Setul de antet Access-Control-Allow-Origin "*" funcționează

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.