我们在 web2py 上的 restfull web 服务中的跨域资源共享 (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”
因此,例如,当从本地网页使用 ajax 调用调用 RESTful Web 服务时,我们在 NetBeans 日志中收到以下错误消息。
加载资源失败:服务器在 127.0.0.1:8000/test/default/api/entries/2.json 响应状态为 400 (BAD REQUEST) (10:46:36:182 | error, network) 失败加载资源:Access-Control-Allow-Origin 不允许 Origin localhost:8383。(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。Access-Control-Allow-Origin 不允许来源 localhost:8383。(10:46:36:183 | 错误,javascript)在 www/page/test.html