前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Http的headers最详解释

Http的headers最详解释

作者头像
php007
发布2020-02-14 16:13:28
3.6K0
发布2020-02-14 16:13:28
举报
文章被收录于专栏:PHP专享栏

一.HTTP Headers

  HTTP Headers是HTTP请求和相应的核心,它承载了关于客户端浏览器,请求页面,服务器等相关的信息。

二.ThinkPHP不同版本比较:

  • getallheaders() 用来获取请求头部. 你也可以使用 $_SERVER 数组.
  • headers_list() 用来获取响应头部.(这个和tp5之后的版本差别有点大, Request::header();tp5已经将post,get,header做了分离,很符合实际使用的习惯)

  文章下面将会看到一些使用php示范的例子。

  HTTP Request 的结构

  被称作“first line”的第一行包含三个部分:

  • “method” 表明这是何种类型的请求. 最常见的请求类型有 GET, POST 和 HEAD.
  • “path” 体现的是主机之后的路径. 例如,当你请求 “http://net.tutsplus.com/tutorials/other/top-20-mysql-best-practices/”时 , path 就会是 “/tutorials/other/top-20-mysql-best-practices/”.
  • “protocol” 包含有 “HTTP” 和版本号, 现代浏览器都会使用1.1.

  剩下的部分每行都是一个“Name:Value”对。它们包含了各式各样关于请求和你浏览器的信息。例如”User-Agent“就表明了你的浏览器版本和你所用的操作系统。”Accept-Encoding“会告诉服务器你的浏览可以接受类似gzip的压缩输出。

  这些headers大部分都是可选的。HTTP 请求甚至可以被精简成这样子:

代码语言:javascript
复制
GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1
Host: net.tutsplus.com

  并且你仍旧可以从服务器收到有效的响应。

  请求类型

  三种最常见的请求类型是:GET,POST 和 HEAD ,从html的编写过程中你可能已经熟悉了前两种。

  GET:获取一个文档

  大部分被传输到浏览器的html, images, js, css, … 都是通过GET方法发出请求的。它是获取数据的主要方法。

  例如,要获取Nettuts+ 的文章,http request的第一行通常看起来是这样的:

代码语言:javascript
复制
GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1

  一旦html加载完成,浏览器将会发送GET 请求去获取图片,就像下面这样:

代码语言:javascript
复制
GET /wp-content/themes/tuts_theme/images/header_bg_tall.png HTTP/1.1

  表单也可以通过GET方法发送,下面是个例子:

代码语言:javascript
复制
<form action="foo.php" method="GET">
First Name: <input name="first_name" type="text"/>
Last Name: <input name="last_name" type="text"/>
<input name="action" type="submit" value="Submit"/>
</form>

  当这个表单被提交时,HTTP request 就会像这样:

代码语言:javascript
复制
GET /foo.php?first_name=John&last_name=Doe&action=Submit HTTP/1.1
...

  你可以将表单输入通过附加进查询字符串的方式发送至服务器。

  POST:发送数据至服务器

  尽管你可以通过GET方法将数据附加到url中传送给服务器,但在很多情况下使用POST发送数据给服务器更加合适。通过GET发送大量数据是不现实的,它有一定的局限性。

  用POST请求来发送表单数据是普遍的做法。我们来把上面的例子改造成使用POST方式:

代码语言:javascript
复制
<form action="foo.php" method="POST">
First Name: <input name="first_name" type="text"/>
Last Name: <input name="last_name" type="text"/>
<input name="action" type="submit" value="Submit"/>
</form>

  提交这个表单会创建一个如下的HTTP 请求:

代码语言:javascript
复制
POST /foo.php HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://localhost/test.php
Content-Type: application/x-www-form-urlencoded
Content-Length: 43
first_name=John&last_name=Doe&action=Submit

  这里有三个需要注意的地方:

  • 第一行的路径已经变为简单的 /foo.php , 已经没了查询字符串。
  • 新增了 Content-Type 和 Content-Lenght 头部,它提供了发送信息的相关信息.
  • 所有数据都在headers之后,以查询字符串的形式被发送.

  POST方式的请求也可用在AJAX,应用程序,cURL … 之上。并且所有的文件上传表单都被要求使用POST方式。

  HEAD:接收头部信息

  HEAD和GET很相似,只不过HEAD不接受HTTP响应的内容部分。当你发送了一个HEAD请求,那就意味着你只对HTTP头部感兴趣,而不是文档本身。

  这个方法可以让浏览器判断页面是否被修改过,从而控制缓存。也可判断所请求的文档是否存在。

  例如,假如你的网站上有很多链接,那么你就可以简单的给他们分别发送HEAD请求来判断是否存在死链,这比使用GET要快很多。

  HTTP响应结构

  当浏览器发送了HTTP请求之后,服务器就会通过一个HTTP response来响应这个请求。如果不关心内容,那么这个请求看起来会是这样的:

  第一个有价值的信息就是协议。目前服务器都会使用 HTTP/1.x 或者 HTTP/1.1。

 大部分CGI脚本都不会像PHP那样输出错误信息给浏览器。如果出现了致命的错误,它们只会发送一个500的状态码。这时需要查看服务器错误日志来排错。

现在了解一些常见的HTTP Headers中的HTTP响应信息。

  HTTP Headers 中的 HTTP请求,在PHP中,可以通过 $_SERVER 获取全部的值。如果想获取更多数值,你可以通过 header() 来设置头部响应信息。PHP已经自动发送了一些必要的头部信息,如 载入的内容,设置 cookies 等等… 你可以通过 headers_list() 函数看到已发送和将要发送的头部信息。你也可以使用headers_sent()函数来检查头部信息是否已经被发送。

另外附一份参考的$_SERVER表

$_SERVER['PHP_SELF'] #当前正在执行 脚本的文件名,与 document root相关。

$_SERVER['argv'] #传递给该 脚本的参数。

$_SERVER['argc'] #包含传递给程序的 命令行参数的个数(如果运行在命令行模式)。

$_SERVER['GATEWAY_INTERFACE'] #服务器使用的 CGI 规范的版本。例如,“CGI/1.1”。

$_SERVER['SERVER_NAME'] #当前 运行脚本所在服务器 主机的名称。

$_SERVER['SERVER_SOFTWARE'] #服务器标识的字串,在响应请求时的头部中给出。

$_SERVER['SERVER_PROTOCOL'] #请求页面时通信协议的名称和版本。例如,“HTTP/1.0”。

$_SERVER['REQUEST_METHOD'] #访问页面时的请求方法。例如:“GET”、“HEAD”,“POST”,“PUT”。

$_SERVER['QUERY_STRING'] #查询(query)的字符串。

$_SERVER['DOCUMENT_ROOT'] #当前 运行脚本所在的文档根目录。在服务器配置文件中定义。

$_SERVER['HTTP_ACCEPT'] #当前请求的 Accept: 头部的内容。

$_SERVER['HTTP_ACCEPT_CHARSET'] #当前请求的 Accept-Charset: 头部的内容。例如:“iso-8859-1,*,utf-8”。

$_SERVER['HTTP_ACCEPT_ENCODING'] #当前请求的 Accept-Encoding: 头部的内容。例如:“gzip”。

$_SERVER['HTTP_ACCEPT_LANGUAGE']#当前请求的 Accept-Language: 头部的内容。例如:“en”。

$_SERVER['HTTP_CONNECTION'] #当前请求的 Connection: 头部的内容。例如:“Keep-Alive”。

$_SERVER['HTTP_HOST'] #当前请求的 Host: 头部的内容。

$_SERVER[' HTTP_REFERER'] #链接到当前页面的前一页面的 URL 地址。

$_SERVER[' HTTP_USER_AGENT'] #当前请求的 User-Agent: 头部的内容。

$_SERVER['HTTPS'] — 如果通过https访问,则被设为一个非空的值(on),否则返回off

$_SERVER['REMOTE_ADDR'] #正在浏览当前页面用户的 IP 地址。

$_SERVER['REMOTE_HOST'] #正在浏览当前页面用户的 主机名。

$_SERVER['REMOTE_PORT'] #用户连接到服务器时所使用的端口。

$_SERVER['SCRIPT_FILENAME'] #当前执行 脚本的 绝对路径名。

$_SERVER['SERVER_ADMIN'] # 管理员信息

$_SERVER['SERVER_PORT'] #服务器所使用的端口

$_SERVER['SERVER_SIGNATURE'] #包含服务器版本和 虚拟主机名的字符串。

$_SERVER['PATH_TRANSLATED'] #当前 脚本所在文件系统(不是文档根目录)的基本路径。

$_SERVER['SCRIPT_NAME'] #包含当前 脚本的路径。这在页面需要指向自己时非常有用。

$_SERVER['REQUEST_URI'] #访问此页面所需的 URI。例如,“/index.html”

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 风帆 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一.HTTP Headers
  •   HTTP Request 的结构
  •   请求类型
  •   GET:获取一个文档
  •   POST:发送数据至服务器
  •   HEAD:接收头部信息
  •   HTTP响应结构
  •   HTTP Headers 中的 HTTP请求,在PHP中,可以通过 $_SERVER 获取全部的值。如果想获取更多数值,你可以通过 header() 来设置头部响应信息。PHP已经自动发送了一些必要的头部信息,如 载入的内容,设置 cookies 等等… 你可以通过 headers_list() 函数看到已发送和将要发送的头部信息。你也可以使用headers_sent()函数来检查头部信息是否已经被发送。
相关产品与服务
轻量应用服务器
轻量应用服务器(TencentCloud Lighthouse)是新一代开箱即用、面向轻量应用场景的云服务器产品,助力中小企业和开发者便捷高效的在云端构建网站、Web应用、小程序/小游戏、游戏服、电商应用、云盘/图床和开发测试环境,相比普通云服务器更加简单易用且更贴近应用,以套餐形式整体售卖云资源并提供高带宽流量包,将热门软件打包实现一键构建应用,提供极简上云体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档