bob*_*nce 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).否则浏览器将不得不猜测,可能会出错.常见的<meta http-equiv="Content-Type" content="text/html;charset=something"/>标签是做同样事情的另一种方式; 如果你想要真正安全,你可以同时使用它们.
如果您提供JPEG图像text/html,如果您通过删除header()调用来关注"某人"的可疑建议将会发生这种情况,那么在浏览器中转到图像的URL会尝试将二进制图像显示为HTML,这将在屏幕上给你一大堆旧垃圾.真的,这不是很好.
但是在许多浏览器中,当您将<img src>标记指向它时,这种破损的JPEG通常仍然有效.这是因为当您使用a时<img>,浏览器知道它将获取图像,并在您说它实际上是HTML时忽略您.然后它必须"嗅探"文件的内容以查看它是否看起来像JPEG,GIF,PNG或它知道的其他类型的图像,因此它知道如何显示它.浏览器已经这样做了,因为有很多写得不好的网站忘记发送标题.嘘!
因此,header('Content-Type: image/jpeg')当您编写JPEG或任何其他非HTML类型时,请务必发送.对于HTML页面,您通常可以在没有它的情况下离开.
Lek*_*eyn 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
Run Code Online (Sandbox Code Playgroud)
服务器至少响应一个状态代码: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>
Run Code Online (Sandbox Code Playgroud)
由客户端(Internet浏览器)决定是否解析标头.所有现代Internet浏览器都会解析Content-Type标头,并使用它来确定如何显示资源(它是HTML页面,图像,文本文件还是其他什么?).该Server头是由浏览器忽略,服务器用它来标识自己.但是一些爬虫可能会将它用于统计.
来自HTTP规范的引用:
当且仅当该头字段的整个字段值被定义为以逗号分隔的列表[即,#(值)]时,具有相同字段名的多个消息头字段可以存在于消息中.必须可以将多个头字段组合成一个"字段名:字段 - 值"对,而不改变消息的语义,方法是将每个后续字段值附加到第一个字段值,每个字段值用逗号分隔.
这意味着多个Content-Type字段无效,并且行为未定义(尽管使用最后定义的字段很常见).
这篇维基百科文章包含带有描述的标题列表.