Jestem trochę nowicjuszem w tworzeniu stron internetowych i po wielu zmaganiach w sieci, mam rozwiązanie. Dzielę się tym, ponieważ czuję, że nie jest to dobrze udokumentowane i może być użyte przez kogoś innego, i ponieważ potrzebuję informacji zwrotnej.Jak ustawić prawdziwą politykę między domenami z wiosny i jquery
Chciałem przyznać określonym domenom dostęp do interfejsu API.
Przede wszystkim próbowałem ustawić nagłówki żądania, ale nie działało w ogóle z dwóch powodów.
Pierwszym powodem jest to, że nie pozwala go w crossdomain.xml:
<cross-domain-policy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.adobe.com/xml/schemas/PolicyFile.xsd">
<allow-http-request-headers-from domain="domain1WithoutSlashAtTheEnd" headers="*"/>
<allow-http-request-headers-from domain="domain2WithoutSlashAtTheEnd" headers="*"/>
</cross-domain-policy>
Drugim powodem jest to, że starałem się ustawić „Access-Control-allow-pochodzenie” nagłówek natomiast jest to bezużyteczne. Każdy taki niestandardowy nagłówek jest po prostu ignorowany. Faktycznie, serwer nie potrzebuje niczego w tym rodzaju, a jego zachowanie domyślne pozwoliło mi uzyskać pochodzenie (domeny) rozmowy, które byłem w stanie przetworzyć go w filtrze, co następuje:
String origin = hsRequest.getHeader("Origin");
if (allowedDomainList.contains(origin)) {
hsResponse.setHeader("Access-Control-Allow-Origin", origin);
} else {
throw new SomeException("domain not allowed");
}
gdzie " allowedDomainList "to lista String, w której podaję wszystkie domeny, które zezwalam na dostęp do mojego interfejsu API. Wygląda na to, że działa dobrze. Co o tym sądzisz? Chcesz być bardziej szczegółowe na temat:
headers="*"
Może tylko powiedzieć "Access-Control-Allow-Origin". Wtedy widziałem, że istnieje "bezpieczny" atrybut i nie wiem, co z nim zrobić.
Mam też problem z tym kodem już mam:
<!DOCTYPE cross-domain-policy
SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy>
I zastanawiam się jak to mogło interfer z zachowaniem mojej polityki. Wygląda na to, że nie ma on wpływu, ale plik crossdomain.xml jest dla mnie bardzo niejasny.
Ostatnia kwestia dotyczy jQuery (http://api.jquery.com/jQuery.ajax/). Dlaczego jQuery ma coś do ustawienia nagłówków, jeśli nie możemy uzyskać ich po stronie serwera? Co więcej, ma dwa sposoby na "nadawanie" nagłówków: użycie "beforeSend" i "nagłówków". Te dwa punkty nie mają dla mnie sensu i jak widać powyżej, w końcu straciłem dużo czasu na nic!
Z góry dziękuję za odpowiedzi!
Jeśli komunikujesz się między iFrame i nie przejmujesz się IE6 i 7, możesz użyć nowego 'postMessage()'. https://developer.mozilla.org/en-US/docs/DOM/window.postMessage –
Łańcuch pochodzenia = hsRequest.getHeader ("Origin"); \t \t \t if (allowedDomainList.contains (pochodzenie)) { \t \t \t \t hsResponse.setHeader ("Access Control Pozwala pochodzenia" pochodzenia); \t \t \t} else { \t \t \t \t powrotu; \t \t } – user1835565
Powyżej, moja własna korekta. Wciąż testuję. Nie chcę używać elementów iframe, chcę, aby domena zewnętrzna była w 100% odpowiedzialna za jego kod. Po prostu zapewniam funkcje serwera. – user1835565