HTTP中get和post的区别

1.总体认识

Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。更多的方法参照下面图片。
HTTP中get和post的区别

2.基本介绍

  • Get, 它用于获取信息,注意,他只是获取、查询数据,也就是说它不会修改服务器上的数据,从这点来讲,它是数据安全的。
  • Post,它是可以向服务器发送修改请求,从而修改服务器的,比方说,我们要在论坛上回贴、以及现在我要写完一篇博客要发表,这就要用到Post了,当然它也是可以仅仅获取数据的。
  • Put,增加、放置数据,可以通过Get/Post来实现。用的不多。
  • Delete, 删除数据。可以通过Get/Post来实现。用的不多。

3.详细分析

(1) GET请求,请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数用&连接。URL的编码格式采用的是ASCII编码,而不是uniclde,即是说所有的非ASCII字符都要编码之后再传输。另外传输的数据如果是英文或数字,原样发送,否则进行BASE64编码,例如中文或其它字符。

例子:
例如我在必应上搜索了http中的get和post的区别,浏览器会反馈如下的网址
http://cn.bing.com/search?q=http%E4%B8%AD%E7%9A%84get%E5%92%8Cpost%E7%9A%84%E5%8C%BA%E5%88%AB&qs=n&form=QBLH&sp=-1&pq=http%E4%B8%AD%E7%9A%84get%E5%92%8Cpost%E7%9A%84%E5%8C%BA%E5%88%AB&sc=0-17&sk=&cvid=E3D3725C192C4405815F5AEB36094759

我发现的一个例外是我在QQ音乐首页上搜索了周杰伦,即向服务器发送了一个get请求,会发现请求数据会附加在URL之后,但是却以#分割URL和传输数据,希望有大神可以帮忙我解答一下。浏览器反馈的网址如下
https://y.qq.com/portal/search.html#page=1&searchid=1&remoteplace=txt.yqq.top&t=song&w=%E5%91%A8%E6%9D%B0%E4%BC%A6

(2) GET提交的数据比较少,最多1024B,因为GET数据是附在URL之后的,而URL则会受到不同环境的限制的,比如说IE对其限制为2K+35,而POST可以传送更多的数据(理论上是没有限制的,但一般也会受不同的环境,如浏览器、操作系统、服务器处理能力等限制,IIS4可支持80KB,IIS5可支持100KB)。

(3) Post的安全性要比Get高,因为Get时,参数数据是明文传输的,而且使用GET的话,可能造成Cross-site request forgery攻击。另外,在进行登录操作,通过GET请求,用户名和密码都会暴露再URL上,因为登录页面有可能被浏览器缓存以及其他人查看浏览器的历史记录的原因,此时的用户名和密码就很容易被他人拿到了。而POST数据则可以加密的,但GET的速度可能会快些。

4.HTTP对这些方法的响应

当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。
下面是常见的HTTP状态码:
200 - 请求成功
301 - 资源(网页等)被永久转移到其它URL
404 - 请求的资源(网页等)不存在
500 - 内部服务器错误

HTTP状态码分类

HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型:
HTTP中get和post的区别
详细的状态码列表请参考http://www.runoob.com/http/http-status-codes.html

更多关于这方面的内容的请参考:
https://blog.csdn.net/wangzhilife/article/details/12440089
https://blog.csdn.net/yipiankongbai/article/details/24025633