Почему запрос из постороннего источника заблокирован?

Ссылка скопирована
24 марта 2026 1 ответ

Всем привет, пожалуйста подскажите, в чем проблема? Консоль выдаёт такое -

Запрос из постороннего источника заблокирован: Политика одного источника запрещает чтение удаленного ресурса на https://example.com:8443/server. (Причина: не удалось выполнить запрос CORS). Код состояния: (null).

Вот запрос:

.... const sendData = async () => { const response = await fetch(               'https://example.com:8443/server',               {                 method: 'POST',                 body: new URLSearchParams(new FormData(payForm)),               }             ); const data = await response.text(); };

.... const sendData = async () => { const response = await fetch( 'https://example.com:8443/server', { method: 'POST', body: new URLSearchParams(new FormData(payForm)), } ); const data = await response.text(); };

Вот код сервера:

// Сервер  const https = require('node:https'); const fs = require('node:fs'); const app = require('express')(); const bodyParser = require('body-parser');  const host = 'example.com'; const port = 8443;  const options = {   cert: fs.readFileSync('/etc/letsencrypt/live/example.com/fullchain.pem'),   key: fs.readFileSync('/etc/letsencrypt/live/example.com/privkey.pem'), };  app.disable('x-powered-by'); app.use(bodyParser.urlencoded({ extended: false })); app.use(bodyParser.json()); app.use((req, res, next) => {   res.setHeader('Access-Control-Allow-Origin', '*');   res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE');   res.setHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');   next(); });  https.createServer(   options,   app, ).listen(port, host, () => {   console.log(`Привет от сервера! https://${host}:${port}`); });

// Сервер const https = require('node:https'); const fs = require('node:fs'); const app = require('express')(); const bodyParser = require('body-parser'); const host = 'example.com'; const port = 8443; const options = { cert: fs.readFileSync('/etc/letsencrypt/live/example.com/fullchain.pem'), key: fs.readFileSync('/etc/letsencrypt/live/example.com/privkey.pem'), }; app.disable('x-powered-by'); app.use(bodyParser.urlencoded({ extended: false })); app.use(bodyParser.json()); app.use((req, res, next) => { res.setHeader('Access-Control-Allow-Origin', '*'); res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE'); res.setHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept'); next(); }); https.createServer( options, app, ).listen(port, host, () => { console.log(`Привет от сервера! https://${host}:${port}`); });

Вот Nginx:

http { 	sendfile on; 	tcp_nopush on; 	types_hash_max_size 2048;  	include /etc/nginx/mime.types; 	default_type application/octet-stream;  	# SSL Settings 	include /etc/letsencrypt/options-ssl-nginx.conf;    # HTTP-заголовки 	add_header X-Frame-Options           "SAMEORIGIN" always; 	add_header X-XSS-Protection          "1; mode=block" always; 	add_header X-Content-Type-Options    "nosniff" always; 	add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;  	server {     listen 80;     listen [::]:80;     server_name example.com;     return 301 https://$server_name$request_uri; 	}  	server {     listen 443 ssl;     listen [::]:443 ssl http2;     server_name example.com;      ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;     ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;      location / {       root /var/www/example.com/;       index index.html;     }      location /server/ {       proxy_pass https://0.00.00.000:8443;     } 	}

http { sendfile on; tcp_nopush on; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; # SSL Settings include /etc/letsencrypt/options-ssl-nginx.conf; # HTTP-заголовки add_header X-Frame-Options "SAMEORIGIN" always; add_header X-XSS-Protection "1; mode=block" always; add_header X-Content-Type-Options "nosniff" always; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; server { listen 80; listen [::]:80; server_name example.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl; listen [::]:443 ssl http2; server_name example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; location / { root /var/www/example.com/; index index.html; } location /server/ { proxy_pass https://0.00.00.000:8443; } }

Дополнительно:

а зачем в node обрабатывать https если она за nginx находится?

Ну и proxy_pass немного странный:
proxy_pass https://0.00.00.000:8443;
0.0.0.0 - это wildcard IPv4

  • Дмитрий Беляев, 1) на nginx у меня хостинг всей статики, влючая файл node-сервера. А на самом node я получаю запросы с удалённого сервера для получения данных, просто тут кода нету этих запросов.

    2) нули это для примера просто :), ip другой конечно фактический

  • Убедитесь, что ваш сервер правильно отвечает на запросы OPTIONS. Добавьте OPTIONS в список Access-Control-Allow-Methods.
    CORS Preflight

    • Добавил, перезапустил сервер, не помогло(
    • whireless, Так смотрите в средствах разработчика в браузере какие запросы идут и какие ответы от сервера на них приходят.
    • Почему запрос из постороннего источника заблокирован?

      Ну я вот такое получаю в консоли браузера. Я понимаю что ошибка запроса, но что именно не так, не понятно

    • whireless, Это запрос POST? Запрос OPTIONS перед ним есть?
    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Кирилл JS Ответ

    Запрос из постороннего источника может быть заблокирован по разным причинам, и важно разобраться, что именно привело к этой ситуации. Вот несколько возможных причин и способы их решения:

    1. **CORS политика**: CORS (Cross-Origin Resource Sharing) - это механизм безопасности, который ограничивает, как документ или скрипт на одном источнике может взаимодействовать с ресурсами на другом источнике. Если ваш запрос идет с одного домена на другой, и сервер не разрешает такие запросы, он будет заблокирован. Для решения этой проблемы необходимо на сервере, к которому вы обращаетесь, настроить заголовки CORS так, чтобы разрешить запросы с вашего домена.

    2. **Блокировка браузером**: Некоторые браузеры, особенно в режиме безопасности, могут блокировать запросы из посторонних источников по умолчанию. В этом случае, вам нужно использовать прокси-сервер или другие способы обхода блокировки.

    3. **HTTPS**: Если ваш сайт работает на HTTPS, а запрос идет на HTTP, браузер может заблокировать запрос из соображений безопасности. В этом случае, убедитесь, что все запросы идут через HTTPS.

    4. **Специфические настройки сервера**: Иногда сервер может быть настроен таким образом, что блокирует запросы из определенных источников. Проверьте настройки сервера и убедитесь, что запросы разрешены.

    Для предоставления конкретного кода и инструкций по решению проблемы, укажите более подробную информацию о вашем окружении, используемых технологиях и коде, который вызывает блокировку запроса из постороннего источника.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно