Get 和 Post 的区别

post 和 get 都是 HTTP 与服务器交互的方法。

一般在浏览器中输入网址访问资源都是通过 get 方式;在 form 表单中,可以通过 method 指定提交方式为 get 或者 post,默认为get 提交。注:用 post 必须要到 form表单中。

一个 url 地址,它用于描述一个网络上的资源, HTTP 中有4中与服务器的交互方法:get,post,put,delete 分别对应着对这个资源的查 ,改 ,增 ,删 4个操作。也就是,get一般用于查询/获取资源信息,post 用于更新资源信息,这应是二者最本质的区别。

根据 HTTP 规范,get 应该是安全的幂等的 。所谓安全的意味着该操作用于获取信息而非修改信息,不会影响资源的状态;所谓幂等的意味着对同一URL的多个请求应该返回同样的结果。

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

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

HTTP 请求的 get 方法示例:

    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

HTTP 请求的 post 方法示例:

    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

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

下面列举一下 get 和 post 的区别:

(1)url 格式

get 提交:提交的数据会附在 url 之后,就是把数据放置在请求行(request line)中,以?分割 url 和传输数据,多个参数用 & 连接,例如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0 %E5%A5%BD,url 的编码格式采用的是ASCII 码,而不是 Unicode,这也就是说你不能在 url 中包含任何非 ASCII 字符,所有非ASCII字符均需要编码再传输。
post 提交:提交的数据不会显示在 url 中,而是放置在是 HTTP包 的包体中,上面示例中空行后的就是实际的传输数据。

实际上,以上区分并不是 HTTP 的规定,不是说 post 数据就要放在 body 中,get 数据就一定要放在 url 中。此等说法只是 HTML标准对 HTTP 协议的用法的约定。

(2)传输数据大小
首先声明:HTTP 协议没有对传输的数据大小进行限制,HTTP协议规范也没有对 url长度进行限制。但在实际开发中:
get:特定浏览器和服务器对 url 长度有限制,例如 IE 对URL长度的限制是2083字节(2K+35),对于其他浏览器,理论上没有长度限制,其限制取决于操作系统的支持。
post:由于不是通过 url 传值,理论上数据不受限,但实际各个 web 服务器会规定对 post 提交数据大小进行限制。

(3)安全性

post 的安全性要比 get 的高。比如:通过 get 提交数据,用户名和密码将明文出现在 url 上,因为登录页面有可能被浏览器缓存, 其他人查看浏览器的历史纪录,就可以拿到你的账号和密码了。除此之外,使用 get 提交数据还可能会造成 Cross-site request forgery 攻击。

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

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>

常用的状态码:

    ◆200 (OK): 找到了该资源,并且一切正常。
    ◆304 (NOT MODIFIED): 该资源在上次请求之后没有任何修改。这通常用于浏览器的缓存机制。
    ◆401 (UNAUTHORIZED): 客户端无权访问该资源。这通常会使得浏览器要求用户输入用户名和密码,以登录到服务器。
    ◆403 (FORBIDDEN): 客户端未能获得授权。这通常是在401之后输入了不正确的用户名或密码。
    ◆404 (NOT FOUND): 在指定的位置不存在所申请的资源。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值