【问题标题】:HTTP Content Type in Header标头中的 HTTP 内容类型
【发布时间】:2016-04-17 15:39:03
【问题描述】:

我有在 php 中生成 XML 文件的旧 Web 应用程序。此 XML 由 XMLHttpRequest 对象 (AJAX) 请求。一切正常。但是今天有一些服务器升级和网络应用程序有点崩溃。

问题在于代码中有与 XMLHttpRequests 相关的检查。 1)如果我有一个 response 比我根据它的内容类型正确解析它。

var contentType = xhr.getResponseHeader("Content-Type"); 
        //build the json object if the response has one
        if(contentType == "application/json") { 
            response = JSON.parse(xhr.responseText); 
        }
        //get the dom element if the response is XML
        else if(contentType == "text/xml") { 
            response = xhr.responseXML; 
        } else { //by default get the response as text
            response = xhr.responseText; 
        }

这是导致服​​务器现在返回的问题:

text/xml;charset=UTF-8

而不是

text/xml

好的,我可以更改这一行,错误就会消失。但我想知道为什么服务器升级(bluehost)会对此产生影响。

这是 PHP/MySQL 环境。

【问题讨论】:

    标签: php http http-headers xmlhttprequest


    【解决方案1】:

    两者都是有效的内容类型。内容类型可以由 Web 服务器软件(例如 Apache)或脚本(PHP)设置。由于您问题上的标签,我假设它是 PHP。

    如果您控制服务器上的脚本并希望指定内容类型,在 PHP 中添加以下行很容易:

    header('Content-Type: text/xml');
    

    这必须在脚本发送任何其他输出之前发生,因为标头出现在 http 响应中的内容之前。如果 PHP 脚本中没有设置标头,则 Web 服务器将选择一个。

    如果您不控制生成 XML 的脚本或服务器,那么您只需要接受系统升级很常见,这可能会影响您自己的应用程序。

    【讨论】:

      【解决方案2】:

      为了补充 Steve E 的答案,“charset=UTF-8”部分指定了一个字符集。

      没有更好的 unicode 解释(UTF-8 是 unicode 的一种实现)和字符集,然后是 Joel on Software,here(顺便说一下,Joel 还创建了 Stack Overflow)。简而言之,字符集定义了可以在文本中使用的字符集。 Unicode 是一种字符集,几乎支持所有国际语言。 UTF-8 指定如何以字节为单位实现 Unicode 字符集(因此对于 UTF-8,Unicode 字符占用 1 - 4 个字节)。当您看到乱码文本(例如 ?s 而不是字符)时,这通常是因为文档没有以正确的字符编码进行解释。

      在内容类型标头中包含编码实际上是最佳做法,因此我将其保留为“text/xml;charset=UTF-8”。 Bluehost 可能正在更新导致更改的默认设置(即/他们为 xml 文档显示的默认内容类型)。顺便说一句,术语字符集和编码有时可以互换使用,但是当您指定“charset=UTF-8”时,您更正确地指定了 encoding(UTF-8 是编码,Unicode是字符集)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-30
        • 2013-10-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-30
        • 1970-01-01
        • 2017-07-22
        相关资源
        最近更新 更多