Я медленно схожу с ума из-за очень глупой проблемы.
У меня есть приложение socket.io/express, загруженное в Digital Ocean в качестве Docker установки.
Чтобы разрешить https, я использую caddy как часть моей настройки Docker, чтобы разрешить автоматическое c https.
Я пытался подключиться к этой настройке через мой домен и из мое локальное приложение React, которое живет на localhost: 3000. Но я постоянно получаю следующую ошибку:
Доступ к XMLHttpRequest по адресу https://mediaserver.domain.dev/socket.io/?EIO=3&transport=polling&t=N5BXNK2 из источника http://localhost: 3000 'был заблокировано политикой CORS: значение заголовка «Access-Control-Allow-Origin» в ответе не должно быть подстановочным знаком «*», если режим учетных данных запроса «включить». Режим учетных данных запросов, инициируемых XMLHttpRequest, контролируется атрибутом withCredentials.
Я знаю, что раньше было так много вопросов SO, и, поверьте мне, когда я говорю, что попробовал почти все из них .
- Я попытался изменить параметры промежуточного программного обеспечения cors
- Я попытался добавить свое собственное промежуточное программное обеспечение и задать заголовки специально
- Я попытался использовать localhost: 3000 в качестве источника
- ...
Но, похоже, ничего не работает. В настоящее время я понятия не имею, что еще можно сделать, чтобы это исправить.
Так что любая помощь будет приветствоваться.
Мой docker -компонентный файл выглядит следующим образом:
version: '3.6'
services:
media-server:
build:
dockerfile: Dockerfile
context: ./
ports:
- "8080:5000"
expose:
- "5000"
caddy:
image: abiosoft/caddy:0.11.0
depends_on:
- "media-server"
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- /root/Caddyfile:/etc/Caddyfile
- /root/.caddy:/root/.caddy
Мой Caddyfile выглядит следующим образом:
https://mediaserver.domain.dev {
proxy / http://media-server:8080 {
websocket
transparent
}
cors
}
И настройка моего сервера выглядит следующим образом:
import cors from 'cors';
import express from 'express';
import socket from 'socket.io';
import { intialiseWebSocketConnection } from './socketio';
const app = express();
app.use(cors());
const server = app.listen(5000, function () {
console.log('Server is connectedd on *:5000');
});
const io = socket.listen(server);
intialiseWebSocketConnection(io);