我想知道PHP标头是什么.我严格使用PHP来完成HTML,我认为我必须在输出文本时发送text/html标题,然后从单独的脚本中发送image/jpeg标题,该脚本在图像标记中用作源,但有人建议我带走标题因为它们什么也没做.
我做了,一切都和以前一样.这让我很奇怪:什么是标题?他们什么时候用?(既可以从HTML角度看,也可以从某些(?)其他角度看)我为什么要删除我的?
是否有DEFAULT标题?如果我只是将一些PHP发送到浏览器而不指定标题..它将适用于哪个标题?
有许多不同的HTTP标头意味着不同的东西.如果您没有自己设置,PHP将为您提供重要的默认值.
我认为你专门讨论的标题是Content-Type
.这告诉浏览器您发送的是哪种文件.如果你说text/html
,它将尝试显示你作为网页提供的内容.如果你说application/pdf
,它会尝试显示或下载为PDF文件.
PHP默认发送Content-Type: text/html
.如果这就是你想要的,你根本不需要打电话header('Content-Type: ...');
.但是,如果您使用任何非ASCII Unicode字符,您可能希望设置Content-Type
为text/html;charset=something
,something
您为其使用的编码(通常,utf-8
).否则浏览器将不得不猜测,可能会出错.常见的标签是做同样事情的另一种方式; 如果你想要真正安全,你可以同时使用它们.
如果您提供JPEG图像text/html
,如果您通过删除header()
调用来关注"某人"的可疑建议将会发生这种情况,那么在浏览器中转到图像的URL会尝试将二进制图像显示为HTML,这将在屏幕上给你一大堆旧垃圾.真的,这不是很好.
但是在许多浏览器中,当您将标记指向它时,这种破损的JPEG通常仍然有效.这是因为当您使用a时
,浏览器知道它将获取图像,并在您说它实际上是HTML时忽略您.然后它必须"嗅探"文件的内容以查看它是否看起来像JPEG,GIF,PNG或它知道的其他类型的图像,因此它知道如何显示它.浏览器已经这样做了,因为有很多写得不好的网站忘记发送标题.嘘!
因此,header('Content-Type: image/jpeg')
当您编写JPEG或任何其他非HTML类型时,请务必发送.对于HTML页面,您通常可以在没有它的情况下离开.
标头不是特定于浏览器的,它是HTTP协议的一部分.
对页面(或任何其他资源,如图像)的请求将使客户端(例如,因特网浏览器)发送请求标头.例如,这可能包含语言标题(Accept-Language).
HTTP请求的第一行是格式METHOD RESOURCE HTTP/VERSION
.示例:GET /resource HTTP/1.0
.
HTTP/1.1需要Host-header.HTTP/1.1请求示例:
GET / HTTP/1.1 Host: example.com
服务器至少响应一个状态代码:HTTP/1.1 200 OK
大多数服务器将发送额外的标头.常见的标题是:Content-Type
,Date
,Server
和Content-Length
.
这是一个示例请求(原始数据):
$ nc example.com 80 GET / HTTP/1.0 HTTP/1.1 200 OK Date: Sat, 11 Sep 2010 19:12:13 GMT Server: Apache Last-Modified: Fri, 30 Jul 2010 15:30:18 GMT ETag: "573c1-254-48c9c87349680" Accept-Ranges: bytes Content-Length: 596 Connection: close Content-Type: text/html; charset=UTF-8Example Web Page You have reached this web page by typing "example.com", "example.net","example.org" or "example.edu" into your web browser.
These domain names are reserved for use in documentation and are not available for registration. See RFC 2606, Section 3.
由客户端(Internet浏览器)决定是否解析标头.所有现代Internet浏览器都会解析Content-Type
标头,并使用它来确定如何显示资源(它是HTML页面,图像,文本文件还是其他什么?).该Server
头是由浏览器忽略,服务器用它来标识自己.但是一些爬虫可能会将它用于统计.
来自HTTP规范的引用:
当且仅当该头字段的整个字段值被定义为以逗号分隔的列表[即,#(值)]时,具有相同字段名的多个消息头字段可以存在于消息中.必须可以将多个头字段组合成一个"字段名:字段 - 值"对,而不改变消息的语义,方法是将每个后续字段值附加到第一个字段值,每个字段值用逗号分隔.
这意味着多个Content-Type
字段无效,并且行为未定义(尽管使用最后定义的字段很常见).
这篇维基百科文章包含带有描述的标题列表.