我正在尝试制作一个简单的跨源请求,并且Firefox始终使用此错误阻止它:
跨源请求已阻止:同源策略禁止在[url]读取远程资源.这可以通过将资源移动到同一域或启用CORS来解决.[URL]
它在Chrome和Safari中运行良好.
据我所知,我已经在我的PHP上设置了所有正确的标题以允许它工作.这是我的服务器响应的内容
HTTP/1.1 200 OK
Date: Mon, 23 Jun 2014 17:15:20 GMT
Server: Apache/2.2.22 (Debian)
X-Powered-By: PHP/5.4.4-14+deb7u8
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Headers: Content-Type
Access-Control-Request-Headers: X-Requested-With, accept, content-type
Vary: Accept-Encoding
Content-Length: 186
Content-Type: text/html
Run Code Online (Sandbox Code Playgroud)
我尝试过使用Angular,jQuery和一个基本的XMLHTTPRequest对象,如下所示:
var data = "id=1234"
var request = new XMLHttpRequest({mozSystem: true})
request.onload = onSuccess;
request.open('GET', 'https://myurl.com' + '?' + data, true)
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
request.send()
Run Code Online (Sandbox Code Playgroud)
...它适用于除Firefox之外的所有浏览器.有人能帮忙吗?
我们有一个html站点和一个为该网站提供服务的node.js服务器.网站和服务器使用socke.io交换数据.我们在文档中找到了这个:
origin 默认为*:*
允许连接到Socket.IO服务器的原点.
我们的html.site已启用http://questionexample.com/page1.只有这个站点可以连接到我们的服务器.(但每个人都可以连接到该网站.)我们如何设置起源?
我已经设置了一个带有套接字 io 转动的节点服务器,并尝试通过另一台服务器连接到它。但是,不同计算机上的某些浏览器会出现此错误并使其始终重新连接:
XMLHttpRequest 无法加载https://serverDomain.net:3000/socket.io/?EIO=3&transport=polling&t=Lo_SdiU。当请求的凭据模式为“包含”时,响应中“Access-Control-Allow-Origin”标头的值不得为通配符“*”。因此,不允许访问Origin ' https://www.differentServerDomain.fr '。XMLHttpRequest 发起的请求的凭证模式由 withCredentials 属性控制。
我的js配置:
var port = 3000;
var fs = require('fs');
var https = require('https');
var express = require('express');
var app = express();
var options = {
key: fs.readFileSync('/etc/letsencrypt/live/devpeter.net/privkey.pem'),
cert: fs.readFileSync('/etc/letsencrypt/live/devpeter.net/fullchain.pem')
};
var server = https.createServer(options, app);
var io = require('socket.io')(server);
io.origins('https://www.differentServerDomain.fr:* https://www.differentServerDomain.fr/wp-admin/index.php:*');
// start of server
server.listen(port, function(){
console.log('listening on *: '+ port + "\n");
});
Run Code Online (Sandbox Code Playgroud)
我正在使用 node 8.0 和 socket io 2.2,您的帮助将不胜感激。
编辑:这是客户端代码:
<script src="https://serverDomain.net:3000/socket.io/socket.io.js"></script>
<script>
var …Run Code Online (Sandbox Code Playgroud) 我最近开始学习node.js和socket.io.我遵循了一个socket.io的简单教程,在我的计算机上运行时一切正常.但是,我决定将客户端部件上传到服务器进行测试,这就是问题开始的地方.我想在Web主机上运行聊天客户端,并在我的计算机或其他主机上运行服务器.基本上,我计划在端口转发服务器,并让客户端在网页上运行.我打开我的端口向前移动它似乎正在工作,但我每次都在网页上收到错误.
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://24.151.51.34:3000/socket.io/?EIO=3&transport=polling&t=1437399007343-0. (Reason: CORS request failed).
Run Code Online (Sandbox Code Playgroud)
我一直在搞乱代码,希望在开始我自己的项目之前找到解决这个问题的方法,但是我无法找到方法.客户端代码是:
<!doctype html>
<html>
<head>
<title>Socket.IO chat</title>
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body { font: 13px Helvetica, Arial; }
form { background: #000; padding: 3px; position: fixed; bottom: 0; width: 100%; }
form input { border: 0; padding: 10px; width: 90%; margin-right: .5%; }
form button { width: 9%; background: rgb(130, 224, 255); border: none; padding: …Run Code Online (Sandbox Code Playgroud) 我的应用程序最近收到一个错误
“在‘ https://my-service-domain/socket.io/?EIO=3&transport=polling&t=M-eWtUQ ’从源‘ https://my-app-domain ’访问 XMLHttpRequest已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头。”
当我连接到 socket.io 时。我还没有找到解决这个问题的方法,我将在下面的图片中详细描述,有没有人遇到过这个错误。
服务器配置:
var express = require('express');
var app = express();
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
res.header("Access-Control-Allow-Headers", "Content-Type");
res.header("Access-Control-Allow-Methods", "PUT, GET, POST, DELETE, OPTIONS");
next();
});
var http = require('http');
var server = http.createServer(app);
var io = require('socket.io').listen(server, {log:false, origins:'*:*'});
Run Code Online (Sandbox Code Playgroud)
客户端配置:
var socket = io('https://my-service-domain', {transports: ['polling']});
socket.on(channel_id, function(data){
// some code
});
Run Code Online (Sandbox Code Playgroud)
我尝试切换 websocket 连接选项var socket = io('https://my-service-domain', {transports: ['websocket']}),但出现错误
“WebSocket 连接到 'wss://my-service-domain/socket.io/?EIO=3& transport …
我在Firefox中遇到以下错误
"跨源请求被阻止:同源策略不允许在http://localhost/socket.io/读取远程资源?EIO = 3&transport = polling&t = 1422586440181-21.这可以通过将资源移动到同一域来解决或启用CORS."
我检查了其他堆栈溢出问题,但还没有成功.另请注意,最新的socket.io不支持io.set,我的服务器配置尝试失败.
如何设置socket.io origin来限制与一个url的连接
我已经尝试将这些语句添加到我的服务器:
io.origins('http://localhost:3002')
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
Run Code Online (Sandbox Code Playgroud) 我在 apache 上使用 socket.io 运行 node.js。我让它在一个子域上运行(例如 - myapp.mydomain.com:8000),你可以看到我在不同的端口上运行它,以便我可以使用 myapp.mydomain.com 访问它。
在 chrome、Opera、IE 中一切正常,但 FF 失败并且出现跨域错误。
跨域请求被阻止:同源策略不允许在http://myapp.mydomain.com:8000/socket.io/?EIO=2&transport=polling&t=1429260923523-0读取远程资源。这可以通过将资源移动到同一域或启用 CORS 来解决。
有任何想法吗?
更新:
按要求添加了我的代码:
function handler(req, res) {
fs.readFile('../index.html', function(err, data) {
if (err) {
console.log(err);
res.writeHead(500);
return res.end('Error loading client.html');
}
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
res.writeHead(200);
res.end(data);
});
}
Run Code Online (Sandbox Code Playgroud) 我在 server.js 中有这个
//socket io config
const server = require('http').createServer(app)
const io = require('socket.io')(server)
io.on('connection', function (socket) {
socket.on('SOCKET_COMMENT_RECEIVED', ({ notification }) => {
io.emit(`SOCKET_COMMENT_RECEIVED`, notification)
})
//and many more
})
Run Code Online (Sandbox Code Playgroud)
在我的客户端(反应)
import io from 'socket.io-client'
const socket = io('localhost:3001') // working in localhost
Run Code Online (Sandbox Code Playgroud)
在我的产品中我做了这个检查
let socket = io('localhost:3001')
if(process.env.NODE_ENV === 'production') { socket =
io('https://api.example.com:3001')
}
Run Code Online (Sandbox Code Playgroud)
为什么会这样呢?我不认为这是 cors 问题,因为我已经这样做了
app.use(cors({
origin: true,
credentials: true
}))
Run Code Online (Sandbox Code Playgroud)
我的 package.json 依赖项
"socket.io": "^2.1.1",
"socket.io-client": "^2.1.1",
Run Code Online (Sandbox Code Playgroud) 我们使用 CORS 来允许所有来源
app.use(cors());
Run Code Online (Sandbox Code Playgroud)
服务器运行在4000端口,客户端运行在3000端口
这是我的server.js代码
const cors = require("cors");
const http = require("http");
const socketIO = require("socket.io");
app.use(cors());
const port = process.env.PORT || process.env.DEFAULT_PORT;
console.log("port: ", port);
app.listen(port, () => {
console.log(`App listening at ${port}...`);
});
const server = http.createServer(app);
const io = new socketIO(server, {
transports: ["websocket"],
});
Run Code Online (Sandbox Code Playgroud)
反应js代码
constructor(props) {
super(props);
try {
this.socket = io("http://localhost:4000", { transport: ["websocket"] });
this.socket.on("Chat-event", data => {
console.log("socketdata", data);
});
} catch (error) {
console.log("hiterror", error)
}
} …Run Code Online (Sandbox Code Playgroud)