【发布时间】:2023-03-08 09:13:01
【问题描述】:
我是这个论坛的新手。这是我的第一个问题。
我有一个 nginx-server + fcgiwrapper 设置来根据用户请求运行程序(没有 PHP)。
为了测试,我有一个简单的 bash 脚本,它显示环境变量并设置两个 cookie,第二个 bash 脚本将“Hello World”打印为 text/plain,另一个 bash 脚本将“Hello World”打印为 text/html .
另一个用 C 编写的程序应该从标准输入读取文本,解析它并根据输入到标准输出打印文本,在请求的 web 浏览器中应该显示为 text/plain。 (请求浏览器需要使用 POST)。
但有时它会将返回的文本显示为“text/plain”(它应该这样做),但有时浏览器想要下载返回的文本,就好像它是“application/octet-stream”一样。
但是,如果我在准备好的环境中测试 C 程序
Environment Variables:
CONTENT_LENGTH=30
REQUEST_METHOD=POST
HTTP_COOKIE=NAME=TEST; ID=200
它每次都有效,没有显示错误,并且在开始时会打印:
Content-type: text/plain (plus two newlines)
我发现,根据内容长度,它有时有效,有时无效。 (这只发生在程序通过网络浏览器启动时。) 在 Firefox 中,使用开发工具,我可以看到答案 Content-type 是
application/octet-stream
如果我保存它,它原来是一个文本文件,其中包含应该直接显示在浏览器中的文本。 我做错了什么?
编辑:我已经搜索过类似的问题但没有成功 +所有其他事情都完美无缺 + 这也发生在不同的浏览器上(顿悟、lynx、Windows 上的 Internet Explorer)
【问题讨论】:
-
如果我将 C 程序更改为输出
Content-type: text/html它可以工作。但我想要Content-type: text/plain! -
在位置块集“default_type text/plain;”内
-
感谢您的回复。如果我按照您的建议进行操作(在 nginx.conf 中设置
default_type text/plain),错误仍然存在。但是,如果我查看下载的文档,会有不应该存在的控制字符:^Q or (iso) DC1。这可能是问题吗?从 nginx.conf 中提取:include /etc/nginx/mime.types; #default_type application/octet-stream; default_type text/plain;或者我需要在 mime.types 中添加text/plain吗? -
在 /conf 中有一个 mime.types 文件你可以玩,但是当你下载一些二进制文本/纯文本会向你显示垃圾时,你不能混合和匹配,它的一个或另一个.如果您正在构建后端,那么您需要在交付内容之前在后端设置正确的类型。
-
好的。我已经做到了。但是,我的更改似乎没有效果。似乎 nginx 或 fcgiwrapper(我对这些还是很陌生)有时只是忽略 C 程序打印的行
Content-type: text/plain。
标签: http nginx content-type fastcgi plaintext