问题标签 [nph]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
196 浏览

perl - PERL 中文件名包含“-”的问题

我创建了一个名为“nph-select.pl”的文件,并将代码用于重定向,如下所示。

并执行文件然后它给我 302 STATUS 消息说“文档已移至此处”。但是当我通过删除“-”来重命名同一个文件时,即新文件名是“nphselect.pl”,那么它也可以通过重定向正常运行。有人可以建议我缺少什么设置吗?

我的请求标头是 Host localhost:8080 User-Agent Mozilla/5.0 (Windows NT 5.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 Accept text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8 Accept-Language en-us,en;q=0.5 Accept-Encoding gzip, deflate Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive 115 Connection keep-alive

并且 RESPONSE HEADERS 是空白的。

0 投票
0 回答
436 浏览

http - 在 IIS 7.0 上的 CGI 可执行 EXE 中使用 NPH 模式 - 这可以是“实时的”吗?

我正在编写一个原型 CGI 应用程序以在 IIS 7.0 服务器上运行,这最终将导致该应用程序发送许多 http 分块响应,这些响应是为响应可能需要一些时间来生成实际数据的查询而生成的。

在深入研究这方面(即生成真实数据)之前,我想测试我的 cgi 应用程序是否实际上在非解析头模式下运行(即 cgi 应用程序本身生成所有头文件,而 IIS 只是将所有输出返回到请求 http 浏览器/代理。

所以我写了一个简单的应用程序,它返回以下内容(注意时间戳 - 每个带时间戳的行之间有 1 秒的暂停,正如文本所暗示的那样,这需要 10 多秒才能执行 - 你实际上可以在命令行并观察这个时间。

当我在服务器上安装 exe 并在 Internet Explorer 中打开它时,会显示预期的文本(时间不同,因为我在一天中的不同时间和不同时区运行它们):

但是 - 在整个 10 秒过去之前,什么都不会显示。(注意 - 铬的结果相同)

为了确保这一点,我在文本编辑器中制作了一个 http 请求,并将其粘贴到服务器的 80 端口上的 telnet 中,并在整个响应之前观察到 10 秒的间隙,如上所示。

我得到相同的结果,无论 exe 是否具有前缀“nph-” - 我在 telnet 中执行了相同的测试,使用“nph-hello.exe”、“nphhello.exe”和“hello.exe”,使用以下内容:

(注:识别地址已针对本帖进行了调整)

(有关 exe 命名前缀的相关性,请阅读http://support.microsoft.com/default.aspx?scid=kb;EN-US;q176113下的“解决方案”下的注释,以“作为解决方法...”开头)

我似乎没有在 telnet 中观察到与 exe 名称前缀相关的任何可辨别的输出差异,这使我相信此信息要么已过时,要么需要启用其他东西才能打开此功能,这显然需要发生在 cgi 应用程序启动之前 - 这解释了为什么使用前缀而不是应用程序本身所做的事情 - 即 IIS 需要知道是否等待响应)

虽然从表面上看,它正在实现预期的结果 - 数据找到了请求 http 代理的方式 - 我希望它实时发生,因此可以在发出请求时显示进度更新。

所以我的问题:

1)是否需要进行一些设置才能打开 NPH(或者前缀是否正确?)

2)cgi 应用程序是否可以进行一些测试来判断它是否真的处于 NPH 模式?

3) 是否打算将标准输出(即响应数据)实时传送到请求代理,或者 IIS 是否必须首先以某种方式缓冲和解析它?

0 投票
1 回答
627 浏览

linux - 使用 libssl 和 sendmsg() SCM_RIGHTS 实现 SSL 服务器

我现在想知道我们是否可以在 Linux 环境下基于以下策略/方案制作某种 SSL 服务器。

(1)对于初始请求,应该是在父服务器进程中传入的。在建立 SSL 连接并处理请求的初始解析后,请求(套接字)将被转发到请求处理进程以进行进一步处理。

(2) 请求处理过程将是应该预先运行的东西。从这个意义上说,我们不会在这里使用任何基于 fork-exec-pipe 的方案。

(3) 对于父服务器进程和请求处理进程之间的通信,已经建立了一些IPC,以便使用sendmsg() - SCM_RIGHTS技术将打开的套接字描述符从父服务器进程复制到请求处理进程。

(4) 在 SSL 功能方面,我们应该使用 OpenSSL (libssl)。

(5) 在请求处理过程中,我们应该利用父服务器进程的共享套接字描述符来创建新的 SSL 套接字。

关键是我不想浪费在服务器和请求处理过程之间传输数据的任何性能。我也不想根据请求生成请求处理过程。所以我想提前生成请求处理过程。

虽然我不确定我在这里所做的是否对你有意义,但如果你们中的任何人能给我一些关于上述方法是否可行的提示,我将不胜感激。

0 投票
1 回答
763 浏览

perl - 我正在尝试使用 perl 脚本在 HTTP 响应中将 HTML 部分作为块发送,但出现编译错误

以下是我用来将 HTML 页面作为分块响应发送的脚本的一部分。但是,在运行脚本时会引发编译错误,例如:

在 nph-99_1_1_18.pl 第 19 行,靠近“print”233“(可能是从第 18 行开始的失控的多行“”字符串)处找到操作员预期的数字

0 投票
1 回答
80 浏览

google-chrome - 如何告诉现代浏览器在到达时显示行

在 Web 浏览器和服务器的早期,可以创建将数据发送到浏览器的脚本,并且浏览器会在数据到达时显示它。

例如传统的 NPH 测试脚本:

回到旧的 Netscape 时代,浏览器会在 1、2、3、4、5 到达时显示它们之间的时间为 2 秒。

在现代浏览器(例如 Chrome)中,在脚本终止并且一次性显示所有 5 行之前,您什么都看不到。

telnet通过连接服务器并运行手动GET命令,我可以看到脚本按预期工作;每 2 秒接收一次输出。

无论如何告诉现代浏览器(可能通过标题?)以旧方式行事并在行到达时显示?