Согласно вашему комментарию под моим ответом здесь, я думаю, вы неправильно поняли концепцию CORS.Цитируется из MDN :
Распределение ресурсов между источниками (CORS) - это механизм, который использует дополнительные заголовки HTTP, чтобы сообщить браузерам , что веб-приложение должно работать.в одном источнике доступ к выбранным ресурсам из другого источника.
CORS используется для управления поведением Browser (или Browser-like client ,например, Electron
).
В этом сценарии браузер ничего не знал о сервере Webpack Dev, поэтому будет NO CORSвообще проблемы:
+-------+ +------+ +--------+
| | | | | |
| | | | | |
| +----------> | | |
| | Request | +---------------> |
| | | | | Kestrel|
|Browser| | IIS | Reverse Proxy | |
| |Response | | | |
| <----------+ <---------------+ |
| | | | | +-------------+
| | | | | For Spa Requests:| |
| | | | | -----------------> Webpack Dev |
| | | | | | Proxy | Server |
| | | | | <----------+ |
+-------+ -------+ +--------+ +-------------+
- Браузер общается только с IIS .А затем
IIS
передает запросы на ваш сервер ASP.NET Core Kestrel
(поскольку вы используете ASP.NET Core 2.1
, я предполагаю, что он работает в внепроцессном режиме ). - Имейте в виду, это ваш
Kestrel
сервер, который отправляет запросы на Webpack Dev Server .Ваш Kestrel
действует как прокси-сервер и перенаправляет связанные запросы на Webpack Dev Server, когда находится в среде разработки.
Как видите, браузер отправляет весь свой трафик на IIS
, а также получает все ответы от IIS
.Браузер знает только один сервер, т.е. IIS.
Кроме того, IIS не имеет представления о HMR.Когда разработчик обращается к этой странице SPA, между вашим браузером и IIS
устанавливается соединение WebSocket .IIS
просто пересылает его на Kestrel
.А затем Kestrel
пересылает его на ваш Webpack Dev Server
.Когда разработчик изменяет исходный код SPA, файл watcher
уведомит браузер о динамической перезагрузке.
[Редактировать] : Чтобы ответить на ваш вопрос ответа
Можно ли найти порт, на котором запущен Web Pack Dev Server?localhost: xxxx
Этот порт вычисляется динамически во время выполнения.ASP.NET Core не предоставляет API для разработчика, чтобы получить к нему доступ.Но как обход , чтобы узнать номер порта, вы можете найти его в вашей log информации.
Например, я использую VS Code для отладки приложения: