【发布时间】:2018-07-23 01:29:45
【问题描述】:
我有一个简单的index.html 文件。此 html 正在从 localhost:3000 加载
<body>
<h1>Some app</h1>
<script src="http://localhost:3005/script.js"></script>
</body>
script.js 设置为从另一个来源加载:localhost:3005。
据我了解,浏览器应该拦截请求并将 origin 标头 添加到其中 - 并向localhost:3005 服务器发出 preflight request 以检查 @987654331 @ 是允许的。
但我没有得到origin。浏览器似乎没有添加源头。
这是负责提供 script.js 文件 (localhost:3005) 的服务器。我正在使用cors module。
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")
})
我的实际目标是仅将localhost:3000 列入白名单,以请求我的script.js
我输入 localhost:3001 只是为了测试我是否真的遇到了 cors 错误 - 应该是这样。
但我什至不知道起源 - 是什么原因造成的? 我在 Firefox 和 Chrome 中都得到了相同的行为。我误解了这个孔的过程吗?谢谢:)
编辑:也许看到请求会有所帮助
【问题讨论】:
-
浏览器不会为获取
srcURL 的请求发送 Origin 请求标头。这些请求是在获取模式设置为“no-cors”的情况下发出的,并且不会为“no-cors”请求发送 Origin 请求标头。基本上,浏览器仅针对使用 XHR 或 Fetch API(或基于 XHR 或 Fetch API 构建的 JavaScript 库 Ajax 方法)发出的请求或请求 HTTP 方法不是 GET 或请求已启动时发送 Origin 标头来自具有“crossorigin”属性的 HTML 元素。 fetch.spec.whatwg.org有详情
标签: cors cross-domain same-origin-policy