PHP培训:HTTP 请求头与请求体

您所在的位置:网站首页 请求头设置字符编码 PHP培训:HTTP 请求头与请求体

PHP培训:HTTP 请求头与请求体

#PHP培训:HTTP 请求头与请求体| 来源: 网络整理| 查看: 265

PHP培训:HTTP 请求头与请求体 发布者: 成都达内     浏览次数:     发布时间:2016-08-23 14:05:04 返回列表

HTTP Request HTTP 的请求报文分为三个部分 请求行、请求头和请求体,格式如图: 一个典型的请求消息头域,如下所示: POST/GET http://download.microtool.de:80/somedata.exe Host: download.microtool.de Ac...

  HTTP Request

  HTTP 的请求报文分为三个部分 请求行、请求头和请求体,格式如图:

  一个典型的请求消息头域,如下所示:

  POST/GET http://download.microtool.de:80/somedata.exe

  Host: download.microtool.de

  Accept:*/*

  Pragma: no-cache

  Cache-Control: no-cache

  Referer: http://download.microtool.de/

  User-Agent:Mozilla/4.04[en](Win95;I;Nav)

  Range:bytes=554554-

  Request Line:请求行

  请求行(Request Line)分为三个部分:请求方法、请求地址和协议及版本,以CRLF(rn)结束。

  HTTP/1.1 定义的请求方法有8种:GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS、TRACE,最常的两种GET和POST,如果是RESTful接口的话一般会用到GET、POST、DELETE、PUT。

  Request Methods

  注意,仅有POST、PUT以及PATCH这三个动词时会包含请求体,而GET、HEAD、DELETE、CONNECT、TRACE、OPTIONS这几个动词时不包含请求体。

  Header:请求头

  Header解释示例

  Accept指定客户端能够接收的内容类型Accept: text/plain, text/html,application/json

  Accept-Charset浏览器可以接受的字符编码集。Accept-Charset: iso-8859-5

  Accept-Encoding指定浏览器可以支持的web服务器返回内容压缩编码类型。Accept-Encoding: compress, gzip

  Accept-Language浏览器可接受的语言Accept-Language: en,zh

  Accept-Ranges可以请求网页实体的一个或者多个子范围字段Accept-Ranges: bytes

  AuthorizationHTTP授权的授权证书Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

  Cache-Control指定请求和响应遵循的缓存机制Cache-Control: no-cache

  Connection表示是否需要持久连接。(HTTP 1.1默认进行持久连接)Connection: close

  CookieHTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。Cookie: $Version=1; Skin=new;

  Content-Length请求的内容长度Content-Length: 348

  Content-Type请求的与实体对应的MIME信息Content-Type: application/x-www-form-urlencoded

  Date请求发送的日期和时间Date: Tue, 15 Nov 2010 08:12:31 GMT

  Expect请求的特定的服务器行为Expect: 100-continue

  From发出请求的用户的EmailFrom: [email protected]

  Host指定请求的服务器的域名和端口号Host: www.zcmhi.com

  If-Match只有请求内容与实体相匹配才有效If-Match: “737060cd8c284d8af7ad3082f209582d”

  If-Modified-Since如果请求的部分在指定时间之后被修改则请求成功,未被修改则返回304代码If-Modified-Since: Sat, 29 Oct 2010 19:43:31 GMT

  If-None-Match如果内容未改变返回304代码,参数为服务器先前发送的Etag,与服务器回应的Etag比较判断是否改变If-None-Match: “737060cd8c284d8af7ad3082f209582d”

  If-Range如果实体未改变,服务器发送客户端丢失的部分,否则发送整个实体。参数也为EtagIf-Range: “737060cd8c284d8af7ad3082f209582d”

  If-Unmodified-Since只在实体在指定时间之后未被修改才请求成功If-Unmodified-Since: Sat, 29 Oct 2010 19:43:31 GMT

  Max-Forwards限制信息通过代理和网关传送的时间Max-Forwards: 10

  Pragma用来包含实现特定的指令Pragma: no-cache

  Proxy-Authorization连接到代理的授权证书Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

  Range只请求实体的一部分,指定范围Range: bytes=500-999

  Referer先前网页的地址,当前请求网页紧随其后,即来路Referer: http://www.zcmhi.com/archives...

  TE客户端愿意接受的传输编码,并通知服务器接受接受尾加头信息TE: trailers,deflate;q=0.5

  Upgrade向服务器指定某种传输协议以便服务器进行转换(如果支持)Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11

  User-AgentUser-Agent的内容包含发出请求的用户信息User-Agent: Mozilla/5.0 (Linux; X11)

  Via通知中间网关或代理服务器地址,通信协议Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)

  Warning关于消息实体的警告信息Warn: 199 Miscellaneous warning

  Request Body:请求体

  Types

  根据应用场景的不同,HTTP请求的请求体有三种不同的形式。

  任意类型

  移动开发者常见的,请求体是任意类型,服务器不会解析请求体,请求体的处理需要自己解析,如 POST JSON时候就是这类。

  application/json

  application/json 这个 Content-Type 作为响应头大家肯定不陌生。实际上,现在越来越多的人把它作为请求头,用来告诉服务端消息主体是序列化后的 JSON 字符串。由于 JSON 规范的流行,除了低版本 IE 之外的各大浏览器都原生支持 JSON.stringify,服务端语言也都有处理 JSON 的函数,使用 JSON 不会遇上什么麻烦。

  JSON 格式支持比键值对复杂得多的结构化数据,这一点也很有用。记得我几年前做一个项目时,需要提交的数据层次非常深,我就是把数据 JSON 序列化之后来提交的。不过当时我是把 JSON 字符串作为 val,仍然放在键值对里,以 x-www-form-urlencoded 方式提交。

  Google 的 AngularJS 中的 Ajax 功能,默认就是提交 JSON 字符串。例如下面这段代码:

  JSvar data = {'title':'test', 'sub' : [1,2,3]};

  $http.post(url, data).success(function(result) {

  ...

  });

  最终发送的请求是:

  BASHPOST http://www.example.com HTTP/1.1

  Content-Type: application/json;

  {"title":"test","sub":[1,2,3]}

  这种方案,可以方便的提交复杂的结构化数据,特别适合 RESTful 的接口。各大抓包工具如 Chrome 自带的开发者工具、Firebug、Fiddler,都会以树形结构展示 JSON 数据,非常友好。但也有些服务端语言还没有支持这种方式,例如 php 就无法通过 $_POST 对象从上面的请求中获得内容。这时候,需要自己动手处理下:在请求头中 Content-Type 为 application/json 时,从 php://input 里获得原始输入流,再 json_decode成对象。一些 php 框架已经开始这么做了。

  当然 AngularJS 也可以配置为使用 x-www-form-urlencoded 方式提交数据。如有需要,可以参考 这篇文章 。

  text/xml

 之前 提到过 XML-RPC (XML Remote Procedure Call)。它是一种使用 HTTP 作为传输协议,XML 作为编码方式的远程调用规范。典型的 XML-RPC 请求是这样的:

  HTMLPOST http://www.example.com HTTP/1.1

  Content-Type: text/xml

  

  

  examples.getStateName

  

  

  41

  XML-RPC 协议简单、功能够用,各种语言的实现都有。它的使用也很广泛,如 WordPress 的 XML-RPC Api ,搜索引擎的 ping 服务 等等。JavaScript 中,也有 现成的库支持以这种方式进行数据交互,能很好的支持已有的 XML-RPC 服务。不过,我个人觉得 XML 结构还是过于臃肿,一般场景用 JSON 会更灵活方便。

  Query String:application/x-www-form-urlencoded

  这算是最常见的 POST 提交数据的方式了。浏览器的原生

成都IT培训中心,专注于C++培训,3G培训,android培训,嵌入式培训等高端IT培训,顶级师资授课,真实项目实战,零首付,低押金,名企高薪就业。

(责任编辑:成都达内) 上一篇:PHP培训_一个安全JavaScript沙箱的构建 下一篇:PHP培训_提升前端性能 相关文章 成都php培训:PHP通过base64方式上传 成都php培训:POST/GET数据调用API示 成都php培训:一份不错的php面试题 成都php培训:PHP实现微信开放平台 成都php培训:MySQL全文索引应用简 成都达内:怎么才能把Redis可以用 成都php达内:如何制作HTML5音乐播 成都php达内:可以输入也可以下拉 成都php达内:如何使用PHP生成PD 成都php培训:php抓取页面的几种方 成都php培训:PHP 命令行下的世界 成都php培训:实例,PHP实现HTTP断


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3