打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
了解HTTP Headers的方方面面(2)

 


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 请求甚至可以被精简成这样子:


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的第一行通常看起来是这样的:


GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1


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


GET /wp-content/themes/tuts_theme/images/header_bg_tall.png HTTP/1.1


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


<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 就会像这样:


GET /foo.php?first_name=John&last_name=Doe&action=Submit HTTP/1.1

...


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


POST:发送数据至服务器


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


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


<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 请求:


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要快很多。



               
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
php表单提交方法汇总
十天学会PHP/第五天:$ GET、$ POST
PHP 超级全局变量
php中POST 方法上传 文件
jQuery解决input超多的表单提交
关于form表单同时使用POST和GET传递参数说明
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服