RESTfulなWebサービスを作成しようとしていて、PUTリクエストの実装に固執しました。私はこのサイトの他の回答やMozillaのさまざまな記事に従いましたが、失敗しました。HTTPを返すCORSプリフライトリクエスト405
ドメインwwwtest.dev-box
からリクエストが生成され、test.dev-box
(基本的にはバックエンドアプリを呼び出すフロントエンドアプリ)になります。ここで私はライブHTTPヘッダからキャプチャしているヘッダは以下のとおりです。すべてがページの上部に次のコードを含む、web.phpにルーティングされるように、私はフレームワークを使用してい
http://test.dev-box/resource/v1/data/user/1
OPTIONS /resource/v1/data/user/1 HTTP/1.1
Host: test.dev-box
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Origin: http://wwwtest.dev-box
Access-Control-Request-Method: PUT
Connection: keep-alive
HTTP/1.1 405 Method Not Allowed
Date: Wed, 16 Oct 2013 16:15:58 GMT
Server: Apache/2.2.15 (Red Hat)
x-powered-by: PHP/5.3.27
Access-Control-Allow-Origin: http://wwwtest.dev-box
Access-Control-Allow-Methods: POST, GET, PUT, OPTIONS
Access-Control-Max-Age: 1728000
Content-Length: 0
Allow: PUT
Cache-Control: no-cache
Connection: close
Content-Type: text/html; charset=UTF-8
(this MDN articleから撮影) :
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
header('Access-Control-Allow-Origin: http://wwwtest.dev-box');
header('Access-Control-Allow-Methods: POST, GET, PUT, OPTIONS');
header('Access-Control-Max-Age: 1728000');
header("Content-Length: 0");
header("Content-Type: text/plain");
} else {
header("HTTP/1.1 403 Access Forbidden");
header("Content-Type: text/plain");
}
私のコードは、それは(あなたが上記のキャプチャから見ることができるように)CORSプリフライトオプションが最初の要求を送信PUT要求を行う前に。必要なヘッダーを応答に添付し、PUTが許可されていることをリクエスターに通知する必要があります。残念ながら、上記の応答ヘッダーからわかるように、PUTが応答のaccess-control-allow-methodsにあっても、405 Method Not Allowedを返しています。
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule^web.php [QSA,L]
</IfModule>
私が読んだ記事のいずれかでApacheのOPTIONS要求を完全に聞いたことがありません。これに関する情報、または私がそれをどのように設定するかという考えがありますか? –
拝見すると、CORSヘッダーがレスポンスに含まれているので、PHPコードが実行されているようです。あなたのPHPコードの何かが、おそらく405を返すでしょう。すべてのPHPコードを投稿する必要があります。 –
コードを投稿することはできませんが、SilexはSymfony2に基づくフレームワークです。私はアクセス制限やヘッダーの変更など何もしていません。ルートにPUTしようとして、データを取り戻そうとしています。 –