jQuery Ajax - POST 来自 Localhost 不生成 'Access-Control-Allow-Origin' header
jQuery Ajax - POST from Localhost Generates No 'Access-Control-Allow-Origin' header
我以为我了解CORS,但显然有些地方我不明白。我有一个应用程序,我正尝试从本地主机 运行。此应用需要 POST 向 Azure 搜索发出请求。我正在尝试上传搜索文档。为了做到这一点,我有以下内容:
var url = 'https://my-app.search.windows.net/indexes/test/docs/index?api-version=2015-02-28';
$.ajax({
url: url,
type: 'POST',
contentType:'application/json',
headers: {
'api-key':'XXXXXX',
'Content-Type':'application/json'
},
beforeSend: function (req) {
req.setRequestHeader('Access-Control-Allow-Origin', '*');
},
data: JSON.stringify({
'@search.action':'upload',
'id': '1',
'name': 'some name'
}),
success: function() { alert('success'); },
error: function() { alert('check the console window.'); }
});
当然,url
和 api-key
不是真实的。尽管如此,如果我使用 POSTman,我仍然可以成功 POST 此数据。然而,当我尝试通过 jQuery 从我的应用程序 POST 它时,我在控制台 window 中收到一条错误消息:
Failed to load resource: the server responded with a status of 403 (Forbidden)
Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:72' is therefore not allowed access. The response had HTTP status code 403.
我将 Azure 搜索服务的 "Allowed origin type" CORS 选项设置为 "All"。所以基本上,它是敞开的。但是,我仍然收到此 CORS 错误。
如何从本地主机上的 jQuery POST 向此服务发送数据?
Azure 搜索仅允许通过 CORS 执行查询操作,不允许管理或索引操作(有关 Azure 搜索对 CORS 的支持的详细信息,请参阅 MSDN)。
原因是基于浏览器的客户端需要访问 api 密钥,共享管理密钥(这是索引写入操作所必需的)本质上是不安全的。对于索引中的数据应该公开可用的情况,公开披露查询密钥是可以的,但您永远不应将管理员 API 密钥交给基于浏览器的客户端。
我以为我了解CORS,但显然有些地方我不明白。我有一个应用程序,我正尝试从本地主机 运行。此应用需要 POST 向 Azure 搜索发出请求。我正在尝试上传搜索文档。为了做到这一点,我有以下内容:
var url = 'https://my-app.search.windows.net/indexes/test/docs/index?api-version=2015-02-28';
$.ajax({
url: url,
type: 'POST',
contentType:'application/json',
headers: {
'api-key':'XXXXXX',
'Content-Type':'application/json'
},
beforeSend: function (req) {
req.setRequestHeader('Access-Control-Allow-Origin', '*');
},
data: JSON.stringify({
'@search.action':'upload',
'id': '1',
'name': 'some name'
}),
success: function() { alert('success'); },
error: function() { alert('check the console window.'); }
});
当然,url
和 api-key
不是真实的。尽管如此,如果我使用 POSTman,我仍然可以成功 POST 此数据。然而,当我尝试通过 jQuery 从我的应用程序 POST 它时,我在控制台 window 中收到一条错误消息:
Failed to load resource: the server responded with a status of 403 (Forbidden)
Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:72' is therefore not allowed access. The response had HTTP status code 403.
我将 Azure 搜索服务的 "Allowed origin type" CORS 选项设置为 "All"。所以基本上,它是敞开的。但是,我仍然收到此 CORS 错误。
如何从本地主机上的 jQuery POST 向此服务发送数据?
Azure 搜索仅允许通过 CORS 执行查询操作,不允许管理或索引操作(有关 Azure 搜索对 CORS 的支持的详细信息,请参阅 MSDN)。
原因是基于浏览器的客户端需要访问 api 密钥,共享管理密钥(这是索引写入操作所必需的)本质上是不安全的。对于索引中的数据应该公开可用的情况,公开披露查询密钥是可以的,但您永远不应将管理员 API 密钥交给基于浏览器的客户端。