`

HTTP协议的几种请求方法

 
阅读更多

    本文转自http://blog.chinaunix.net/uid-21778123-id-1815443.html

【问题的引入】
 以前知道HTTP有GET和POST两种请求方法,并且都见过,但印象里两者差不多,可以混着用。最近要进一步研究这个问题,才发现原来的想法不对。
 不对有两点:1,GET和POST区别很大; 2,HTTP有不止这两种请求方法。

【GET和POST的区别】
 首先要明白,这两者区别很大,数据在传输和处理的过程也不一样,程序设计者必须完全明白其区别,才能设计出合理的web程序。以下内容参考了文章GET和POST的本质区别是什么?

(1)使用范围的区别

 使用GET时,form中的数据集(如input框的value)将被编码到URL中,作为URL的一部分。而使用POST时,form中的数据集则被编码到http协议的header中,构造成消息发送。在使用上,当且仅当请求是幂等(请求任意次都返回同样的结果)时使用GET,而当请求会改变服务器数据或状态时使用POST。当程序设计人员正确的使用GET,POST时,浏览器会给出更好的缓存配合,使响应速度更快。

(2)在form提交阶段的差别:

form提交的第一步是创建数据集,并根据 ENCTYPE 指定的类型值对数据集进行编码。 ENCTYPE 有两个值:multipart/form-data,application/x-www-form-urlencoded(默认值)。form提交的第二步是进行数据传输。对于GET方法,数据集使用application/x-www-form-urlencoded编码;而对于POST方法,数据集的 ENCTYPE 可以指定。

application/x-www-form-urlencoded对form数据集的编码规则:(1)如果是字母或数字,则直接使用其ascii码的十六进制。(2)对于非字母也非数字的字符,则不仅使用其ascii码的十六进制,还要在前面加上“%”。比如“\”,它的ascii码是92,92的十六进制是5c,所以“\”的urlencoded编码就是%5c。相应的解码函数(转载)如下:

/**
* 用C语言实现URL解密
* QQ:339534039
* 日期:2006.11.29
*/

void urldecode(char *p)
{
register i=0;
while(*(p+i))
{
   if ((*p=*(p+i)) == '%')
   {
    *p=*(p+i+1) >= 'A' ? ((*(p+i+1) & 0XDF) - 'A') + 10 : (*(p+i+1)- '0');
    *p=(*p) * 16;
    *p+=*(p+i+2) >= 'A' ? ((*(p+i+2) & 0XDF) - 'A') + 10 :(*(p+i+2) - '0');
    i+=2;
   }
   else if (*(p+i)=='+')
   {
    *p=' ';
   }
   p++;
}
*p='\0';
}

 

(3)服务器端处理差别:

       原则上,处理GET和POST请求是没有分别的。但由于数据通过不同的方法编码,需要有不同的解码机制。所以,方法变化将导致处理请求的代码变化。比如对于cgi,处理GET时通过环境变量获得参数,处理POST请求时则通过标准输入(stdin) 获得数据。

(4)实际使用经验的总结:

       1、get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。

       2、对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。两种方式的参数都可以用Request来获得。

       3、get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。

       4、get安全性非常低,post安全性较高。

       5、<form method="get" action="a.asp?b=b">跟<form method="get" action="a.asp">是一样的,也就是说,action页面后边带的参数列表会被忽视;而<form method="post" action="a.asp?b=b">跟<form method="post" action="a.asp">是不一样的。


【HTTP的各种请求方法】

       以下内容引自:http://blog.chinaunix.net/u2/82392/showart_1724853.html

       客户程序向服务器发送的请求可以有不同的类型,这样服务器可以根据不同的请求类型进行不同的处理。在HTTP1.0中,定义了三种最基本的请求类 型,GET、POST和HEAD,这些请求方法的实现方式均与上例相同,客户程序用大写指令将请求发送给服务器,后面跟随具体的数据。

       其中,HEAD请求在客户程序和服务器之间进行交流,而不会返回具体的文档。当使用GET和POST方法时,服务器最后都将结果文档返回给客户程序,浏览器将 刷新显示。而HEAD请求则不同,它仅仅交流一些内部数据,这些数据不会影响浏览的过程。因此HEAD方法通常不单独使用,而是和其他的请求方法一起起到 辅助作用。一些搜寻引擎使用的自动搜索机器人使用这个方法来获得网页的标志信息,或者进行安全认证时,使用这个方法来传递认证信息。

       除了这三种最常见的访问方法之外,在HTTP1.1中还定义了更多的访问方法类型,如PUT,用于将网页放置到正确位置,DELETE用于删除相关文档 等。这些方法并不常用,因而大部分Web服务器软件并没有实现他们。然而对于特定场合他们还是非常有用的,例如使用软件编辑网页时,网页编辑器可以使用这 些方法,管理不同的网页。
       如果服务器不支持客户发送的请求方法,服务器将返回错误并立即关闭连接。
分享到:
评论

相关推荐

    http协议请求响应详解

    HTTP(HyperText Transfer Protocol),即超文本传输协议,是互联网上应用最为广泛的一种网络协议。它属于TCP/IP协议族的应用层,主要用于规范Web浏览器(客户端)与Web服务器之间交互数据的方式。 #### 二、...

    http协议的详细文档

    - **HTTP方法**定义了客户端希望服务器执行的动作类型,例如GET用于请求获取资源,POST用于提交数据。 - **统一资源标识符**(Uniform Resource Identifier, URI)用于标识互联网上的资源位置。 - **数据表示与...

    认清http协议本质

    2. HTTP方法:HTTP定义了多种请求方法,常见的有GET(获取资源)、POST(提交数据)、PUT(更新资源)、DELETE(删除资源)等。GET是最常用的方法,用于获取服务器上的资源;POST常用于提交表单数据,创建新的资源。...

    C++实现HTTP请求

    在IT行业中,网络通信是软件开发的一个重要领域,而HTTP(超文本传输协议)作为互联网上应用最广泛的一种网络协议,被广泛应用于网页浏览、数据传输等场景。本篇文章将详细探讨如何使用C++来实现HTTP的POST和GET请求...

    ios开发 HTTP请求方法

    对于POST请求,可以使用`dataTaskWithRequest:completionHandler:`,先创建一个`NSMutableURLRequest`,设置HTTP方法为`POST`,添加请求体,再发起任务。 6. **请求头**: HTTP请求头包含了关于请求的重要信息,如`...

    c#使用Socket发送HTTP/HTTPS请求的实现代码

    C#中使用Socket发送HTTP/HTTPS请求是一种高效的方法,特别是在需要自定义HTTP封包或对HTTP请求进行深入控制时。本文主要介绍了如何使用C#的Socket类来发送HTTP/HTTPS请求,并对相关的知识点进行了详细的解释。 ...

    http请求方法.docx

    接下来,我们将详细探讨HTTP协议中常见的几种请求方法及其应用场景,并结合具体示例来加深理解。 #### 1. GET 方法 **定义**:GET 方法是最常用的一种请求方法,用于从服务器获取资源。通常情况下,GET 请求的参数...

    http请求响应公共方法

    RESTful是一种软件架构风格,用于设计网络应用程序,它强调通过HTTP方法来完成资源的操作。例如,GET用于获取资源,POST用于创建资源,PUT用于更新资源,DELETE用于删除资源。RESTful接口设计使得API更加简洁、清晰...

    请求的几种情况.txt

    本篇文章将深入解析给定文件中的几种请求情况,包括GET与POST请求、图片请求,以及它们在Servlet环境下的具体应用。 ### GET请求解析 #### 一般格式与特点 GET请求通常用于从服务器检索数据,数据会附在URL之后,...

    01HTTP请求方法1

    在 HTTP 中,请求方法是向服务器发送请求时所采用的不同操作类型,主要有以下几种: 1. GET 方法:GET 用于请求访问已经被URI(统一资源标识符)识别的资源。通过GET方式发送的数据会附加在URL后面,这种方式的数据...

    http请求方法的概述及应用.pdf

    下面详细介绍几种常用的HTTP请求方法及其应用场景: 1. **GET方法**: - **概述**:用于请求访问已被URI(统一资源标识符)识别的资源。GET请求的参数会附加在URL后面,以“?”分隔URL和传输数据,参数之间以“&”...

    基于STM32F103单片机,配合HTTP协议上传数据到服务器

    【基于STM32F103单片机,配合HTTP协议上传数据到服务器】的知识点主要涵盖以下几个方面: 1. **STM32F103单片机**:STM32是意法半导体(STMicroelectronics)推出的一种基于ARM Cortex-M3内核的微控制器系列。STM32...

    http请求方法开发教程.docx

    以下将详细介绍几种常见的HTTP请求方法: #### 三、GET方法 - **用途**:从服务器请求资源。 - **特点**: - 请求参数包含在URL中,不包含请求体。 - 一般用于请求数据而不是修改数据。 - **示例**: ```plain...

    GB28181协议常见几种信令流程

    ### GB28181协议常见几种信令流程详解 #### 一、会话/媒体流通道 在GB28181协议中,为了确保视频传输与控制的有效性,通常需要建立两种类型的通道:**会话通道**与**媒体流通道**。 - **会话通道**主要用于设备间...

    Demo HTTP请求工具

    GET和POST是HTTP协议中最常见的两种请求方法: 1. GET请求:GET是最基础的HTTP请求方式,通常用于获取资源。它将数据附在URL后面,可以被浏览器缓存,并且会被记录在浏览器的历史记录中。GET请求的参数限制在URL...

    Http请求接口方法封装及Demo

    在IT行业中,网络通信是应用程序之间交互的重要方式,而HTTP(超文本传输协议)作为互联网上应用最广泛的一种网络协议,扮演着至关重要的角色。本主题聚焦于如何封装HTTP请求接口,以简化调用过程,并提供一个具体的...

    HTTP协议详解

    此外,还有其他几种不那么常用的请求方法,如PUT(更新资源)、DELETE(删除资源)等。 #### HTTP版本发展 HTTP协议经历了多个版本的发展,主要包括: - **HTTP/0.9**:最初的HTTP版本,功能非常有限,仅支持GET...

    http协议基础.doc

    - **请求行**:包含请求方法(如GET、POST等)、请求的URI(统一资源标识符)和HTTP协议版本。 - **请求头**:包含了与请求相关的元信息,如客户端信息、认证信息等。 - **实体头**:用于描述请求消息体的信息,...

    HTTP协议详解.pdf

    * 请求行(Request Line):指明了请求的方法、资源的 URL 和协议版本。 * 请求头(Request Header):包含了客户端的一些信息,如用户代理、语言、Cookies 等。 * 请求体(Request Body):包含了客户端发送给...

Global site tag (gtag.js) - Google Analytics