HTTP Methods: GET vs. POST

##HTTP是什么?
超文本传输协议(The Hypertext Transfer Protocol, HTTP)是为客户端(client)与服务器(server)之间的通信(communication)设计的。

HTTP是在客户端与服务器之间以请求-响应(request-response)方式工作的协议。

客户端可以是一个网页浏览器,服务器可以是一台提供web服务的主机上的某个应用程序。

例如:一个客户端(浏览器)向服务器提交了HTTP请求;服务器接着向客户端返回响应。响应中包含了请求的状态信息,同时可能包含所请求的资源。

##最常用的两种HTTP请求方式:GET和POST - GET: 向某个指定的资源申请数据
- POST: 向某个指定的资源提交需要处理的数据

##GET方式 注意,GET请求的查询字符串(name/value对)是包含在URL中发送的

/test/demo_form.asp?name1=value1&name2=value2

关于GET还需注意:

  • GET请求能被缓存
  • GET请求保存在浏览器的历史记录中
  • GET请求能被当作书签添加
  • GET请求永远不应用在处理敏感数据的场合
  • GET请求有长度限制
  • GET请求只应该用来获取数据

##POST方式 注意,POST请求的查询字符串(name/value对)是包含在HTTP消息体中发送的

POST /test/demo_form.asp HTTP/1.1
Host: w3schools.com
name1=value1&name2=value2

关于POST还需注意:

  • POST请求不能被缓存
  • POST请求不保存在浏览器的历史记录中
  • POST请求不能被添作标签
  • POST请求没有长度限制

##GET与POST对比

GET POST
返回/刷新按钮 无影响 数据会被再次提交(浏览器应该会警示用户这一点)
书签 能被添作书签 不能被添作书签
缓存 能被缓存 不能缓存
编码方式 application/x-www-form-urlencoded application/x-www-form-urlencoded或者multipart/form-data。
历史记录 参数保存在浏览器记录中 参数不保存
数据长度限制 在传输数据时,GET方式会将数据添加到URL中,而URL的最大长度是2048个字符。 无限制
数据类型限制 只允许ASCII字符 无限制。二进制数据也是合法的。
安全 与POST相比,更不安全,因为GET方式数据是URL的一部分。永远不要用GET来发送密码之类的敏感信息! 相对GET更安全一点,因为数据不会存储在浏览器历史记录或者服务器日志中。
可见性 每个人都能看见URL中的数据 数据不在URL中显示

##原文链接 HTTP Methods: GET vs. POST