2012-11-27 9 views
6

Aby ustawić odpowiedni zestaw testów dla CORS (żądania międzydomenowe), muszę mieć możliwość obsługi metody HTTP OPTIONS bezpośrednio ze skryptu. Dlatego mam prosty skrypt PHP, który wykrywa metodę OPTIONS i odpowiednio reaguje, wysyłając określone nagłówki.Jak skonfigurować serwer Apache tak, aby PHP mogło obsługiwać żądania HTTP?

Strona PHP nie stanowi problemu. Jeśli używam curl do wydania GET/POST/HEAD/PUT/etc. Żąda, aby wszyscy poszli do skryptu i wyraźnie obsługuje je dobrze. Jeśli jednak wydam polecenie OPCJE, to nigdy nie dotrze ono do skryptu: Apache natychmiast odpowiada na listę zestawów metod, które uważa za właściwe dla tego zasobu. Mogę powiedzieć, że skrypt nie jest uruchamiany (brak logowania, żadne z jego danych wyjściowych nie powoduje odpowiedzi itp.).

Przejrzałem konfigurację Apache, upewniłem się, że nie ma żadnego zastosowania. Htaccess jest przeszkodą. Udoskonaliłem kilka rzeczy, takich jak dyrektywy Limit/LimitExcept, ale nie mogę tego zmienić jego zachowanie. Próbowałem również znaleźć informacje na temat techniki z mojej młodości, która mogłaby tutaj pomóc: skrypty NPH (nie analizowane nagłówki); ale widocznie to zniknęło (przynajmniej nie mogę znaleźć żadnych najnowszych informacji na ten temat).

Pytanie brzmi: jak zmienić konfigurację Apache tak, aby mój skrypt obsługiwał OPCJE?

+0

Powinno to po prostu zadziałać - o ile nie masz LIMITU lub włączono określoną obsługę dla OPCJE. Ale a) musielibyśmy zobaczyć twój plik .conf, a po drugie to należy do błędu serwera. Sugeruje wykonanie migracji, ale w międzyczasie dodaje plik .conf. – Robbie

+0

Dodałbym .conf, ale jest to rozbudowana konfiguracja, która musi zrobić wiele rzeczy (do testowania wymagana jest duża zmienność konfiguracji). Moim kolejnym krokiem jest to, aby to zrobić, dopóki nie zadziała, ale liczyłem na dowody, zanim to zrobię, ponieważ nie jest to małe przedsięwzięcie. –

Odpowiedz

3

Właśnie przetestowałem mój własny PHP (5.3, Apache 2.2) i nadal działa (jak to ma na chwilę). OPCJE są wysyłane i pojawiają się w tablicy $ _SERVER, jak można się spodziewać,

Celem powinno być przywrócenie ustawień domyślnych (które powinny działać), a następnie skompilowanie kopii zapasowej z innymi opcjami, których potrzebujesz.

W przeciwnym razie, nie widząc pliku .conf, lecimy na ślepo - więc oto kilka rzeczy, których należy szukać.

  1. Wytyczne dotyczące limitów. Powiedziałeś, że tam się sprawdziłeś, ale po prostu do debugowania, usuń wszystkie odniesienia. Dołącz dowolne w vhostach, jak również katalogi mogą być indywidualnie zmieniane.
  2. samo dla LimitExcept (mówiłeś, że próbował - po prostu usunąć je wszystkie)
  3. sprawdzić zarówno .conf i .htaccess za ewentualne przekierowania lub innych warunków na podstawie RequestHeader lub REQUESTHEADER (do wyszukiwania i analizowania)
  4. [I” Przeczytałem też coś o sprawdzaniu na THE_REQUEST, ale nigdy wcześniej nie słyszałem tego. Warto sprawdzić też?]
  5. Na koniec sprawdź, czy nie masz określonego programu obsługi określonego dla OPCJE, tj. Script OPTIONS /cgi-bin/optionshandler i że twój program obsługi PHP jest podobnie określony, aby obsłużyć tylko GET i POST. Ponownie zapamiętaj vhosts i katalogi i .htaccess można indywidualnie zmienić, więc sprawdź je wszystkie.

To wszystko, co mogę wymyślić. W przeciwnym razie, jak sugerowałem, zacznij od zera (działa) i buduj wszystko inne, dopóki nie zadziała.

+0

Starożytny post, ale jest najbardziej informacyjny, który znalazłem podczas badania niedawnego problemu. W końcu, moim problemem było to, że korzystałem z libapache2-mod-php5filter zamiast mod-php5. (Nie mam pojęcia dlaczego, zainstalowałem to dawno temu). Filtr php5 nie przekazuje OPCJI do PHP. Przejście na mod-php5 naprawiło problem dla mnie. – Fanjita

Powiązane problemy