Web开发帮助:学习http headers的方方面_PHP技巧_黑客防线网安服务器维护基地--Powered by WWW.RONGSEN.COM.CN

Web开发帮助:学习http headers的方方面

作者:黑客防线网安PHP教程基地 来源:黑客防线网安PHP教程基地 浏览次数:0

本篇关键词:方面学习开发帮助
黑客防线网安网讯:  无论是做前端还是做后端,都会不时与HTTPHeaders打交道,了解它无疑对Web开发有莫大帮助。这篇文章就让我一起来学习下httpheaders的方方面。    什么是HTTPHeaders    HTTP是“...
  无论是做前端还是做后端都会不时与HTTPHeaders打交道了解它无疑对Web开发有莫大帮助这篇文章就让我一起来学习下httpheaders的方方面
  
  什么是HTTPHeaders
  
  HTTP是“HypertextTransferProtocol”的所写,整个万维网都在使用这种协议,几乎你在浏览器里看到的大部分内容都是通过http协议来传输的,比如这篇文章。
  
  HTTPHeaders是HTTP请求和相应的核心,它承载了关于客户端浏览器,请求页面,服务器等相关的信息。
  
  示例
  
  当你在浏览器地址栏里键入一个url,你的浏览器将会类似如下的http请求:
  
  GET/tutorials/other/top-20-mysql-best-practices/HTTP/1.1
  
  Host:net.tutsplus.com
  
  User-Agent:Mozilla/5.0(Windows;U;WindowsNT6.1;en-US;rv:1.9.1.5)Gecko/20091102Firefox/3.5.5(.NETCLR3.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
  
  Cookie:PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120
  
  Pragma:no-cache
  
  Cache-Control:no-cache
  
  第一行被称为“RequestLine”它描述的是这个请求的基本信息,剩下的就是HTTPheaders了。
  
  请求完成之后,你的浏览器可能会收到如下的HTTP响应:
  
  HTTP/1.x200OK
  
  Transfer-Encoding:chunked
  
  Date:Sat,28Nov200904:36:25GMT
  
  Server:LiteSpeed
  
  Connection:close
  
  X-Powered-By:W3TotalCache/0.8
  
  Pragma:public
  
  Expires:Sat,28Nov200905:36:25GMT
  
  Etag:"pub1259380237;gz"
  
  Cache-Control:max-age=3600,public
  
  Content-Type:text/html;charset=UTF-8
  
  Last-Modified:Sat,28Nov200903:50:37GMT
  
  X-Pingback:http://net.tutsplus.com/xmlrpc.php
  
  Content-Encoding:gzip
  
  Vary:Accept-Encoding,Cookie,User-Agent
  
  <!--...restofthehtml...-->
  
  第一行呢被称为“StatusLine”,它之后就是httpheaders,空行完了就开始输出内容了(在这个案例中是一些html输出)。
  
  但你查看页面源代码却不能看到HTTPheaders,虽然它们同你能看到的东西一起被传送至浏览器了。
  
  这个HTTP请求也发出了一些其它资源的接收请求,例如图片,css文件,js文件等等。
  
  下面我们来看看细节。
  
  怎样才能看到HTTPHeaders
  
  下面这些FireFox扩展能够帮助你分析HTTPheaders:
  
  1.firebug
  
  2.LiveHTTPHeaders
  
  3.在PHP中:
  
  getallheaders()用来获取请求头部.你也可以使用$_SERVER数组.
  
  headers_list()用来获取响应头部.
  
  文章下面将会看到一些使用php示范的例子。
  
  HTTPRequest的结构
  
  被称作“firstline”的第一行包含三个部分:
  
  “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请求甚至可以被精简成这样子:
  
  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+的文章,httprequest的第一行通常看起来是这样的:
  
  GET/tutorials/other/top-20-mysql-best-practices/HTTP/1.1
  
  一旦html加载完成,浏览器将会发送GET请求去获取图片,就像下面这样:
  
  GET/wp-content/themes/tuts_theme/images/header_bg_tall.pngHTTP/1.1
  
  表单也可以通过GET方法发送,下面是个例子:
  
  <formaction="foo.php"method="GET">
  
  FirstName:<inputname="first_name"type="text"/>
  
  LastName:<inputname="last_name"type="text"/>
  
  <inputname="action"type="submit"value="Submit"/>
  
  </form>
  
  当这个表单被提交时,HTTPrequest就会像这样:
  
  GET/foo.php?first_name=John&last_name=Doe&action=SubmitHTTP/1.1
  
  ...
  
  你可以将表单输入通过附加进查询字符串的方式发送至服务器。
  
  POST:发送数据至服务器
  
  尽管你可以通过GET方法将数据附加到url中传送给服务器,但在很多情况下使用POST发送数据给服务器更加合适。通过GET发送大量数据是不现实的,它有一定的局限性。
  
  用POST请求来发送表单数据是普遍的做法。我们来吧上面的例子改造成使用POST方式:
  
  <formaction="foo.php"method="POST">
  
  FirstName:<inputname="first_name"type="text"/>
  
  LastName:<inputname="last_name"type="text"/>
  
  <inputname="action"type="submit"value="Submit"/>
  
  </form>
  
  提交这个表单会创建一个如下的HTTP请求:
  
  POST/foo.phpHTTP/1.1
  
  Host:localhost
  
  User-Agent:Mozilla/5.0(Windows;U;WindowsNT6.1;en-US;rv:1.9.1.5)Gecko/20091102Firefox/3.5.5(.NETCLR3.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请求之后,服务器就会通过一个HTTPresponse来响应这个请求。如果不关心内容,那么这个请求看起来会是这样的:
  
  第一个有价值的信息就是协议。目前服务器都会使用HTTP/1.x或者HTTP/1.1。
  
  接下来一个简短的信息代表状态。代码200意味着我们的请求已经发送成功了,服务器将会返回给我们所请求的文档,在头部信息之后。
  
  我们都见过“404”页面。当我向服务器请求一个不存在的路径时,服务器就用用404来代替200响应我们。
  
  余下的响应内容和HTTP请求相似。这些内容是关于服务器软件的,页面/文件何时被修改过,mimetype等等…
  
  同样,这些头部信息也是可选的。
  
  
    黑客防线网安服务器维护方案本篇连接:http://www.rongsen.com.cn/show-17627-1.html
网站维护教程更新时间:2012-09-21 05:22:35  【打印此页】  【关闭
我要申请本站N点 | 黑客防线官网 |  
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479

footer  footer  footer  footer