来自应用程序的REST请求有效,但不是来自javascript

时间:2013-06-07 12:28:43

标签: javascript rest cross-domain

我正在构建一个必须通过请求在远程Web服务上获取和设置数据的应用程序。当我使用jQuery GET请求它工作正常,我可以从服务请求数据没有任何问题,但当我使用PUT我得到一些错误:

  

选项http://myurl.com 501(不支持的方法   ( '选项'))

     

选项http://myurl.com Access-Control-Allow-Origin不允许使用原点null。

我已经尝试了几乎所有工作,但它不起作用。我下载了一个名为REST Console的chrome应用程序,可以进行自定义REST请求。奇怪的是,我可以通过该应用程序与我的服务器进行交互,但不能通过我的javascript进行交互!

这是javascript:

$.ajax({
    url: 'http://myurl.com',
    type: 'PUT',
    data: '<time>16:00</time>',
    success: function(data) { alert(data); }
});

有人能告诉我这里发生了什么吗?

1 个答案:

答案 0 :(得分:0)

首先确保您从Web服务器提供运行脚本的页面,而不是直接从文件系统提供。

我猜你在http://myurl.com的服务与您的网页所服务的主机名的主机名不同?要在这种情况下工作,您需要实现HTTP标头以支持Cross Origin Resource Sharing

http://myurl.com处的服务需要处理HTTP OPTIONS请求,其响应应该是一组HTTP标头(没有内容),如下所示:

Access-Control-Allow-Origin: http://url-of-page-with-javascript/

您也可以选择指定Access-Control-Allow-CredentialsAccess-Control-Allow-HeadersAccess-Control-Allow-Methods。请参阅full specification here

当您的服务器响应PUT请求时,您还需要添加具有相同值的相同标头 - 显然此内容也将包含在此响应中。