问题描述
我是一名自学网络开发的学生。 我正在开发一个购物中心网站作为我的个人项目,当我尝试制作登录页面时遇到了一些基本问题。
首先,我会在开始时告诉您我的项目的主要概念,以便您更容易理解我的问题。
我最初的概念和想法如下:
-
数据库(MysqL)
我需要一些数据显示在网站上。所以我决定在 kaggle 上使用“时尚产品图像数据集”。注册的用户也将被存储。 我只是假设有我需要的一切,以便制作网站。 -
Web 应用服务器(API 服务器)
我以为这是一种桥梁,可以让浏览器上的javaScript在第一次加载页面或需要用户更改资源时获取一些资源,某种产品图片和价格代码。 -
Web 服务器(内置于 React)
我使用“create-react-app”制作了 React 应用程序,因此我实际上不需要考虑 Web 服务器。我所做的唯一一件事就是使用 React 库构建一些显示 UI 的组件。
FRONT-END BACK-END
---------- ----------------------------------------------------------------
| CLIENT | < --- > | REACT | < --- > | API-SERVER | < --- > | DATABASE |
| REACT | |(WEB-SERVER)|
当用户请求我的页面时,React(内置服务器)回复它。 然后,用户将获得 SPA(客户端)。
SPA 没有任何数据,它会从 API 服务器获取数据(因为获取代码是插入到 .js 文件中的)。 然后,api 服务器内部的查询将从数据库中获取数据。 然后,API 服务器将数据提供给 SPA。
一切都很顺利,直到我开始考虑安全性。如您所见,当我们访问其他网站时,他们使用 https 而不是 http。所以我想使用 https,因为保护个人数据免受坏人侵害非常重要。但是,当我考虑我的想法时,没有任何地方可以放置将 http 更改为 https 的代码。
另外,我明白 React 只是一个库,就像 reactjs.org 所说的那样。所以我想我之所以能够使用内置的网络服务器是因为应用程序是由'create-react-app'制作的。
最后,这里是主要问题。 据我所知,https 逻辑应该在 Web 服务器中。我的意思是处理客户端请求的服务器。
-
如果库的反应是真的,我是否必须构建一个网络服务器? (我认为通过 Node.js 或其他语言构建 Web 服务器是正确的方法,因为库只是一个库..!)
-
如果我不需要搭建网络服务器,我应该把逻辑放在哪里?
-
假设我已经完全准备好使用 https(我通过 Node.js 制作了一个 Web 服务器,并且我获得了使用 TLS 的 CA),然后,客户端和 Web 服务器能够安全地通信.但是,所有调用 API 的代码都写在 .js 文件中。 这些文件现在是客户端的浏览器。这意味着客户端和 API 服务器没有安全连接,因为 API 服务器和 Web 服务器具有不同的域或端口。
也许是问题3的总结:
3.1.当我在 google 上搜索时,我了解到 Web 应用程序服务器是处理 Web 服务器无法服务的请求。但是,在 SPA 中,请求来自客户端。对吗?
3.1.1.如果来自客户端的问题,如何证明客户端和 Web 应用程序服务器之间的通信是安全的?因为网络服务器和网络应用服务器有不同的域或端口!
解决方法
没有任何地方可以放置将 http 更改为 https 的代码。
在某处您有代码向 URL 发出 HTTP 请求以从 API 获取数据。该代码必须说明 URL 是什么。您可以在那里指定 URL 方案。
所以我认为我能够使用内置网络服务器的原因是因为该应用程序是由“create-react-app”制作的。
React 是一个 JS 库。它没有内置的 Web 服务器。 create-react-app
安装 React,生成一些默认项目文件,并且包含大量工具。
Web 服务器仅供开发使用。它包含对开发有用但对生产效率低下的功能,例如热重载。
它还具有一个 build script,用于输出静态文件以在您的生产网络服务器上进行部署。
您的生产服务器可以支持 HTTPS。它可能是也可能不是托管您的 API 的同一台服务器。