HTTP协议的8种请求类型介绍

转自:http://www.cnblogs.com/liangxiaofeng/p/5798607.html

HTTP协议的8种请求类型介绍

HTTP协议中共定义了八种方法或者叫“动作”来表明对Request-URI指定的资源的不同操作方式,具体介绍如下:

OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送'*'的请求来测试服务器的功能性。 
HEAD:向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。 
GET:向特定的资源发出请求。 
POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的创建和/或已有资源的修改。 
PUT:向指定资源位置上传其最新内容。 
DELETE:请求服务器删除Request-URI所标识的资源。 
TRACE:回显服务器收到的请求,主要用于测试或诊断。

CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

虽然HTTP的请求方式有8种,但是我们在实际应用中常用的也就是get和post,其他请求方式也都可以通过这两种方式间接的来实现。

HTTP协议中GET、POST和HEAD的介绍 
2008-05-10 14:15 
GET: 请求指定的页面信息,并返回实体主体。 
HEAD: 只请求页面的首部。 
POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。 
PUT: 从客户端向服务器传送的数据取代指定的文档的内容。 
DELETE: 请求服务器删除指定的页面。 
OPTIONS: 允许客户端查看服务器的性能。 
TRACE: 请求服务器在响应中的实体主体部分返回所得到的内容。 
PATCH: 实体中包含一个表,表中说明与该URI所表示的原内容的区别。 
MOVE: 请求服务器将指定的页面移至另一个网络地址。 
COPY: 请求服务器将指定的页面拷贝至另一个网络地址。 
LINK: 请求服务器建立链接关系。 
UNLINK: 断开链接关系。 
WRAPPED: 允许客户端发送经过封装的请求。 
Extension-mothed:在不改动协议的前提下,可增加另外的方法。 

GET: 请求指定的页面信息,并返回实体主体。 
 HEAD: 只请求页面的首部。 
 POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。  

       HTTP 定义了与服务器交互的不同方法,最基本的方法是 GET 和 POST。事实上 GET 适用于多数请求,而保留 POST 仅用于更新站点。根据 HTTP 规范,GET 用于信息获取,而且应该是 安全的和幂等的。所谓安全的意味着该操作用于获取信息而非修改信息。换句话说,GET 请求一般不应产生副作用。幂等的意味着对同一 URL 的多个请求应该返回同样的结果。完整的定义并不像看起来那样严格。从根本上讲,其目标是当用户打开一个链接时,她可以确信从自身的角度来看没有改变资源。 比如,新闻站点的头版不断更新。虽然第二次请求会返回不同的一批新闻,该操作仍然被认为是安全的和幂等的,因为它总是返回当前的新闻。反之亦然。POST 请求就不那么轻松了。POST 表示可能改变服务器上的资源的请求。仍然以新闻站点为例,读者对文章的注解应该通过 POST 请求实现,因为在注解提交之后站点已经不同了(比方说文章下面出现一条注解); 
在FORM提交的时候,如果不指定Method,则默认为GET请 求,Form中提交的数据将会附加在url之后,以?分开与url分开。字母数字字符原样发送,但空格转换为“+“号,其它符号转换为%XX,其中XX为 该符号以16进制表示的ASCII(或ISO Latin-1)值。GET请求请提交的数据放置在HTTP请求协议头中,而POST提交的数据则放在实体数据中; 
GET方式提交的数据最多只能有1024字节,而POST则没有此限制。    

在表单里使用”post”和”get”有什么区别 

在Form里面,可以使用post也可以使用get。它们都是method的合法取值。但是,post和get方法在使用上至少有两点不同: 
1、Get方法通过URL请求来传递用户的输入。Post方法通过另外的形式。 
2、Get方式的提交你需要用Request.QueryString来取得变量的值,而Post方式提交时,你必须通过Request.Form来访问提交的内容。  
仔细研究下面的代码。你可以运行之来感受一下: 

代码 
<!--两个Form只有Method属性不同-->
<FORM ACTION=“getpost.asp” METHOD=“get”>
<INPUT TYPE=“text” NAME=“Text” VALUE=“Hello World”></INPUT> 
<INPUT TYPE=“submit” VALUE=“Method=Get”></INPUT> 
</FORM> 
<BR> 
<FORM ACTION=“getpost.asp” METHOD=“post”>
<INPUT TYPE=“text” NAME=“Text” VALUE=“Hello World”></INPUT> 
<INPUT TYPE=“submit” VALUE=“Method=Post”></INPUT> 
</FORM> 

<BR> 
<BR> 

<% If Request.QueryString(“Text”) <> ““ Then %> 
通过get方法传递来的字符串是: “<B><%= Request.QueryString(“Text”) %></B>“<BR> 
<% End If %> 

<% If Request.Form(“Text”) <> ““ Then %> 
通过Post方法传递来的字符串是: “<B><%= Request.Form(“Text”) %></B>“<BR> 
<% End If %> 

说明 
把上面的代码保存为getpost.asp,然后运行,首先测试post方法,这时候,浏览器的url并没有什么变化,返回的结果是: 
通过Post方法传递来的字符串是: "Hello World" 
然后测试用get方法提交,请注意,浏览器的url变成了: 
http://localhost/general/form/getpost.asp?Text=Hello+World 
而返回的结果是: 
通过get方法传递来的字符串是: "Hello World" 
最后再通过post方法提交,浏览器的url还是: 
http://localhost/general/form/getpost.asp?Text=Hello+World 
而返回的结果变成: 
通过get方法传递来的字符串是: "Hello World" 
通过Post方法传递来的字符串是: "Hello World" 

提示 
通过get方法提交数据,可能会带来安全性的问题。比如一个登陆页面。当通过get方法提交数据时,用户名和密码将出现在URL上。如果: 
1、 登陆页面可以被浏览器缓存; 
2、 其他人可以访问客户的这台机器。 
那么,别人即可以从浏览器的历史记录中,读取到此客户的账号和密码。所以,在某些情况下,get方法会带来严重的安全性问题。 
建议 
在Form中,建议使用post方法。 

如果用HEAD方法请求的话,则服务器返回的只是响应标题,而不会返回被请求的文挡,HEAD方法通用于一些搜索引擎 

-------------------------------------------------------------------------------------------------------------------- 

GET: 请求指定的页面信息,并返回实体主体。 
HEAD: 只请求页面的首部。 
POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。 
PUT: 从客户端向服务器传送的数据取代指定的文档的内容。 
DELETE: 请求服务器删除指定的页面。 
OPTIONS: 允许客户端查看服务器的性能。 
TRACE: 请求服务器在响应中的实体主体部分返回所得到的内容。 
PATCH: 实体中包含一个表,表中说明与该URI所表示的原内容的区别。 
MOVE: 请求服务器将指定的页面移至另一个网络地址。 
COPY: 请求服务器将指定的页面拷贝至另一个网络地址。 
LINK: 请求服务器建立链接关系。 
UNLINK: 断开链接关系。 
WRAPPED: 允许客户端发送经过封装的请求。 
Extension-mothed:在不改动协议的前提下,可增加另外的方法。 

比如: 
GET /index.html HTTP/1.1 
Accept: text/plain /*纯ASCII码文本文件*/ 
Accept: text/html /*HTML文本文件*/ 
User-Agent:Mozilla/4.5(WinNT) 
说明浏览器使用Get方法请求文档/index.html。浏览器则只允许接收纯ASCII码文本文件和HTML文本文件,其使用的引擎是Mozilla/4.5(Netscape)。 

当服务器响应时,其状态行的信息为HTTP的版本号,状态码,及解释状态码的简单说明。现将5类状态码详细列出: 
① 客户方错误 
100  继续 
101  交换协议 
② 成功 
200  OK 
201  已创建 
202  接收 
203  非认证信息 
204  无内容 
205  重置内容 
206  部分内容 
③ 重定向 
300  多路选择 
301  永久转移 
302  暂时转移 
303  参见其它 
304  未修改(Not Modified) 
305  使用代理 
④ 客户方错误 
400  错误请求(Bad Request) 
401  未认证 
402  需要付费 
403  禁止(Forbidden) 
404  未找到(Not Found) 
405  方法不允许 
406  不接受 
407  需要代理认证 
408  请求超时 
409  冲突 
410  失败 
411  需要长度 
412  条件失败 
413  请求实体太大 
414  请求URI太长 
415  不支持媒体类型 
⑤ 服务器错误 
500  服务器内部错误 
501  未实现(Not Implemented) 
502  网关失败 
504  网关超时 
505 HTTP版本不支持 
比如:(在《TELNET……》一文中用telnet登陆80端口,相同的方法用在HTTP/1.1中,会发现没有显示,下面补充说明之) 
telnet www.fudan.edu.cn 80 
HEAD / HTTP/1.1 
host:www.fudan.edu.cn /*本行为输入内容*/ 
HTTP/1.1 501 Method Not Implemented 
Date: Web, 01 Nov 2000 07:12:29 GMT /*当前的日期/时间*/ 
Server: Apache/1.3.12 (Unix) /*Web服务器信息*/ 
Allow: GET, HEAD, OPTION, TRACE /*支持的方法类型*/ 
Connection: close  
Connect-Type: Text/html; charset=iso-8859-1/*连接的媒体类型*/ 

<!DOCTYPE HTML PUBLIG "-//IETF//DTD HTML 2.0//EN"> 
<HTML><HEAD> 
<TITLE>501 Method 
Not Implemented</TITLE> 
</HEAD><BODY> 
<H1>Method Not Implemented</H1> 
head to /inde 
x.html not supported.<P> 
Invalid method in request head / htp/1.1<P> 
<HR> 
<ADDRESS> 
Apache/1.3.12 Server at www.fudan.edu.cn Port 80</ADDRESS> 
</BODY></HTML> 
关于实体头部的内容还可以有: 
Last Modified :请求文档的最近修改时间。 
Expires :请求文档的过期时间。 
Connect-length:文档数据的长度。 
WWW-authenricate:通知客户端需要的认证信息。  
Connect-encoding :说明有无使用压缩技术。 
Transfer-encoding :说明采用的编码变换类型。 

随着Internet的发展,下一代的HTTP协议HTTP-ng已经在酝酿之中,它将会提供更好的安全性、更快的速度,其改进要点为:模块化强、网络效率高、安全性更好、结构更简单。

HTTP协议的8种请求类型介绍的更多相关文章

  1. HTTP 协议的 8 种请求类型介绍

    HTTP 协议的 8 种请求类型介绍 HTTP 协议中共定义了八种方法或者叫“动作”来表明对 Request-URI 指定的资源的不同操作方式,具体介绍如下: OPTIONS:返回服务器针对特定资源所 ...

  2. HTTP协议八种请求类型介绍

    HTTP 协议中共定义了八种方法或者叫“动作”来表明对 Request-URI 指定的资源的不同操作方式,具体介绍如下: OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法.也可以利用向W ...

  3. http协议的八种请求类型

    GET:向特定的资源发出请求. POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件).数据被包含在请求体中.POST请求可能会导致新的资源的创建和/或已有资源的修改. OPTIONS: ...

  4. http 中定义的八种请求的介绍

    在http1.1协议中,共定义了8种可以向服务器发起的请求(这些请求也叫做方法或动作),本文对这八种请求做出简要的介绍: 1.PUT:put的本义是推送 这个请求的含义就是推送某个资源到服务器,相当于 ...

  5. RabbitMQ四种交换机类型介绍

    RabbitMQ  原文地址: https://baijiahao.baidu.com/s?id=1577456875919174629&wfr=spider&for=pc 最新版本的 ...

  6. HTTP协议请求类型介绍

    HTTP协议中共定义了八种方法或者叫"动作"来表明对Request-URI指定的资源的不同操作方式,具体介绍如下: OPTIONS: 返回服务器针对特定资源所支持的HTTP请求方法 ...

  7. mysql分区表之二:MySQL的表的四种分区类型介绍

    一.什么是表分区 通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了.如:某用户表的记录超过了600万条,那么就可以根据入库日期将表分区,也可以根据所在地将表分区 ...

  8. java中常用的几种缓存类型介绍

    在平时的开发中会经常用到缓存,比如locache.redis等,但一直没有对缓存有过比较全面的总结.下面从什么是缓存.为什么使用缓存.缓存的分类以及对每种缓存的使用分别进行分析,从而对缓存有更深入的了 ...

  9. DHCP 协议的 8 种消息类型及功能服务器

    1) 主机发送 DHCP Discover 广播包在网络上寻找 DHCP 服务器: 单播数据包, 地址. 2) DHCP 服务器向主机发送 DHCP Offer 单播数据包,包含 IP 地址.MAC ...

随机推荐

  1. linux的文件权限与目录配置<----->第二章

    1.Linux文件属性    [   1  ]                  [   2  ] [    3    ]  [    4    ]  [ 5 ]             [ 6 ] ...

  2. 一.CPU,Mem过高怎么办 --这是个开始

    本身是名Java开发,在做了一段大数据的工作后,猛然间想对Java做个总结. 从未写过技术博客,一时不知如何开始,思虑后,暂且以自己喜爱的方式来开篇. 工作中遇到过CPU或内存过高的问题,解决步骤: ...

  3. gdb命令中查看地址之x命令

    可以使用examine命令(简写是x)来查看内存地址中的值.x命令的语法如下所示: x/<n/f/u> <addr> n.f.u是可选的参数. n是一个正整数,表示需要显示的内 ...

  4. Python学习——(1)Centos安装Flask

    一.环境 [root@localhost myproject]# cat /proc/version centos6.5 Linux version 2.6.32-642.11.1.el6.i686 ...

  5. 48. leetcode 105题 由树的前序序列和中序序列构建树结构

    leetcode 105题,由树的前序序列和中序序列构建树结构.详细解答参考<剑指offer>page56. 先序遍历结果的第一个节点为根节点,在中序遍历结果中找到根节点的位置.然后就可以 ...

  6. 切糕[HNOI2013]

    经过千辛万苦小A 得到了一块切糕,切糕的形状是长方体,小A 打算拦腰将切糕切成两半分给小B.出于美观考虑,小A 希望切面能尽量光滑且和谐.于是她找到你,希望你能帮她找出最好的切割方案. 出于简便考虑, ...

  7. Spring+SpringMVC+MyBatis+easyUI整合基础篇(四)代码简化

    点这里看实际效果! 账密:admin 123456   敲了一天的代码,有些烦,感觉前一篇文章写的太笼统了,哈哈哈.   本来呢,也就是刚开始写,所以很多细节都想不到,源码也放上来了,自己动动手应该也 ...

  8. Java集合框架Collections【List/Set】

    1.基本介绍: 集合就是存放对象的,他比数组好的一点就是他一开始不清楚自己长度 容器一般是分为很多种的,很多的容器在一起然后进过断的抽象和抽取就成了一个体系,我们称之为集合框架 我们看体系首先是看顶层 ...

  9. hdu--4148--Length of S(n)

    #include<iostream> #include<string> #include<cstring> void priTable(); using names ...

  10. 实现wpf的值转换器

    从数据库取出来的数据是1,2,3,4,5,不过要显示在控件上的,是1,2,3,4,5对应的string值,怎么办?wpf提供了很好的实现方法,那就是值转换器,我们需要做的是: 1.定义值转换类,继承I ...