403错误的原因是 您没有发送标头 。由于正在发出CORS请求,因此除非服务器通过添加
Access-Control-Allow-Headers到响应中来启用这些标头,否则无法发送任何自定义标头。
在preflighted-request中,客户端向服务器发出2个请求。第一个是预检(使用OPTIONS方法),第二个是实际请求。服务器发送Access-
Control-Allow-Headers标头作为预检请求的响应。因此,它允许发送一些标头。通过这种方式,您的POST请求可以工作,因为POST请求是预检请求。但是对于GET请求,没有预检收集Access-
Control-Allow-Headers头,并且在这种情况下浏览器不会发送您的自定义头。
解决此问题的方法:
解决方法是,将
dataType和
contentType设置
json为以下值:
var serviceEndpoint = 'http://example.com/object/details?version=1.1';$.ajax({ type: 'GET', url: serviceEndpoint, dataType: 'json', contentType: 'json', headers: { 'api-key':'myKey' }, success: onSuccess, error: onFailure});
这样,您的get请求将为
preflighted request。如果您的服务器启用
api-key带有Access-Control-Allow-
Headers标头,则它将起作用。
以上请求的服务器配置示例(用express.js编写):
res.setHeader('Access-Control-Allow-Origin', '*');res.setHeader('Access-Control-Allow-Methods', '*');res.setHeader('Access-Control-Allow-Headers', 'api-key,content-type');res.setHeader('Access-Control-Allow-Credentials', true);
添加:
实际上,
contentType应该是
application/javascript或者
application/json在执行jsonp请求时。没有
contentType作为
jsonp。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)