为什么本地测试服务器打开“保存文件”对话框?

问题描述 投票:0回答:2

我一直在尝试在Windows 10中本地开发网页,并在本地浏览器(chrome,vivaldi)中运行。现在,我有3种在本地运行简单服务器的方法:php的内置服务器,python的http.server模块和vscode的LiveServer。当我运行php服务器时,正如人们所期望的,我可以正确执行php代码。但是使用其他两个调用php url时,出现“保存文件”对话框!那是哪里来的而不是简单的“未找到”对话框。因此,我有两个问题:(1)为什么会出现“保存文件”对话框? (2)是否可以使用LiveServer或python的http.server模块处理php文件(我不希望它能够支持php)

php visual-studio-code server python-server-pages
2个回答
1
投票

如果显示了保存对话框,这是因为服务器无法解释php代码。您必须检查这些服务器配置,以检查它们与PHP的集成(如果它们可以做到)。


0
投票

好问题。埃里克(Erick)回答了第一个。我将对此进行详细说明,然后回答第二个。

为什么会出现保存文件对话框?

在较高级别上,Web服务器正在提供文件。将HTML / CSS / JS文件提供给浏览器时,生活很轻松。您的浏览器了解HTML / CSS / JS并知道如何为用户呈现它。如果您的浏览器被发送了未经处理的PHP文件(假设存在该文件),则浏览器将不知道如何处理<?php .. ?>标签等。因此,浏览器为用户提供了下载文件的方法。与zip文件相同。如果您转到http://someurl.com/abc.zip,则如果网络服务器在someurl.com的根目录下找到该文件,它将发送给浏览器,浏览器将为用户提供下载文件。不仅限于此。

因此,Web服务器如何处理PHP文件?它取决于Web服务器,但共同的事情是它们在处理PHP文件时需要帮助。 Web服务器配置为将请求发送到php.exe或其他系统(例如PHP-FPM),该系统处理文件并返回Web服务器以将其发送给用户。文件处理将echo "<div>$variable</div>";转换为纯HTML <div>I am awesome</div>。此处理系统(php.exe或PHP-FPM)与Web服务器一起标记标签,以向浏览器提供它可以呈现的内容。

是否可以交叉渲染语言?

是的,您可以采用多种方式。常见的方法之一是为选择的语言找到最佳的处理系统。例如,可以将PHP-FPM作为服务运行来处理PHP。因此,http://someurl.com/test/index.php可以通过PHP-FPM运行。 Python可能使用WSGI,您可以选择gunicorn处理Python文件。在这种情况下,您的网络服务器可能会被要求直接将与python相关的目录/子域发送到gunicorn(本质上是代理)。

反向代理

假设您有多个需要多种语言的站点。

py.someurl.com可以在端口8000上使用gunicorn Web服务器(或其他对wsgi友好的服务器)在服务器上运行。节点可以在端口9000上使用Express Web服务器进行服务。

您可以运行NGINX服务器,该服务器通过向PHP-FPM服务发送请求来提供纯HTML以及ph.someurl.com。还可以将其配置为将所有请求发送到js.someurl.com,然后将其交给http://localhost:9000,Node将在其中处理请求并将输出发送回NGINX,NGINX可以将请求发送到浏览器。同样,可以将对py.someurl.com的请求发送到localhost:8000,在那里gunicorn处理该请求并将该请求发送回NGINX,后者将请求转发到浏览器。

从用户的角度来看,他们所知道的只是NGINX服务器。 NGINX知道背景中的所有其他内容。在这种情况下,NGINX充当Web服务器和代理。

© www.soinside.com 2019 - 2024. All rights reserved.