gpt4 book ai didi

cors - Microsoft Edge 和 EventSource 的无效 CORS

转载 作者:行者123 更新时间:2023-12-05 06:30:44 24 4
gpt4 key购买 nike

我刚刚建立了一个全新的项目,我想使用 EventSource。我希望它与包括 Edge 在内的主要浏览器兼容。 Edge 不支持 EventSource,我不得不安装 polyfill .

我的客户端是一个运行在地址 http://localhost:8080/ 的 vue cli 应用程序.我在 main.js 文件中添加了以下代码:

// Client - main.js

import '@babel/polyfill'
import Vue from 'vue'
import './plugins/vuetify'
import App from './App.vue'
import router from './router'
import store from './store'
import './registerServiceWorker'

//Not sure if this one is necessary, so far I got the same result with and without it.
require('../node_modules/eventsource/lib/eventsource.js');

//polyfill for Edge
require('../node_modules/eventsource/lib/eventsource-polyfill.js');


Vue.config.productionTip = false

new Vue({
router,
store,
render: h => h(App)
}).$mount('#app')

var source = new EventSource(
'http://localhost:3000/',
{withCredentials: true}
);

source.onmessage = function(e) {
var jsonData = JSON.parse(e.data);
console.warn("My message: " + jsonData.msg);
};

然后,以下代码在我位于 http://localhost:3000/ 的 Node.js 服务器上运行:

//Server

var express = require("express"),
app = express(),
bodyParser = require('body-parser');

app.use(express.static(__dirname + '/'));
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

app.get('*', function(req, res){
res.writeHead(200, {
'Connection': 'keep-alive',
'Content-Type': 'text/event-stream',
'Cache-Control': 'no-cache',
"Access-Control-Allow-Origin": "http://localhost:8080",
"Access-Control-Expose-Headers": "*",
"Access-Control-Allow-Credentials": true
});

setInterval(function(){

const date = new Date();
const data = date.getTime()

console.log('writing ' + data);
res.write('data: ' + JSON.stringify({ msg : data }) + '\n\n');
}, 1000);
});

var port = 3000;
app.listen(port, function() {
console.log("Listening at Port " + port);
});

我已经添加了一些 CORS header ,否则 EventSource 将无法在 chrome 上运行。上面的代码在 Chrome、Firefox 和 Opera 上运行良好(我每秒都会收到一条消息)。但是 Edge 给我以下错误:

SEC7120: [CORS] The origin 'http://localhost:8080' did not find 'http://localhost:8080' in the Access-Control-Allow-Origin response header for cross-origin  resource at 'http://localhost:3000/'

我不明白为什么它不起作用。 polyfill 会不会有问题?我没有正确导入它吗?

非常感谢!

最佳答案

我建议您使用 event-source-polyfill 代替。请像下面的代码一样将 polyfill 的事件源包含到您的页面中(删除以前的事件源和事件源-polyfill js 文件):

require('../node_modules/event-source-polyfill/src/eventsource.js')

它在 IE 11 和我这边的 Edge 中都有效。

关于cors - Microsoft Edge 和 EventSource 的无效 CORS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52128634/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com