#node.js #api #ssl #npm #module
#node.js #API #ssl #npm #модуль
Вопрос:
[ОБНОВИТЬ]
Я создал модуль NPM для своего nodejs SDK.
Мой SDK используется для облегчения доступа к серверу, который я разрабатываю. Кроме того, я разрабатываю интерфейс, который импортирует SDK и через него получает доступ к серверу.
Во время разработки:
Подведение итогов архитектуры при разработке на локальном:
http://localhost:3000/frontend (w/ imported npm sdk) --> http://localhost:5000/api
При разработке локального хоста я импортирую его, и все работает хорошо, SDK использует сервер локального хоста, который я разрабатываю. (В режиме разработки сам модуль подключен к npm).
Во время тестирования:
SDK имеет функцию, которая позволяет ему переключать инфраструктуру, чтобы ее можно было протестировать на предыдущей версии сервера, развернутого на производстве (или промежуточном этапе).
Подведение итогов тестирования на рабочем сервере после sdk.switchToInfrastructure():
http://localhost:3000/frontend (w/ imported npm sdk) --> https://server.com/api
Когда я переключаюсь на что-то вроде производственного сервера наhttps://server.com , все запросы, отправленные из SDK, блокируются браузером:
GET https://server.com/api net::ERR_SSL_PROTOCOL_ERROR
Я считаю, что проблема в том, что интерфейс все еще находится на HTTP.
Что сделать, чтобы предотвратить это? Или любые советы, которые помогут в процессе тестирования своего модуля NPM в нескольких развернутых инфраструктурах.
[ОБНОВЛЕНИЕ 2]
Дополнительная информация: когда я не импортирую свой SDK через npm (я просто импортирую sdk из локального файла), проблем вообще нет, я могу отправить запрос с локального хоста.
Комментарии:
1. Похоже, у вас нет ssl-сертификата на сервере, и ваш код пытается получить к нему доступ через https.
2. Увы, нет, на сервере установлен SSL-сертификат, связанный с доменным именем. Но, конечно, localhost (который содержит интерфейс) — это только HTTP. Для меня это источник проблемы. Я думаю, что мой вопрос недостаточно ясен, и я собираюсь улучшить его.
Ответ №1:
Браузер блокирует запросы из разных источников, если ваш сервер не поддерживает CORS.
Это означает, что если ваш клиент (который работает на localhost
) попытается получить конечную точку production.server.com
, он будет заблокирован по умолчанию.
Прочитайте статью о CORS и о том, как его включить.
Комментарии:
1. На самом деле, мой сервер включает cors для локального хоста: 3000. Насколько я понимаю, не видя следов на сервере, я думаю, что браузер блокирует запрос, поэтому hat tit фактически не выдается.
2. Кстати, одна дополнительная информация, которую я не смог сообщить, заключается в том, что если я не импортирую свой SDK через npm, а только импортирую его из локального файла, проблемы вообще нет, я могу отправить запрос с локального хоста. Я обновляю вопрос с этой информацией).