前端必备HTTP技能之请求头响应头格式以及请求方法简述

JacintoCole 8年前
   <p><strong>请求头响应头格式</strong></p>    <p>http协议中,客户端和服务端通过发送纯文本(ASCII)消息的方式进行通信,客户端发送请求(requests)到服务端,服务端发送响应(responses)到客户端。</p>    <p><strong>请求消息格式</strong></p>    <p>1.请求行,例如:GET /images/logo.png HTTP/1.1</p>    <p>2.请求头,例如:Accept: text/plain</p>    <p>3.空行</p>    <p>4.可选择的请求体</p>    <p>例子:</p>    <p>GET /index.html HTTP/1.1</p>    <p>Host: www.example.com</p>    <p><strong>响应消息格式</strong></p>    <p>1.包含状态码的状态行,例如:HTTP/1.1 200 OK</p>    <p>2.响应头,例如:Content-Type: text/html</p>    <p>3.空行</p>    <p>4.可选择的消息体</p>    <p>例子:</p>    <p>HTTP/1.1 200 OK</p>    <p>Date: Mon, 23 May 2005 22:38:34 GMT</p>    <p>Content-Type: text/html; charset=UTF-8</p>    <p>Content-Encoding: UTF-8</p>    <p>Content-Length: 138</p>    <p>Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT</p>    <p>Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux)</p>    <p>ETag: "3f80f-1b6-3e1cb03b"</p>    <p>Accept-Ranges: bytes</p>    <p>Connection: close</p>    <pre>  <html>  <head>    <title>An Example Page</title>  </head>  <body>    Hello World, this is a very simple HTML document.  </body>  </html></pre>    <h3><strong>请求方法</strong></h3>    <p>为了标识特定资源需要特定的行为访问,HTTP协议定义了多种请求方法。这种特定资源是什么样的,是已有的数据,还有动态生成的?主要依赖于服务端实现。通常来说这种资源对应一个文件或者属于服务端的一个可执行输出。</p>    <p>HTTP/1.0规范定义三种请求方法:GET, POST, HEAD。HTTP/1.1规范又增加了五种:OPTIONS, PUT, DELETE, TRACE,CONNECT。</p>    <p><strong>GET</strong></p>    <p>用来请求特定资源,规范规定使用GET方法应该只是用来获取数据,不能有其他行为。其他HTTP方法也有类似准则,实际就是规范定义的每种HTTP方法的作用很单一,不建议在HTTP方法上应用其他行为。</p>    <p><strong>HEAD</strong></p>    <p>和GET请求类似,但是HEAD请求的响应体中不应该包含响应体,只是用来获取响应头中的元信息,这样就不用传输整个响应内容,节省流量。</p>    <p><strong>POST</strong></p>    <p>请求服务端接受请求体中的整个实体作为给定URI资源的一部分,这些实体可以是表单数据,数据库中的项,新闻组,邮件列表,评论等。</p>    <p><strong>PUT</strong></p>    <p>请求把封闭的实体存储在给定的URI下,如果这个URI对应的资源已经存在,那么会修改这个资源;如果这个URI对应的资源不存在,服务器会根据URI创建一个新资源。</p>    <p><strong>DELETE</strong></p>    <p>请求删除指定资源。</p>    <p><strong>TRACE</strong></p>    <p>请求打印接受到的请求,这样客户端就可以看到中间服务做了哪些改变或者新增了哪些东西。</p>    <p><strong>OPTIONS</strong></p>    <p>请求返回针对特定URL服务器支持哪些HTTP方法,这样可以用来检查web服务器的功能,通过请求 * 而不是特定资源的方式。</p>    <p><strong>CONNECT</strong></p>    <p>请求把连接转成透明的TCP/IP通道,通常用于使用非加密的HTTP代理实现HTTPS。</p>    <p><strong>PATCH</strong></p>    <p>适用于修改资源的一部分。</p>    <p>在规范中定义的这些请求方法是语义化的,并且是可依赖的。任何客户端都可以使用任何请求方法,服务端也可以配置成支持任何这些请求方法的组合。</p>    <p>实际上这些请求方法可以随意定义,没有数量限制,不过你自己定义出来的请求方法会被认为是不安全并且是非幂等的。</p>    <p>总结:这些请求方法本质上没有区别,最终都是TCP请求,唯一的区别就是每个请求方法,使用的时候,规范规定的使用格式不同,原则上必须按照规范规定的格式使用,其实也可以违反规范使用,比如你可以使用GET方法请求数据,也可以使用GET方法提交数据,当然你可以用POST方法提交数据,也可以用POST方法获取数据。</p>    <p> </p>    <p> </p>    <p>来自:http://www.jianshu.com/p/39e693cfa34a</p>    <p> </p>