HTTP Headers 中的 HTTP请求现在我们来看一些在HTTP headers中常见的HTTP请求信息。 所有这些头部信息都可以在PHP的$_SERVER数组中找到。你也可以用getallheaders() 函数一次性获取所有的头部信息。 Host一个HTTP请求会发送至一个特定的IP地址,但是大部分服务器都有在同一IP地址下托管多个网站的能力,那么服务器必须知道浏览器请求的是哪个域名下的资源。
这只是基本的主机名,包含域名和子级域名。 在PHP中,可以通过$_SERVER['HTTP_HOST'] 或 $_SERVER['SERVER_NAME']来查看。 User-Agent
这个头部可以携带如下几条信息:
这就是某些网站用来收集访客信息的一般手段。例如,你可以判断访客是否在使用手机访问你的网站,然后决定是否将他们引导至一个在低分辨率下表现良好的移动网站。 在PHP中,可以通过 $_SERVER['HTTP_USER_AGENT'] 来获取User-Agent
Accept-Language
这个信息可以说明用户的默认语言设置。如果网站有不同的语言版本,那么就可以通过这个信息来重定向用户的浏览器。 它可以通过逗号分割来携带多国语言。第一个会是首选的语言,其它语言会携带一个“q”值,来表示用户对该语言的喜好程度(0~1)。 在PHP中用 $_SERVER["HTTP_ACCEPT_LANGUAGE"] 来获取这一信息。
Accept-Encoding
大部分的现代浏览器都支持gzip压缩,并会把这一信息报告给服务器。这时服务器就会压缩过的HTML发送给浏览器。这可以减少近80%的文件大小,以节省下载时间和带宽。 在PHP中可以使用 $_SERVER["HTTP_ACCEPT_ENCODING"] 获取该信息。 然后调用ob_gzhandler()方法时会自动检测该值,所以你无需手动检测。
If-Modified-Since如果一个页面已经在你的浏览器中被缓存,那么你下次浏览时浏览器将会检测文档是否被修改过,那么它就会发送这样的头部:
如果自从这个时间以来未被修改过,那么服务器将会返回“304 Not Modified”,而且不会再返回内容。浏览器将自动去缓存中读取内容 在PHP中,可以用$_SERVER['HTTP_IF_MODIFIED_SINCE'] 来检测。
还有一个叫Etag的HTTP头信息,它被用来确定缓存的信息是否正确,稍后我们将会解释它。 Cookie顾名思义,他会发送你浏览器中存储的Cookie信息给服务器。
它是用分号分割的一组名值对。Cookie也可以包含session id。 在PHP中,单一的Cookie可以访问$_COOKIE数组获得。你可以直接用$_SESSION array获取session变量。如果你需要session id,那么你可以使用session_id()函数代替cookie。
Referer顾名思义, 头部将会包含referring url信息。 例如,我访问Nettuts+的主页并点击了一个链接,这个头部信息将会发送到浏览器: 在PHP中,可以通过 $_SERVER['HTTP_REFERER'] 获取该值。
You may have noticed the word “referrer” is misspelled as “referer”. Unfortunately it made into the official HTTP specifications like that and got stuck. Authorization当一个页面需要授权,浏览器就会弹出一个登陆窗口,输入正确的账号后,浏览器会发送一个HTTP请求,但此时会包含这样一个头部:
包含在头部的这部分信息是base64 encoded。例如,base64_decode(‘bXl1c2VyOm15cGFzcw==’) 会被转化为 ‘myuser:mypass’ 。 在PHP中,这个值可以用$_SERVER['PHP_AUTH_USER'] 和 $_SERVER['PHP_AUTH_PW'] 获得。 更多细节我们会在WWW-Authenticate部分讲解。 |
|