2013-03-15 12 views
5

Chodzi o to, że mam poddomeny, która jest punktem końcowym interfejsu API do przesyłania plików. Ale gdy próbuję przesłać coś z jQuery do tej subdomenie (z głównej domeny www) Dostaję błądPrzesyłanie pliku AJAX między domenami

XMLHttpRequest nie może załadować http://1.storage.site.net/upload. Pochodzenie http://www.site.net jest niedozwolone przez Access-Control-Allow-Origin.

Próbowałem wszystkiego: nagłówki w nginx, nagłówków w kodzie źródłowym, próbowałem nawet wysyłając plik skrótową plik z tylko

<?php 

header('Access-Control-Allow-Origin: *'); 
header('Access-Control-Allow-Methods: POST, GET, OPTIONS'); 
header('Access-Control-Max-Age: 1000'); 
header('Content-type: application/json'); 
header('Access-Control-Allow-Headers: *'); 

echo json_encode(['lulz' => 123]); 

W dwóch słowach: nic nie działa.

ALE. Zauważyłem, że małe pliki (~ 1MB) ładują się poprawnie, a pliki są nieco większe (powiedzmy 5 MB) - NIE (pochodzenie nie jest dozwolone).

Czy istnieje sposób na rozwiązanie tego problemu?

+0

To dziwne, że małe pliki działają. Oczekuję, że nic nie zadziała, ponieważ jest to naruszenie zasady [tego samego pochodzenia] (http://en.wikipedia.org/wiki/Same_origin_policy). –

+1

@Mike dlatego wysyła nagłówki 'Access-Control- * '. Mówią przeglądarce: "Wiem, że to naruszenie zasad, ale jest fajnie, człowieku". http://en.wikipedia.org/wiki/Same_origin_policy#Cross-Origin_Resource_Sharing –

Odpowiedz

2

Założę się, że plik 5 MB jest zbyt duży dla ustawienia Apache'a (max_request_body), co prowadzi do tego, że skrypt PHP nie jest wykonywany, dlatego nigdy nie wysyła tych nagłówków, co z kolei generuje błędny krzyż. błąd domeny.

Jeśli to założenie jest prawdziwe, powinieneś zobaczyć więcej szczegółów w zakładce "Net" w przeglądarce - skrypt do wysyłania powinien zwracać pewien warunek błędu.

Aby przeprowadzić debugowanie, można przesłać plik w normalnym formularzu, przetestować go i dostosować, dopóki nie zadziała.

+1

Tak, okazuje się, że przeglądarki nie mogą poprawnie wyświetlić błędu 413. Kiedy próbowałem przesłać plik nie z AJAX, ale bezpośrednio (z formularzem HTML), otrzymałem 412 błędów HTML. Chodziło o ustawienie nginx client_max_body_size. –

+0

Cóż, jeśli to była odpowiedź, sprawdź to. –