web2py の Restfull Web サービスで Cross Origin Resource Sharing (CORS) の実装に問題があります。
ここで提案されているように、web2py のサーバー側に CORS を実装しようとしています: ( https://groups.google.com/forum/#!msg/web2py/kSUtyNcUQGI/qfiIqfUiWLwJ )
models/0.py に以下を追加しました (コントローラーで実際の restfull api ハンドラーの前に応答ヘッダーを更新するため)。
===============================
if request.env.http_origin:
response.headers['Access-Control-Allow-Origin'] = request.env.http_origin
response.headers['Access-Control-Allow-Origin'] = "*"
response.headers['Access-Control-Allow-Credentials'] = 'true'
response.headers['Access-Control-Max-Age'] = 86400
if request.env.request_method == 'OPTIONS':
if request.env.http_access_control_request_method:
print request.env.http_access_control_request_method
response.headers['Access-Control-Allow-Methods'] = request.env.http_access_control_request_method
if request.env.http_access_control_request_headers:
response.headers['Access-Control-Allow-Headers'] = request.env.http_access_control_request_headers
==========================
RESTful POST と GET は現在機能していますが、PUT と DELETE は機能していません。これは、プリフライトの http OPTIONS リクエストが web2py によって「400 BAD REQUEST」として拒否されたためです。
たとえば、ローカル Web ページから ajax 呼び出しを使用して安静な Web サービスを呼び出すと、NetBeans ログに次のエラーメッセージが表示されます。
リソースの読み込みに失敗しました: サーバーは 127.0.0.1:8000/test/default/api/entries/2.json で 400 (BAD REQUEST) (10:46:36:182 | エラー、ネットワーク) のステータスで応答しましたリソースの読み込み: Origin localhost:8383 は Access-Control-Allow-Origin で許可されていません。(10:46:36:183 | エラー、ネットワーク) 127.0.0.1:8000/test/default /api/entries/2.json XMLHttpRequest は 127.0.0.1:8000/test/default /api/entries/2 を読み込めません。 json. Origin localhost:8383 は Access-Control-Allow-Origin で許可されていません。(10:46:36:183 | エラー、javascript) www/page/test.html