Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HTTP GET和POST区别 #22

Open
hrpc opened this issue Feb 27, 2019 · 0 comments
Open

HTTP GET和POST区别 #22

hrpc opened this issue Feb 27, 2019 · 0 comments

Comments

@hrpc
Copy link
Owner

hrpc commented Feb 27, 2019

根据W3C的描述
有如下结果:

GET

  • 能被缓存,在不设置cache-control值为no-store的情况下
  • 通过URL传参,参数会保存在浏览器历史记录中
  • 由于浏览器对URL有长度限制,最大长度为2048个字符
  • 安全性比较低,参数都是通过url传的(这里的安全性要和之后要描述的安全性区别开)

POST

  • 不能被缓存
  • 参数不会出现在URL中,而是通过query string随着请求提交
  • 参数相对比较安全,不会保存在浏览器历史中
  • 对数据类型也没有限制

以上是W3C对post和get方法的部分摘录。

但是面试官很可能不仅仅想听到这些回答。深入研究一下,根据《HTTP权威指南》,我有了如下结论:

  • 幂等性
    幂等性指的是相同一个事务,不管是执行一次还是执行多次,得到的结果都相同,那么就可以说这个事务幂等的。
    实现者们可以认为,GET,HEAD,PUT,DELETE,TRACE和OPTIONS方法都是幂等的。
    根据HTTP标准,GET方式的请求是用来请求服务器发送资源;POST方式的请求是用来向服务器输入数据的。但是也存在GET方式的请求用来向服务器输入数据的,这就是实现的不同,没有按照标准来。重复提交GET请求得到的都是同一个数据,重复提交POST可能就会出现意想之外的结果。
    所以可以说GET方法是幂等的,POST方法是不幂等的。
  • 安全性
    安全性指的是所用的方法对服务器有无副作用。在符合HTTP标准的情况下,GET方式的请求对服务器是安全的,因为它只是用来从服务器获取数据而已,不会对服务器产生副作用;POST方式的请求对服务器是不安全的,指的是它会修改服务器数据,会对服务器产生副作用。副作用指的是在请求之外发生的别的事情,比如数据变更。
  • 可缓存性
    可缓存性和上面一致。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant