我想知道PHP标头是什么。我严格使用PHP来完成HTML,我认为我必须在输出文本时发送text / html标题,然后从单独的脚本中发送image / jpeg标题,该脚本在图像标记中用作源,但有人建议我带走标题因为它们什么也没做。
我做了,一切都和以前一样。这让我很奇怪:什么是标题?他们什么时候用? (既可以从HTML角度看,也可以从某些(?)其他角度看)我为什么要删除我的?
答案 0 :(得分:56)
嗯,你看,当爸爸非常喜欢木乃伊时,他希望通过使用其大型网络服务器来证明他的爱,大量的HTML标签会出现在木乃伊的浏览器中。
但要做到这一点,他必须告诉木乃伊他打算做什么,否则木乃伊可能对爸爸的礼物感到非常惊讶。
因此,爸爸开始慢慢地和妈妈一起开始,向她解释他要发送哪种数据(哑剧/类型),他要讲哪种语言(charset),或者他要使用哪种保护(状态)码)。PHP标题是一些玩具可以帮助你用大象做到这一点。呃...
答案 1 :(得分:29)
是否有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
1}})。否则浏览器将不得不猜测,可能会出错。常见的<meta http-equiv="Content-Type" content="text/html;charset=something"/>
标签是做同样事情的另一种方式;如果你想要真正安全,你可以使用它们。
如果您将JPEG图片作为text/html
投放,如果您通过删除header()
来电跟随“某人”的可疑建议,那将会发生什么,然后转到图片的网址在浏览器中将尝试将二进制图像显示为HTML,这将在屏幕上为您提供大量旧垃圾。这真的不太好。
然而,在许多浏览器中,当您指向<img src>
标记时,这种破损的JPEG通常仍然有效。这是因为当您使用<img>
时,浏览器知道它将获取图像,并在您说它实际上是HTML时忽略您。然后它必须“嗅探”文件的内容以查看它是否看起来像JPEG,GIF,PNG或它知道的其他类型的图像,因此它知道如何显示它。浏览器已经这样做了,因为有很多写得不好的网站忘记发送标题。 BOO!
因此,当您编写JPEG或任何其他非HTML类型时,请务必发送header('Content-Type: image/jpeg')
。对于HTML页面,您通常可以在没有它的情况下离开。
答案 2 :(得分:11)
标题不是特定于浏览器的,它是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-8
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=utf-8">
<TITLE>Example Web Page</TITLE>
</HEAD>
<body>
<p>You have reached this web page by typing "example.com",
"example.net","example.org"
or "example.edu" into your web browser.</p>
<p>These domain names are reserved for use in documentation and are not available
for registration. See <a href="http://www.rfc-editor.org/rfc/rfc2606.txt">RFC
2606</a>, Section 3.</p>
</BODY>
</HTML>
由客户端(Internet浏览器)决定是否解析标头。所有现代Internet浏览器都会解析Content-Type
标头,并使用它来确定如何显示资源(它是HTML页面,图像,文本文件还是其他什么?)。浏览器会忽略Server
标头,服务器会使用它标识自己。但是一些爬虫可能会将其用于统计。
多个消息标题字段 可能存在相同的字段名称 当且仅当整个 该标题字段的字段值是 定义为以逗号分隔的列表 [即#(值)]。它必须是可能的 组合多个标题字段 成为一个“字段名称:字段值” 对,不改变语义 通过附加每个消息 后续的字段值到第一个, 每个用逗号分隔。
这意味着多个Content-Type
字段无效,并且行为未定义(尽管使用最后定义的字段很常见)。
This Wikipedia article包含带描述的标题列表。
答案 3 :(得分:4)
标题不是php的东西,它是HTTP的东西(通过互联网传输数据的方式)。
php中的header()
函数允许您设置这些标题以对应代码的使用,因此如果您的代码生成jpg而不是通常的文本(如html或javascript那么)由用户的浏览器解释)您将coressponding标头设置为image/jpeg
。现在,您可以在其他地方使用此脚本,就像它在静态图像中一样,如:
<img src="static.jpg"/>
现在,如果你想生成图像的缩略图,并想要动态访问它,你可以编写一个返回jpeg的php脚本,你可以像这样使用它:
<img src="thumb.php?s=64&name=static.jpg"/>"
thumb.php
文档将从图像static.jpg生成64x64拇指(使用HTTP标头Content-Type: image/jpeg
。
当然,这只是header()
函数的众多用法之一,对于附加信息,请查看维基百科:Hypertext Transfer Protocol,List of HTTP header fields,或者如果您是勇敢的足够的,在rfc。
答案 4 :(得分:2)
假设您的意思是header()函数。
这是一种添加/更改发送到浏览器的HTTP标头的方法。
您可能需要在HTTP规范中查找这些标头的列表。
例如,您可能正在开发XML RSS Feed,因此您需要将Content-Type更改为“text / xml”而不是“text / html”(默认)。
答案 5 :(得分:2)
标题包含浏览器告诉它以某种方式呈现内容的说明。例如,指定要使用的页面语言/字符集,或者告诉浏览器要输出的数据是原始图像数据,因此将其作为图像处理(与常规文本相对),或者您可以像标题一样处理(“位置: somepage.html“)让浏览器重定向到另一个页面。基本上你可以在普通的<head>...</head>
标签中找到很多东西(然后是一些东西)。
答案 6 :(得分:1)
HTTP请求/响应标头(在您的案例响应中)是元数据,它们与响应一起发送(更确切地说,在数据之前)。
它可能包含缓存指令,数据类型和大小,上次修改日期等信息。您可以看到HTTP标头列表here。
答案 7 :(得分:0)
应该区分进入标题(php充当Web服务器页面)和传出标题(php充当使用cURL库之类的东西的Web客户端)。
Headers实际上只是另一个名称 - 值对的包,它通过每个HTTP“请求”事务进行连接。 Body是服务器发回的东西,服务器还向客户端发回了响应头。
任一标头中的每个名称 - 值对都由HTTP协议和其他标准定义,但客户端和服务器也可以将标头用于其他用途。
headers()用于设置响应头名称 - 值对,而getallheaders()用于检索发送到php服务器页面的请求头。