Cross-domain ajax-cereri, și aici php, webdevkin

Încercarea de a obține date dintr-un alt domeniu

Și acum să luăm acest html-auax chiar din consola browserului.

Deschideți instrumentele pentru dezvoltatori chiar acum în browser și pe fila consola, executați această interogare.

Veți vedea ceva de felul următor

Totul este minunat, am trimis o cerere, am primit un răspuns. Se pare că ar putea fi mai ușor? Și acum mergeți la orice alt site unde jQuery este conectat și încercați să faceți același lucru. Doar nu pe site-ul https, de ce - aflați la sfârșitul articolului.

De exemplu, am verificat solicitările de pe site-ul de fotbal bombardir.ru. Și, în același timp, m-am întrebat ce doar gunoi nu se încadrează în consola chiar și la o astfel de site-uri suficient de bine-cunoscute. Cu toate acestea, conversația nu este despre asta.

Rulați interogarea dintr-un alt domeniu și veți vedea în consola nu este o imagine atât de bună. El spune că este imposibil de descărcat, nu există date și, în general, există tristețe.

Dacă deschideți fila Rețea și găsiți acolo o cerere corespunzătoare, veți vedea că serverul a returnat chiar 200 OK

Cross-domain ajax-cereri, și aici php, webdevkin
Și nu există conținut de fișier. Care este captura?

Ce a mers prost și care ar fi decizia

Cunoașterea este că politica privind Internetul nu permite browserelor să tragă date din orice resurse. În plus față de acele cazuri în care aceste resurse sunt ele însele interesate de distribuirea de date specifice.
Cazul nostru este exact așa. Pentru a da permisiunea de a utiliza fișierul html de oriunde, trebuie să trimiteți http-header Access-Control-Allow-Origin: *

Acum întrebarea este cum să o faceți. Dacă tu (sau administratorii) aveți acces la nginx, atunci o modalitate va fi să setați proxy-ul pentru acest antet folosind serverul web. Accesați administratorii cu cererea corespunzătoare sau Google configările necesare pentru serverul dvs. web.

Dacă acest acces nu este disponibil, de exemplu, pentru aproape orice furnizor de servicii de găzduire la un tarif ieftin, atunci trebuie să vă scoateți. Și aici php vine la salvare. Ideea este să aruncăm html-ku-ul nostru într-un fișier php, care va arunca titlul și va da conținutul dorit.

Deci, creați un fișier template.php și scrieți comanda php la primul rând

Și apoi codul html

Asta este, conținutul template.php va fi așa, nu uitați despre întrebările php-shny și paranteze

Fișierul de pe webdevkin este creat și este aici (se deschide într-o filă nouă). Să încercăm acum să o solicităm din alt domeniu și să vedem ce se va întâmpla

După cum puteți vedea, totul funcționează bine - fișierul este încărcat!

Să ne uităm la fila Rețea.
Rețineți că rubrica Access-Control-Allow-Origin a apărut în blocul Headers Response: *

Cross-domain ajax-cereri, și aici php, webdevkin

Rezumați și rezumați rezultatele

  • 1. Nu puteți doar să căutați ajax pentru orice resursă dintr-un alt domeniu
  • 2. Trimiteți antetul Access-Control-Allow-Origin pentru toate resursele la care aveți nevoie de acces de oriunde
  • 3. Face acest lucru cu serverul web sau php
  • 4. În php, acest antet este trimis de antetul comenzii ('Access-Control-Allow-Origin: *')
  • 5. Access-Control-Allow-Origin: * - permite accesul la toate domeniile, Access-Control-Allow-Origine: site.ru - domain.ru numai site.ru
  • 6. Access-Control-Allow-Origin este trimis chiar la începutul fișierului php, chiar înainte de ieșirea altor date (precum și orice alte http-headers)
  • 7. „resurse“ - nu este doar un fișier cu HTML-aspect, dar orice adresă URL nr, care este ajax-cerere, de exemplu, obtinerea JSON-sau post-date cerere pentru a adăuga un rând în tabelul bazei de date

Și ultimul, înmânat separat. Am cerut cu bună știință să îndeplinesc cererile de la site-ul http. Cu https nu va funcționa pentru a încărca date din http pentru alt motiv - conținutul mixt. Și webdevkin.ru până acum http-site (actualizat: nu mai, transferat webdevkin.ru la https)

Iată ce veți vedea în consola, încercând să executați aceeași interogare de pe orice site https. Prin urmare, dacă aveți de gând să vă ocupați de widget-uri încorporate sau ceva similar, ar trebui să puneți sigur certificatul SSL pe site-ul dvs.