标头、浏览器、CLI 和应用程序的内容类型默认值


Headers, Content-Types defaults for browsers, CLI, apps

每个浏览器默认都定义了"own",如果不是由标头自己的内容类型发送的。例如,Firefox 返回 text/html; charset=utf-8

如果我在空白页面上检查Firefox并重新加载一些PHP文件,它将返回text/html; charset=utf-8内容类型。

这是从火狐定义的?还是APACHE服务器?

我对默认的"内容类型"感到困惑,或者如果客户端未定义或发送 HTTP 标头内容类型,我可以在哪里找到所有默认内容类型标头的列表。

例如,在哪个应用程序上使用 RFC 822 请求标头,例如 text/plain; charset=us-ascii .


  1. 我能做的是首先从浏览器中获取可用的标头(例如:text/plain;text/html),然后在内容类型中设置text/plain是否存在。

  2. 如果没有发送的标头,我想知道默认情况下应该使用哪种内容类型浏览器/cli。所有用户代理的内容类型的所有默认列表可能吗?


真正的问题:默认情况下如何使用PHP从浏览器中获取Content-Type,但不接收NULL。在浏览器上,如果您refresh,您将看到Content-Type标题,但在PHP上您不会收到。

我的解决方案是这样的:

  1. 从浏览器中检查HTTP_ACCEPT是否存在,如果存在,例如:

    text/html
    

    返回内容类型:text/html

    如果不存在,请检查

    */*
    

    进行退货 内容类型:

     text/plain; us-ascii
    

    这是由RFC 822: http://mattryall.net/blog/2008/03/default-content-type

    然后,如果未定义,则使用 text/plain

  2. 如果不存在HTTP_ACCEPT则使用 RFC 822 声明为:

    text/plain; us-ascii
    

    这是 CLI 接受的,应该是 RFC 822 定义的 ASCII。

  3. 较旧的浏览器(如 SAFARI)检查 URL 中的扩展名,例如 .htm 然后应该以其他方式text/html返回text/plain。默认情况下,较新的浏览器是 text/html

  4. Firefox 2 返回 application/* if 未定义,因此在某些情况下您可以使用 USER_AGENT 进行检查,然后通过默认声明进行设置。这是旧浏览器,您应该避免这种情况。

  5. 我写了这个脚本并且工作正常。如果标头是由脚本强制的,并且如果是针,则应发送标头。

如果您有一些建议,或者如果我弄错了一些建议,请纠正我。