- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在制作一个 VCL 表单应用程序,在主表单上使用 TIdHTTPServer 并在 IdHTTPServer 过程中使用 CommandGet:
procedure TForm6.IdHTTPServerCommandGet(AContext: TIdContext;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var
indexStream: TFileStream;
path, indexPath: string;
begin
AResponseInfo.CharSet := 'UTF-8';
path := GetCurrentDir.Remove(GetCurrentDir.Length - Length('Win32\Debug'));
ARequestInfo.Document := path + 'scripts/script1.js';
ARequestInfo.Document := path + 'scripts/script2.js';
if pos('profile', ARequestInfo.UnparsedParams) > 0 then
begin
indexPath := path + 'index.html';
AResponseInfo.ContentStream := TFileStream.Create(indexPath, fmOpenReadWrite);
end;
end;
编辑
procedure TForm6.IdHTTPServerCommandGet(AContext: TIdContext;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var
applicationDirectory: string;
begin
AResponseInfo.CharSet := 'UTF-8';
AResponseInfo.FreeContentStream := True;
applicationDirectory := ExtractFilePath(Application.ExeName)
.Remove(ExtractFilePath(Application.ExeName).Length -
Length('Win32\Debug') - 1);
AResponseInfo.ContentStream := TFileStream.Create(applicationDirectory +
'scripts/script1.js', fmOpenRead or fmShareDenyWrite);
AResponseInfo.ContentStream := TFileStream.Create(applicationDirectory +
'scripts/script2.js', fmOpenRead or fmShareDenyWrite);
if pos('profile&userName=', ARequestInfo.UnparsedParams) > 0 then
begin
AResponseInfo.ContentStream :=
TFileStream.Create(applicationDirectory + 'index.html', fmOpenRead);
end;
// other requests
end;
这里是index.html的内容:
<html>
<head>
<title>Profile</title>
<script type="text/javascript" src="[app-path]/scripts/script1.js "></script>
<script type="text/javascript" src="[app-path]/scripts/script2.js "></script>
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="pragma" content="no-cache">
</head>
<body>
<!-- Page content -->
</body>
</html>
当我启动应用程序并访问 http://localhost/?profile&userName=testUser
时它工作正常但是当我启动应用程序并在其他计算机的 chrome 浏览器中输入时 http://{my-ip4-address}/?profile&userName=testUser
我收到两条消息:'不允许加载本地资源:file:///{app_path}/scripts/script1.js','不允许加载本地资源:file:///{app_path}/scripts/script2.js。 HTML 页面的内容是可见的。
编辑
根据评论和回答index.html
改为
<html>
<head>
<title>Profile</title>
<script type="text/javascript" src="/scripts/script1.js "></script>
<script type="text/javascript" src="/scripts/script2.js "></script>
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="pragma" content="no-cache">
</head>
<body>
<!-- Page content -->
</body>
</html>
像这样编辑我的代码我可以访问文件,但问题是 script1.js 的内容与 script2.js 的内容相同。知道如何正确发送文件。
最佳答案
如果要将 HTML 文件提供给其他计算机,切勿使用应用程序路径([app-path]
在您的示例 HTML 代码中)。对于本地独立 HTML 页面,这可能有效,但外部客户端将无法访问该资源。
相反,指定 JavaScript 的路径(绝对路径为 /scripts/script1.js
或相对路径,如 scripts/script1.js
,具体取决于虚拟目录结构)并根据Request.Document属性解析为服务器上的文件。
您的示例代码从不读取 Request.Document 属性(甚至为其赋值 - 两次!)。所以服务器不知道客户端真正想要的资源。
您的代码必须将 Document 属性转换为相对于文档根文件夹的路径,例如,该文件夹可能是您的应用程序工作目录的专用子文件夹。然后检查此路径是否指向现有文件。如果它存在,读取它并返回它的内容。如果不存在,则返回错误码。
关于javascript - 德尔福 TIdHTTPServer : not allowed to load local resourse from remote device,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24755352/
我正在尝试将文件上传到 Indy(版本 10.5.5)TIdHTTPServer。 我一直在寻找解决方案,但到目前为止还没有成功,我发现的是旧版本的 Indy 与 Delphi 2010 附带的版本不
我正在尝试在 TIdHTTPServer 中获取请求的 Origin,但我看到我有权访问的只是 Host . 因为它是Delphi,我认为他们可能会设置请求的Host,所以如果我这样做: s := A
我正在使用 TIdHTTPServer 托管大量现有 HTML 文件。但是,我遇到一个问题,它返回更改后的 HTML。主要是,双引号 (“) 被替换为乱码,例如 –。直接从 Edge 中的文件系统查看
使用 TIdHTTPServer (Indy 10.6),我想为关闭缓慢或不活动的客户端(客户端是常见浏览器)设置连接超时,并在 60 秒不活动后关闭所有僵尸连接。我在 TIdContext.Conn
我在 Delphi XE2 中使用 TIdHTTPServer 作为基本的 HTML 服务器来获取来自 Web 的请求,处理它们并返回所需的响应。 问题是当有人打开像 localhost:5678/b
我正在使用 Delphi 10.3.1 和 Indy TIdHTTP/TIdHTTPServer 我创建了一个客户端/服务器应用程序来归档文件。客户端使用了一个TIdHTTP组件,代码是这样的: pr
我有一个可在多个端口上访问的 TIdHTTPServer(由于迁移),我需要找出当前数据(在 OnCommandGet 中)的来源。我可以从哪里检索正确的端口号? 最佳答案 它位于AContext.B
您好,我需要有关如何使用 indy 中的 IdHttpServer 检索参数和数据的帮助。 我的许多应用程序使用 TIdMultiPartFormDataStream 通过 php.ini 发送数据。
我正在使用 TIdHttpServer 来处理一些命令,问题是有些命令丢失了,我的猜测是,这是因为我正在 OnConnect 内更新 vcl。 如何使用 Synchronize 方法安全更新 VCL?
我正在使用 C++Builder 10.1 Berlin 编写一个简单的 WebSocket 服务器应用程序,它在端口上监听从网络浏览器(例如 Google Chrome)发送的一些命令。 在我的表单
希望有人能给我提供一个支持 SSL 的简单 TIdHttpServer 示例。使用Delphi2007和Indy10。我有以下内容来创建/设置服务器和 ioHandler: ServerIOHandl
我有一个带有 TTabControl、TWebBrowser 和 TIdHTTPServer 的 FireMonkey Android 应用。 我尝试使用以下代码将 HTTP 客户端重定向到 TIdH
我有一个服务项目,它通过 TIdHTTPServer 和一个 Web 前端提供一个 HTTP 服务器。用户可能启动的许多功能可能需要 5-10 秒才能完成,在此期间他们只能看到 gif 动画,而 aj
我使用 Indy 10 TidHttpServer 在 delphi xe2 上实现了一个网络服务,在局域网中运行良好。 我发现的问题出在一台有 2 个网卡的计算机上,一个是工作正常的常规 NIC,另
我们正在尝试使用 TIdHTTPServer 组件为我们的软件编写一个更新服务器。目前我们正在提供一个 XML 文件,其中列出了可用更新及其文件版本等。当客户端程序找到更新版本时,它应该开始使用 BI
我有一个使用 TIdHTTPServer 的 Indy HTTP 服务器零件。我希望像 Apache 和 IIS 一样使用 URL 重写模块重写浏览器 URL。 例如:如果有人去https://www
我有一个 TidHttpServer 正在监听端口 8844,代码如下: procedure TForm1.IdHTTPServer1CommandGet(AContext: TIdContext;
我在 delphi 中有一个带有 TIdHTTPServer 和 TIdHTTP 的应用程序,我有以下代码: // This is for activating the HTTPServer - wo
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 1年前关闭。 Imp
我有一个包含许多服务的类,这些服务基本上调用数据库连接(DBISAM 或通过 ZEOS)。 我正在使此类在 Web 服务中可用,例如使用 TidHTTPServer。我正在使用其中的 OnComman
我是一名优秀的程序员,十分优秀!