`

HTTP协议请求方式: 中GET、POST和HEAD的介绍

 
阅读更多
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已经在酝酿之中,它将会提供更好的安全性、更快的速度,其改进要点为:模块化强、网络效率高、安全性更好、结构更简单。

分享到:
评论

相关推荐

    Web应用安全:HTTP协议GET和POST的使用区别实验.docx

    ### Web应用安全:HTTP协议GET和POST的使用区别实验 #### 实验背景及目标 本实验旨在通过实际操作深入理解HTTP协议中POST方法的工作机制及其与GET方法的区别。实验将利用Firefox浏览器的Firebug插件以及Wireshark...

    Http协议内容总结 http协议包含哪些内容 Http协议的请求方法 Http协议实现的原理机制 get与post请求的区别

    通过以上分析,我们不仅了解了HTTP协议的基本结构和工作原理,还深入探讨了各种请求方法的特点及适用场景,以及GET与POST请求的关键差异。此外,还介绍了常见的HTTP状态码,这对于理解服务器与客户端之间的交互至关...

    模拟post、put、head、get、patch、link、lock等多种请求

    本文将深入探讨标题中提及的HTTP请求方法,包括POST、PUT、GET、HEAD、PATCH、LINK和LOCK,并结合描述中提到的跨平台支持,如Window、iOS和Linux,以及可能使用的工具——Postman。 1. **POST**:POST是最常见的...

    post_get_put等请求方法的区别

    在本文中,我们将深入探讨 HTTP 请求方法的差异,包括 GET、POST、PUT 等请求方法的特点和应用场景。 HTTP 请求方法概述 HTTP 请求方法是指客户端向服务器端发送的请求,以获取或修改服务器上的资源。常见的 HTTP ...

    Web应用安全:HTTP协议GET和POST的使用区别文本.docx

    GET和POST是HTTP协议中两种最常用的请求方法,它们各有特点,适用于不同的场景。 GET方法是HTTP中最常用的方法,主要用于获取资源信息。它是安全的,意味着执行GET请求不会改变服务器上的资源状态,只是单纯地获取...

    http.rar_HTTP ppt_HTTP协议_http://brow

    请求行包含请求方法(如GET、POST等)和请求URL,指明客户端想要做什么以及要访问的资源。例如,“GET /index.html HTTP/1.1”表示获取服务器根目录下的“index.html”文件。由于结构简洁,HTTP协议能够快速处理大量...

    httpclient用法,发送get和post请求,设置header

    httpclient的用法,发送get请求和post请求,设置header

    C#的HTTP协议中POST与GET的区别.pdf

    3. 缓存和历史记录:GET请求可被缓存和保存在浏览器历史记录中,POST请求不会。 4. 安全性:GET请求可能导致数据泄露,POST相对更安全。 5. 可预测性:GET请求是幂等的,多次请求结果相同;POST请求不是,多次提交...

    thinkPHP5.1框架路由::get、post请求简单用法示例

    本篇文章将深入介绍如何在ThinkPHP5.1中使用`get`和`post`请求,并通过实例说明其基本用法。 首先,让我们了解路由的基本概念。路由负责解析URL,将用户请求映射到特定的控制器和方法。在ThinkPHP5.1中,你可以通过...

    Web应用安全:HTTP方法.pptx

    HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。 HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法 1、HTTP请求的方法 HTTP方法 1、HTTP请求的方法 HTTP方法 2、GET和POST比较 GET ...

    HTTP协议详解(请求、响应、URL等)

    3. **支持多种请求方法**:HTTP协议支持多种请求方法,包括但不限于GET、POST、HEAD等,每种方法对应不同的操作行为。 4. **灵活的内容类型**:通过Content-Type头字段,HTTP可以支持多种不同类型的数据传输,如文本...

    HTTP协议详解(真的很经典)[归类].pdf

    请求方法常用的有 GET、HEAD、POST。 3. 灵活:HTTP 允许传输任意类型的数据对象。正在传输的类型由 Content-Type 加以标记。 4. 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并...

    Http/Https请求测试工具

    本篇文章将详细介绍如何使用"Http/Https请求测试工具"进行各种请求方式的测试,包括GET、POST、PUT和HEAD等,并探讨HTTP上传测试的相关知识点。 首先,GET请求是最常见的HTTP请求方法,用于从服务器获取资源。通过...

    HTTP-Server:可以处理 HEAD 和 GET 请求的多线程 HTTP1.1 服务器。 使用java实现

    在这个特定的案例中,我们讨论的是一个基于Java实现的HTTP Server,它能够处理两种主要的HTTP请求方法:GET和HEAD。这个服务器利用了Java的套接字编程技术来实现多线程处理,以提高性能和效率。 首先,让我们深入...

    groovy http请求

    - HEAD:类似于GET,但只返回响应头,不返回主体内容。 - OPTIONS:询问服务器支持哪些HTTP方法。 2. **使用HttpURLConnection**: Groovy可以利用Java内置的`java.net.HttpURLConnection`类来发送HTTP请求。...

    HTTP协议分析.pdf

    - HEAD:类似于GET,但只返回响应头,不返回资源内容。 - PUT:替换指定URI的资源。 - DELETE:删除指定URI的资源。 - TRACE:回显服务器接收到的请求,用于测试和诊断。 - OPTIONS:查询服务器支持的方法。 - ...

    HTTP协议详解,讲得很好

    HTTP URL(统一资源定位符)是HTTP协议中用于定位网络资源的关键元素,它包括协议类型(http)、主机名(host)、可选的端口号和请求路径(abs_path)。例如:`http://www.example.com:8080/path/to/resource`。 ...

    Socket实现发送HTTP请求

    最近花了些时间把这个东西完成了,哈哈~~ 用Socket实现了发送HTTP请求,源码已经打包了 ...std::string GetHead();//获取请求头 void SetHead(std::string strHead){m_strHead=strHead;}//设置请求头

    关于get.post delete put 的用法

    CONNECT 方法是 HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器的方法。CONNECT 方法用于建立一个到代理服务器的隧道,以便将请求转发到目标服务器。 HTTP 方法是 HTTP 协议的核心部分,每种方法都有其...

    HTTP的请求方法与返回状态码

    4. HEAD 请求:HEAD 和 GET 方法类似,不返回报文主体部分,一般用来测试资源标识符有效性或者资源更新的日期和时间。 5. DELETE 请求:删除文件。DELETE 请求用于删除服务器上的资源。 6. OPTIONS 请求:它用于获取...

Global site tag (gtag.js) - Google Analytics