post和get的区别

453 阅读3分钟

post和get的区别

先说说自己的理解吧!

get请求:常用于查询,参数拼接在url后面,规范:?xx==xx&xxx=xxx,所以携带字符只能是ascll,大小限制只有2048字节,不安全,因为可以直接手动在地址栏输入,会被浏览器缓存(在项目中遇到场景,获取用户信息,从第三方地址跳回,disk chche(200)强缓存)

post请求:常用于提交数据,引发指定资源更新。携带字符格式,大小都没有要求,数据存于body中,安全,无缓存。

最佳答案:

语义区别:

  • GET:获取资源,常用于读取或下载资源
  • POST:用于将实体(body)提交到指定的资源,通常导致状态或服务器上的副作用的更改

应用场景的区别:

以下场景使用GET:

  • 交互更像是一个问题(即,它是一个安全操作,例如查询,读取操作或查找)
  • 请求中的URL可以被手动输入
  • 请求中的URL可以被存在书签中,或者历史里,或者快速拨号里面,或者分享别人
  • 请求中的URL是可以被搜索引擎收录的
  • 带云压缩的浏览器,比如Opera mini/Turbo 2。只有GET才能在服务器端被预取的
  • 请求中的URL可以被缓存

以下场景使用POST

  • 交互更像是一个命令或者,交互以用户可以感知的方式改变资源的状态(例如:订阅服务),或者用户应对交互的结果负责

请求URL,请求头,请求体的区别

  • get

    • URL的最大长度是2048字符,只允许ASCII字符
    • W3C的标准GET不用body,RFC的标准GET可以携带body
  • post

    • URL数据长度无限制

GET 与 POST 的本质区别有两点

  • 请求行不同:

    • GET:GET /uri HTTP/1.1
    • POST:POST /uri HTTP/1.1
  • 对服务器资源的操作不同:

    • GET:表示从服务器获取资源
    • POST:向指定的服务器资源提交数据(通常导致状态或服务器上的副作用的更改)
场景GETPOST
后退按钮/刷新无害数据会被重新提交
书签可收藏为书签不可收藏为书签
缓存能被缓存不能缓存
编码类型application/x-www-form-urlencodedapplication/x-www-form-urlencoded 或 multipart/form-data。
历史参数保留在浏览器历史中参数不会保存在浏览器历史中
对数据长度的限制URL 的最大长度是 2048 个字符无限制
对数据类型的限制只允许 ASCII 字符没有限制。也允许二进制数据
安全性安全性较差,因为所发送的数据是 URL 的一部分。更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中
可见性数据在 URL 中对所有人都是可见的更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中

ps: RFC 中 100 Continue 并不是 POST Method 中的一个步骤,并且也不仅仅只能用于 POST method