HTML中Get和Post请求的简单了解

来源:互联网 发布:sai for mac中文版 编辑:程序博客网 时间:2024/06/13 06:20

http://blog.csdn.net/gideal_wang/article/details/4316691


一 Http与服务器交互的不同方法


一般在浏览器中输入网址访问资源都是通过GET方式;在FORM提交中可以通过Method指定提交方式为GET或者POST, 默认为GET提交

Http定义了与服务器交互的不同方法最基本的方法有4分别是GET, POST, PUT, DELETE.

URL全称是资源描述符,我们可以这样认 为一个URL地址它用于描述一个网络上的资源HTTP中的GET, POST, PUT, DELETE就对应着对这个资源的查4个操作到这里大家应该有个大概的了解了, GET一般用于获取/查询 资源信息POST一般用于更新资源信息(个人认为这是GETPOST的本质区别也是协议设计者的本意其它区别都是具体表现形式的差异).


. GetPost的区别


1HTTP请求格式


<request line>

<headers>

<blank line>

[<request-body>]

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


2. GETPOST方法实例


GET /books/?sex=man&name=Professional 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. 区别说明


3.1 GET提交请求的数据会附在URL之后(就是把数据放置在HTTP协议头中), ?分割URL和传输数据多个参数用&连接. 例如: login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD, 如果数据是英文字母/数字原样发送如果是空格转换为+, 如果是中文/其他字符则直接把字符串用BASE64加密得出如: %E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII.

3.2 POST提交把提交的数据放置在是HTTP包的包体中2中的name=Professional%20Ajax&publisher=Wiley就是实际的传输数据

因此, GET提交的数据会在地址栏中显示出来POST提交地址栏不会改变.

3.3 传输数据的大小: HTTP协议没有对传输的数据大小进行限制, HTTP协议规范也没有对URL长度进行限制

而在实际开发中存在的限制主要有

GET: 特定浏览器和服务器对URL长度有限制例如IEURL长度的限制是2083字节(2K+35). 对于其他浏览器Netscape, FireFox理论上没有长度限制其限制取决于操作系统的支持所以对于GET提交时传输数据就会受到URL长度的限制.

POST: 由于不是通过URL传值理论上数据不受限但实际各个WEB服务器会规定对post提交数据大小进行限制, Apache, IIS6都有各自的配置.

3.4 安全性

POST的安全性要比GET的安全性高通过GET提交数据用户名和密码将明文出现在URL除此之外,使用GET提交数据还可能会造成Cross-site request forgery攻击

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

A. get: 请求参数是作为一个key/value对的序列(查询字符串)附加到URL上的查询字符串的长度受到web浏览器和web服务器的限制(如IE最多支持2048个字符),不适合传输大型数据集同时,它很不安全

B. post: 请求参数是在http标题的一个不同部分(名为entity body)传输的这一部分用来传输表单信息因此必须将Content-type设置为:application/x-www-form-urlencoded. post设计用来支持web窗体上的用户字段其参数也是作为key/value对传输但是它不支持复杂数据类型因为post没有定义传输数据结构的语义和规则.

C. soap: http post的一个专用版本遵循一种特殊的xml消息格式Content-type设置为text/xml, 任何数据都可以xml


. 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>

<hhead>

<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): 在指定的位置不存在所申请的资源.

 

四 完整示例


1. 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>




2. 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>



3. 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>

原创粉丝点击