AIo*_*Ion 7 cross-domain same-origin-policy cors
我有一个简单的index.html文件。这个 html 正在加载localhost:3000
<body>
<h1>Some app</h1>
<script src="http://localhost:3005/script.js"></script>
</body>
Run Code Online (Sandbox Code Playgroud)
该script.js设置从另一个初始装载:localhost:3005。
根据我的理解,浏览器应该拦截请求并向其添加原始标头-并向服务器发出预检请求localhost:3005以检查是否localhost:3000允许。
但我没有origin。浏览器似乎没有添加原始标题。这是负责提供script.js文件 ( localhost:3005)的服务器。我正在使用cors 模块。
const app = express()
const whitelist = ["http://localhost:3001"]
const corsOptions = {
origin: function(origin, callback) {
console.log("origin is: ", origin); //undefined -- why is undefined??
if (whitelist.indexOf(origin) !== -1) {
callback(null, true)
}
else {
callback(new Error('Not allowed by CORS'))
}
}
}
app.use(cors(corsOptions), express.static(__dirname))
app.listen(3005, () => {
console.log("server listening on port 3005")
})
Run Code Online (Sandbox Code Playgroud)
我的实际目标是加入白名单仅 localhost:3000用于要求我的script.js
我localhost:3001只是为了测试我是否真的收到了 cors 错误 - 应该是这样。
但我什至没有得到起源 - 这是什么原因造成的? 我在 Firefox 和 Chrome 中得到相同的行为。我误解了这个洞的过程吗?谢谢 :)
编辑:也许看到请求有帮助
我认为您可能误解了 CORS 的目的。它使服务器能够选择接受某些类型的请求,否则浏览器的同源策略将不允许这些请求。它不提供一种机制来禁止以前允许的请求。
src同源策略始终允许在标签中执行来自外国的脚本<script>,因此 CORS 根本不适用。这就是请求中没有标头的原因。
我的实际目标是仅
localhost:3000将请求我的script.js.
您不能为此使用 CORS。事实上,你可能根本无法做到这一点。我会退一步问你为什么要这样做。如果您试图保护私有数据,那么可能需要某种身份验证机制(令牌、cookie 等)。
| 归档时间: |
|
| 查看次数: |
5328 次 |
| 最近记录: |