包含 CSS 的文件和未在服务器上提供的 JS 文件并打印 ��U��v��8��+

File with CSS and JS files not serving on server and prints ��U�v�8��+

当我 运行 我的 hapijs 应用程序在本地工作时它可以工作,但是当我将它部署在服务器中时它不工作。该页面可以提供 html 文件,但如果 HTML 文件有 css 或 bootsrap 那么它会打印奇怪 像 ��U��v��8��+

这样的符号

显示奇怪响应的 link:https://us-central1-fir-app-85853.cloudfunctions.net/v1/teacher/list

这是我的 index.js 文件。

我该如何解决这个问题?

'use strict';
const functions = require('firebase-functions');
const api = require('./server');

exports.v1 = functions.https.onRequest(async (event, resp) => {
  let server = await api.startServer();
  const options = {
    method: event.httpMethod,
    headers: event.headers,
    url: event.path,
    payload: event.body
  };

  return server
    .inject(options)
    .then(response => {
        delete response.headers['content-encoding']
        delete response.headers['transfer-encoding']
        response.headers['x-powered-by'] = 'hapijs'
        resp.set(response.headers);
        return resp.status(response.statusCode).send(response.result);
    })
    .catch(error => resp.status(500).send(error.message || "unknown error"));
});

这是我在 github https://github.com/kartikgreen/hapijs-firebase

上的完整源代码

这很可能是字符编码问题。

有几个原因,一个是输出的字符编码与 UTF-8 不同。

假设您的文档输出为 ISO-8859-1(称为 Latin-1),如果您不设置字符集,浏览器将默认为 UTF-8。把它想象成输出中文然后要求语言解析器将其视为日语,它永远不会理解!

不确定如何在 hapjs 中执行此操作,但在 PHP 中您只需添加一个 header,如下所示:-

header("Content-Type: text/html; charset=ISO-8859-1");

另一个可能的原因是 Byte Order Mark (BOM)

如果您的脚本在它应该之前不小心输出了一些空白数据,这可以添加这些不可见的字符。

Stack Overflow 上有很多关于 BOM 的答案,所以我不会重复这些。

我通常会说 运行 通过 W3C Internationalisation Checker 的页面,但您的页面似乎将其杀死(这可能归结为 firebase)。也许您可以将原始输出捕获到一个文件中,然后 运行 通过这种方式?

我刚刚删除了请求 headers' object 中的 'accept-encoding': 'gzip, deflate, br' 行以不请求 gzip 压缩。

此答案已在 link