Hulp met CORS

Status
Niet open voor verdere reacties.

Wesleyyyy

Gebruiker
Lid geworden
16 jun 2009
Berichten
30
Hey beste mensen,

Ik heb een probleem met het volgende:

Het bedrijf waarvoor ik een website maak, heeft 2 domeinen. Op het 1e domein (www.domein1.com) staat een div, met recente posts van een blog. Nu wil ik dat die recente posts ook op domein 2 (www.domein2.com) komen, echter wil dit niet lukken.
Ik had een beetje rond gekeken, en had begrepen dat je dit met CORS kon oplossen.

Op domein 1 heb ik het volgende toegevoegd:
PHP:
<?php header( "Access-Control-Allow-Origin: http://www.domein2.com" ); ?>
Zo ver ik het mee had gekregen, zou dit domein 2 toestemming geven om content van domein 1 af te halen.
Dit lukt overigens niet.
Ik krijg de volgende error als ik naar domein 2:
Code:
XMLHttpRequest cannot load http://www.domein2.com/. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://domein1.com' is therefore not allowed access.

Kan iemand mij hiermee helpen?

Wesley
 
Kort googlen leert dat deze header beide kanten op gestuurd moet worden; Server X geeft Javascript an je browser, dat script stuurt een CORS header aan server Y, en server Y antwoordt met dezelfde CORS header.
Hoe dit de boel veiliger moet maken is mij niet duidelijk, maar ik heb dertien seconden naar de wiki gekeken:

http://en.wikipedia.org/wiki/Cross-origin_resource_sharing
 
Wat ik eruit opmaak is:
Je pagina komt van server 1.
In het javascript van die pagina doe je een AJAX request naar server2, met in dat request een CORS header die server1 vermeldt.
Server2 antwoordt ook met een CORS header waarin server1 wordt genoemd.
Iedereen is blij.


Server1 doet dus niets met CORS, het is AJAX die aan server2 vermeldt dat de 'origin' server1 is, en server2 antwoordt dat zijn content alleen gebruikt mag worden op pagina's die komen van server1.
 
Was heel even de weg kwijt, maar als het goed is hoort het dus zo:
Domein 1: header( "Access-Control-Allow-Origin: http://www.domein2.com" );
Domein 2: header( "Origin: http://www.domein1.com" );

Zo ja: hierdoor krijg ik best wel een aparte error:
Code:
XMLHttpRequest cannot load http://www.domein1.com/. The 'Access-Control-Allow-Origin' whitelists only 'http://www.domein2.com'. Origin 'http://domein2.com' is not in the list, and is therefore not allowed access.
 
Was heel even de weg kwijt, maar als het goed is hoort het dus zo:
Domein 1: header( "Access-Control-Allow-Origin: http://www.domein2.com" );
Domein 2: header( "Origin: http://www.domein1.com" );

...

*offtopic*
bekijk ook eens
.htaccess
Code:
 NO ENTRY outside of the LAN!
# no nasty crackerpots in here!
Order Allow,Deny
Deny from All
Allow from 192.168.0.0/24
 
The 'Access-Control-Allow-Origin' whitelists only 'http://www.domein2.com'. Origin 'http://domein2.com'

Dan zet je twee headers neer, een voor www.domein2.com en een voor domein2.com, dus zonder www


*offtopic*
bekijk ook eens
.htaccess

Dat helpt hier niet, CORS gaat over AJAX requests die niet naar gaan naar de website waar het javascript vandaan kwam.
 
Dat kan meerdere redenen hebben, maar de meest voor de hand liggende is de timeout van je ajax request te kort is ingesteld; soms komt je andere site snel genoeg met een antwoord, soms niet.
 
Het is nu niet meer af en toe. Ik weet nu wat het probleem is. Als ik naar "domein2.com" ga, dan krijg ik de recente posts te zien. Zodra ik naar "www.domein2.com" ga, krijg ik ze niet te zien.
Ik had het voor de zekerheid nog even na gekeken of ik de links wel goed had neer gezet. Die stonden er gewoon goed in.
Code:
header( "Access-Control-Allow-Origin: http://www.higienizer.com" );
	header( "Access-Control-Allow-Origin: http://higienizer.com" );
Vind het een beetje apart, aangezien ik de website met en zonder "www." neer heb gezet.
 
Zit er een redirect op je andere domein, die van www.foo.com naar foo.com redirect of andersom? Het is in principe het best om altijd www. in de domeinnaam te hebben, het weglaten is alleen voor hippe mensen die niet weten dat er meer is dan www :-)
 
Ik weet niet of het aan te raden is, maar...

Ik neem aan dat de recente posts in een database verwerkt worden. Is het dan niet een idee om daar een verbinding mee te sluiten?

Dus op domein2 log je in op domein1 zijn MySQL server om daar dan de gegevens uit te vissen?
 
Ik weet niet of het aan te raden is, maar...

Ik neem aan dat de recente posts in een database verwerkt worden. Is het dan niet een idee om daar een verbinding mee te sluiten?

Dus op domein2 log je in op domein1 zijn MySQL server om daar dan de gegevens uit te vissen?

Dit was 1 van mijn eerste ideeën. De database accepteerd alleen maar verbindingen vanaf de het domein waar die database aan verbonden is: je kan dus niet vanaf een ander domein er op verbinden.
 
Zou zelf gaan kijken of je probleem bij het versturen of het aankomen van de data ligt (Access-Control-Allow-Origin: *)
Gebruikt de blog verder auto refreshes o.i.d?
 
Zou zelf gaan kijken of je probleem bij het versturen of het aankomen van de data ligt (Access-Control-Allow-Origin: *)
Gebruikt de blog verder auto refreshes o.i.d?

Zodra ik bij Access-Control-Allow-Origin een * zet, krijg ik helemaal geen recente posts meer. Niet met 'www.', niet zonder.
Zover ik weet gebruikt de blog geen auto refresh.
 
Het zal denk ik met een * sowieso niet lukken, want het hele idee van deze regels is om te voorkomen dat het kan gebeuren dat elke willekeurige site toegang krijgt.

Wat is nu precies de situatie, wat heb je waar ingesteld en wat gaat er mis?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan