Я борюсь с этой проблемой уже много часов... :-(
Мое приложение angular, обслуживаемое grunt, отправляет запрос $http GET к простой службе PHP на том же хосте (apache), чтобы получить список людей. В результате я получаю запрос OPTIONS (???), который получает ответ 405... Но почему предварительный запрос OPTIONS перед GET???
Вот подробности моей установки:
Конфигурация Grunt Gruntfile.js:
grunt.initConfig({
...
connect: {
options: {
port: 9000,
hostname: '0.0.0.0',
livereload: 35729
},
},
...
Служба Angular persons.js:
app.service('Persons', function($http) {
...
return({
getPersons: function () {
return $http({
method: 'get',
url: http://192.168.1.1/myapp/api/persons/get',
}).then(handleSuccess, handleError);
},
...
});
...
Файл /api/persons/get/index.php:
...
header("Access-Control-Allow-Origin", "http://192.168.1.1:9000");
header("Access-Control-Allow-Methods", "Cache-Control, Pragma, Origin, Authorization, Content-Type, X-Requested-With");
header("Access-Control-Allow-Headers", "GET, PUT, POST, OPTIONS, DELETE, X-XSRF-TOKEN");
echo json_encode($persons);
(На самом деле, на стороне сервера я использую Slim framework, так что это файл "index.php", который обслуживает запросы "/api/persons/..." через .htaccess: "... RewriteRule ^( .)$ index.php [QSA,L]"...*)
И это (грустный :-() результат, который я получаю:
Remote Address:192.168.1.1:80
Request URL:http://192.168.1.1/myapp/api/persons/get
Request Method:OPTIONS
Status Code:405 Method Not Allowed
Request Headersview source
Accept:*/*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8,it-IT;q=0.6,it;q=0.4,tr;q=0.2,de;q=0.2
Access-Control-Request-Headers:accept, authorization
Access-Control-Request-Method:GET
Cache-Control:no-cache
Connection:keep-alive
Host:192.168.1.1
Origin:http://192.168.1.1:9000
Pragma:no-cache
Referer:http://192.168.1.1:9000/
User-Agent:Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36
Response Headersview source
Allow:GET HEAD
Connection:close
Content-Length:0
Content-Type:text/html;charset=UTF-8
Date:Fri, 30 Jan 2015 11:36:43 GMT
Server:Apache/2.2.15 (CentOS)
Set-Cookie:PHPSESSID=a5dbcfa18fcb64a29dbad999c6811d69; path=/
Set-Cookie:a5dbcfa18fcb64a29dbad999c6811d69=DEFAULT%7C0%7C2M3TMlgUx3gTlaarYzHIdD28l8q9FTcNubt55%2BUGpAo%3D%7C7456bf61db3500c8bb7b3bc38082a470ce4a2ad3; path=/
X-Powered-By:PHP/5.6.4
Я также пробовал использовать grunt-connect-proxy
, но без лучших результатов...
Если я забыл какие-либо детали, пожалуйста, просто спросите...
Любая подсказка?