跨源资源共享 (CORS)是一种允许浏览器请求访问来自与请求源不同的源的资源的机制。当从不同来源发出请求时,浏览器会向服务器发送预检 OPTIONS 请求,以检查服务器是否允许该请求。
在问题中描述的情况下,浏览器正在发送预检 OPTIONS向 HP ALM REST API 发出请求。但是,服务器未响应必要的 CORS 标头,导致错误“请求的资源上不存在‘Access-Control-Allow-Origin’标头。”
有几种方法可以解决这个问题:
使用 CORS代理:
CORS 代理将请求转发到目标服务器,并将必要的 CORS 标头添加到响应中。如果您无法控制目标服务器,这会很方便。
避免预检请求:
要避免预检请求,您可以确保该请求不需要授权或内容类型标头。这可以通过使用替代身份验证方法或将 JSON 数据编码为查询参数来实现。
解决通配符问题:
错误“Access-Control-Allow”当服务器为 Access-Control-Allow-Origin 标头指定通配符('*')而不是请求客户端的特定来源时,会发生“-Origin header must not be the wildcard”。要解决此问题,请配置服务器将 Access-Control-Allow-Origin 标头设置为请求源。
问题中的 JavaScript 代码有一些不正确的标头,正在触发预检请求:
headers.append('Access-Control-Allow-Origin', 'http://localhost:3000'); headers.append('Access-Control-Allow-Credentials', 'true');
删除这些标头,因为它们不应在请求中发送。
以上是为什么我在访问 REST API 时收到'No 'Access-Control-Allow-Origin' Header”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!