CORS:当凭据标志为 true 时,无法在 Access-Control-Allow-Origin 中使用通配符

编程代码

1个回答

写回答

queeniejoes

2025-06-29 19:50

+ 关注

服务器
服务器

跨域资源共享(CORS)是一种机制,用于解决浏览器中的跨域请求问题。在进行跨域请求时,浏览器会发送一个预检请求(OPTIONS请求)到服务器,以确定服务器是否允许当前域的请求。CORS允许服务器在响应中添加一系列的响应头来控制是否允许跨域请求,其中包括Access-Control-Allow-Origin。

Access-Control-Allow-Origin用于指定允许跨域请求的源。通常情况下,如果不设置该响应头,浏览器会拒绝接受跨域请求的响应。然而,在设置凭据标志为true时,即Access-Control-Allow-Credentials为true时,不允许在Access-Control-Allow-Origin中使用通配符。

使用通配符的目的是为了允许所有来源的请求。但在使用凭据时,浏览器会要求服务器明确指定允许跨域请求的源。这是为了保护用户的敏感信息,防止恶意网站获取用户的凭据。

案例代码:

假设我们有一个前端页面,需要从不同域名的服务器获取数据。前端代码如下:

html

<!DOCTYPE html>

<html>

<head>

<title>CORS示例</title>

<script src="JS">https://code.jquery.com/jquery-3.6.0.min.JS</a>"></script>

<script>

$(document).ready(function() {

$.Ajax({

url: "https://api.example.com/data",

type: "GET",

xhrFields: {

withCredentials: true

},

success: function(response) {

console.log(response);

},

error: function(xhr, status, error) {

console.log(error);

}

});

});

</script>

</head>

<body>

<h1>CORS示例</h1>

</body>

</html>

在上述代码中,我们使用了jQuery的Ajax方法发送GET请求到https://api.example.com/data获取数据。通过设置xhrFields的withCredentials为true,我们告诉浏览器在请求中包含凭据信息。

在服务器端,我们需要设置Access-Control-Allow-Origin来允许跨域请求的源。由于我们设置了凭据标志为true,不能使用通配符来设置Access-Control-Allow-Origin。

下面是一个使用Node.JS和Express框架的服务器端代码示例:

Javascript

const express = require("express");

const app = express();

app.use((req, res, next) => {

res.header("Access-Control-Allow-Origin", "https://example.com");

res.header("Access-Control-Allow-Credentials", "true");

next();

});

app.get("/data", (req, res) => {

// 处理数据请求

res.send("Data response");

});

app.listen(3000, () => {

console.log("Server started on port 3000");

});

在上述代码中,我们使用Express框架创建了一个简单的服务器。通过设置res.header来设置Access-Control-Allow-Origin和Access-Control-Allow-Credentials,允许https://example.com域名的请求,并允许携带凭据信息。

当浏览器发送请求时,服务器会根据设置的响应头来判断是否允许该跨域请求。如果响应头与请求中的设置匹配,则浏览器会接受响应并将数据返回给前端页面。

注意:由于涉及到跨域请求和凭据信息,需要确保服务器端和前端页面的安全性,以防止信息泄露和恶意攻击。

举报有用(4)分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号