博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HTTP POST和GET的区别
阅读量:5167 次
发布时间:2019-06-13

本文共 6163 字,大约阅读时间需要 20 分钟。

 
 
转载自
HTTP请求(GET与POST区别)和响应

http://www.blogjava.net/honeybee/articles/164008.html


HTTP有两部分组成:请求与响应,下面分别整理。

一.HTTP请求

1HTTP请求格式:

<request line>

<headers>

<blank line>

[<request-body>]

HTTP请求中,第一行必须是一个请求行(request line),用来说明请求类型、要访问的资源以及使用的HTTP版本。紧接着是一个首部(header)小节,用来说明服务器要使用的附加信息。在首部之后是一个空行,再此之后可以添加任意的其他数据[称之为主体(body]

2GETPOST区别

HTTP定义了与服务器交互的不同方法,最基本的方法是GETPOSTAjax开发,关心的只有GET请求和POST请求)。

GETPOST方法有以下区别:

(1)  在客户端,Get方式在通过URL提交数据,数据URL中可以看到;POST方式,数据放置在HTML HEADER内提交。

(2)  GET方式提交的数据最多只能有1024字节,而POST则没有此限制。

(3)  安全性问题。正如在(1)中提到,使用Get的时候,参数会显示在地址栏上,而Post不会。所以,如果这些数据是中文数据而且是非敏感数据,那么使用get;如果用户输入的数据不是中文字符而且包含敏感数据,那么还是使用post为好。

(4)  安全的和幂等的。所谓安全的意味着该操作用于获取信息而非修改信息。幂等的意味着对同一URL的多个请求应该返回同样的结果。完整的定义并不像看起来那样严格。换句话说,GET请求一般不应产生副作用。从根本上讲,其目标是当用户打开一个链接时,她可以确信从自身的角度来看没有改变资源。比如,新闻站点的头版不断更新。虽然第二次请求会返回不同的一批新闻,该操作仍然被认为是安全的和幂等的,因为它总是返回当前的新闻。反之亦然。POST请求就不那么轻松了。POST表示可能改变服务器上的资源的请求。仍然以新闻站点为例,读者对文章的注解应该通过POST请求实现,因为在注解提交之后站点已经不同了(比方说文章下面出现一条注解)。



GET与POST方法实例:


GET /books/?name=Professional%20Ajax HTTP/1.1

Host: www.wrox.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)

Gecko/20050225 Firefox/1.0.1

Connection: Keep-Alive




POST / HTTP/1.1

Host: www.wrox.com

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)

Gecko/20050225 Firefox/1.0.1

Content-Type: application/x-www-form-urlencoded

Content-Length: 40

Connection: Keep-Alive

     (----此处空一行----)

name=Professional%20Ajax&publisher=Wiley







  3.表单提交中get和post方式的区别归纳如下几点:


(1)get是从服务器上获取数据,post是向服务器传送数据。


(2)对于表单的提交方式,在服务器端只能用Request.QueryString来获取Get方式提交来的数据,用Post方式提交的数据只能用Request.Form来获取。


(3)一般来说,尽量避免使用Get方式提交表单,因为有可能会导致安全问题。比如说在登陆表单中用Get方式,用户输入的用户名和密码将在地址栏中暴露无遗。但是在分页程序中,用Get方式就比用Post好。



二.HTTP响应

1.HTTP响应格式:


<status line>


<headers>


<blank line>


[<response-body>]


在响应中唯一真正的区别在于第一行中用状态信息代替了请求信息。状态行(status line)通过提供一个状态码来说明所请求的资源情况。

    

       HTTP响应实例:


HTTP/1.1 200 OK

Date: Sat, 31 Dec 2005 23:59:59 GMT

Content-Type: text/html;charset=ISO-8859-1

Content-Length: 122

<html>

<head>

<title>Wrox Homepage</title>

</head>

<body>

<!-- body goes here -->

</body>

</html>

2.最常用的状态码有:


◆200 (OK): 找到了该资源,并且一切正常。

◆304 (NOT MODIFIED): 该资源在上次请求之后没有任何修改。这通常用于浏览器的缓存机制。

◆401 (UNAUTHORIZED): 客户端无权访问该资源。这通常会使得浏览器要求用户输入用户名和密码,以登录到服务器。

◆403 (FORBIDDEN): 客户端未能获得授权。这通常是在401之后输入了不正确的用户名或密码。

◆404 (NOT FOUND): 在指定的位置不存在所申请的资源。






http://blog.csdn.net/wangyihust/archive/2005/03/11/317473.aspx


Http get,post,soap协议都是在http上运行的

1)get:请求参数是作为一个key/value对的序列(查询字符串)附加到URL上的

        查询字符串的长度受到web浏览器和web服务器的限制(如IE最多支持2048个字符),不适合传输大型数据集

        同时,它很不安全

2)post:请求参数是在http标题的一个不同部分(名为entity body)传输的,这一部分用来传输表单信息,因此必须将

      Content-type设置为:application/x-www-form-urlencoded。

         post设计用来支持web窗体上的用户字段,其参数也是作为key/value对传输。

         但是:它不支持复杂数据类型,因为post没有定义传输数据结构的语义和规则。

3)soap:是http post的一个专用版本,遵循一种特殊的xml消息格式

        Content-type设置为: text/xml

        任何数据都可以xml化

      

      

      

      

      

      

      

      

http://www.cppblog.com/woaidongmao/archive/2008/05/29/51476.aspx      

      

HTTP POST和GET的区别


1、HTTP 只有POST和GET 两种命令模式;


2、POST是被设计用来向上放东西的,而GET是被设计用来从服务器取东西的,GET也能够向服务器传送较少的数据,而Get之所以也能传送数据,只是用来设计告诉服务器,你到底需要什么样的数据.POST的信息作为HTTP 请求的内容,而GET是在HTTP 头部传输的;


3、POST与GET在HTTP 中传送的方式不同,GET的参数是在HTTP 的头部传送的,而Post的数据则是在HTTP 请求的内容里传送;


4、POST传输数据时,不需要在URL中显示出来,而GET方法要在URL中显示;


5、 GET方法由于受到URL长度的限制,只能传递大约1024字节;POST传输的数据量大,可以达到2M,而根据微软方面的说法,微软对用 Request.Form() 可接收的最大数据有限制,IIS 4 中为 80 KB 字节,IIS 5 中为 100 KB 字节;


6、SOAP是依赖于HTTP POST模式实现的;




例子:


HTTP GET


发送


GET /DEMOWebServices2.8/Service.asmx/CancelOrder?UserID=string&PWD=string&OrderConfirmation=string HTTP/1.1

Host: api.efxnow.com


回复


HTTP/1.1 200 OK

Content-Type: text/xml; charset=utf-8

Content-Length: length


<?xml version="1.0" encoding="utf-8"?>

<objPlaceOrderResponse xmlns="https://api.efxnow.com/webservices2.3">

  <Success>boolean</Success>

  <ErrorDescription>string</ErrorDescription>

  <ErrorNumber>int</ErrorNumber>

  <CustomerOrderReference>long</CustomerOrderReference>

  <OrderConfirmation>string</OrderConfirmation>

  <CustomerDealRef>string</CustomerDealRef>

</objPlaceOrderResponse>




HTTP POST


发送


POST /DEMOWebServices2.8/Service.asmx/CancelOrder HTTP/1.1

Host: api.efxnow.com

Content-Type: application/x-www-form-urlencoded

Content-Length: length


UserID=string&PWD=string&OrderConfirmation=string


回复


HTTP/1.1 200 OK

Content-Type: text/xml; charset=utf-8

Content-Length: length


<?xml version="1.0" encoding="utf-8"?>

<objPlaceOrderResponse xmlns="https://api.efxnow.com/webservices2.3">

  <Success>boolean</Success>

  <ErrorDescription>string</ErrorDescription>

  <ErrorNumber>int</ErrorNumber>

  <CustomerOrderReference>long</CustomerOrderReference>

  <OrderConfirmation>string</OrderConfirmation>

  <CustomerDealRef>string</CustomerDealRef>

</objPlaceOrderResponse>




SOAP 1.2


发送


POST /DEMOWebServices2.8/Service.asmx HTTP/1.1

Host: api.efxnow.com

Content-Type: application/soap+xml; charset=utf-8

Content-Length: length


<?xml version="1.0" encoding="utf-8"?>

<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">

  <soap12:Body>

    <CancelOrder xmlns="https://api.efxnow.com/webservices2.3">

      <UserID>string</UserID>

      <PWD>string</PWD>

      <OrderConfirmation>string</OrderConfirmation>

    </CancelOrder>

  </soap12:Body>

</soap12:Envelope>


回复


HTTP/1.1 200 OK

Content-Type: application/soap+xml; charset=utf-8

Content-Length: length


<?xml version="1.0" encoding="utf-8"?>

<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">

  <soap12:Body>

    <CancelOrderResponse xmlns="https://api.efxnow.com/webservices2.3">

      <CancelOrderResult>

        <Success>boolean</Success>

        <ErrorDescription>string</ErrorDescription>

        <ErrorNumber>int</ErrorNumber>

        <CustomerOrderReference>long</CustomerOrderReference>

        <OrderConfirmation>string</OrderConfirmation>

        <CustomerDealRef>string</CustomerDealRef>

      </CancelOrderResult>

    </CancelOrderResponse>

  </soap12:Body>

</soap12:Envelope>        




参考文章:

http://www.blogjava.net/honeybee/articles/164008.html

http://www.cnblogs.com/stu-acer/archive/2006/08/28/488802.html

http://blog.csdn.net/wangyihust/archive/2005/03/11/317473.aspx

http://www.cppblog.com/woaidongmao/archive/2008/05/29/51476.aspx     

 

转载于:https://www.cnblogs.com/nevermorez/archive/2013/03/14/2958673.html

你可能感兴趣的文章
poj-2376 Cleaning Shifts (排序+贪心)
查看>>
mssql 创建触发器
查看>>
2.python数据结构的性能分析
查看>>
DataTables给表格绑定事件
查看>>
jquery操作select(取值,设置选中)
查看>>
图的遍历
查看>>
在Android中自定义捕获Application全局异常,可以替换掉系统的强制退出对话框(很有参考价值与实用价值)...
查看>>
C语言第三次博客作业---单层循环结构
查看>>
DevExpress 程序运行后 layoutView 卡片大小发生变化
查看>>
WPF DevExpress 中GridControl如何设置选中单元格的Style
查看>>
查看python库文档
查看>>
Python网络编程_抓取百度首页代码(注释详细)
查看>>
js动态插入标签代码(insertAdjacentHTML)
查看>>
1.开发准备
查看>>
POJ 1463 树型DP
查看>>
关于SubSonic3.0插件使用SubSonic.Query.Select查询时,字段类型为tinyint时列丢失问题的Bug修复...
查看>>
自动生成小学生四则运算(皮!)
查看>>
rsync 同步
查看>>
centos su命令
查看>>
CLR:基元类型、引用类型和值类型
查看>>