post与get

作者: zenggo | 来源:发表于2016-07-01 14:44 被阅读150次

    区别

    • get表达的是一种幂等的,纯粹的只读操作,即它除了返回结果不应该会产生其它副作用(如写数据库)。因此绝大部分get请求(通常超过90%)都直接被CDN缓存了,这能大大减少web服务器的负担。
    • 而post所表达的语义是非幂等的,可能进行增删改的操作,所以必须交由web服务器处理。
      注意它们只是表达上的不同,强调语义。用get来传输要插入的数据,用post来传输要查询的数据标识都是可以的,只要请求打到了服务器上,管你是post还是get,怎么处理是服务器的事

    post

    • 一个最简单的用户名密码表单提交通常会会发送post request,请求头是这样的:


      Paste_Image.png

    指明方法为post,还有实体头部信息包含请求体的内容长度与类型(x-www-form-urlencoded表示数据被编码为名称/值对,这是标准的编码格式。)。这是请求体:uname=&pwd=&sbt=%E6%8F%90%E4%BA%A4, 乱七八糟那部分就是‘提交’中文二字的utf-8编码。PS:若是传统表单按钮<input type="submit">提交,则会把提交按钮的value加入请求体。

    有时post请求的content-type并非form格式数据,还可以是json格式数据。例如$.ajax()可以指定

    $.ajax({
    ...
    contentType: "application/json; charset=utf-8",  dataType: "json",  
    data: JSON.stringify(obj)
    ...});
    

    此时请求体:{"uname":"","pwd":""} 。

    POST 是否比 GET 安全

    POST要比GET安全一点点。。。两者都是明文传送,但是GET的URL会被放在浏览器历史和WEB 服务器日志里面,query会被记录;而POST 发完基本就木有了。所以如果关键数据放在GET里面,被人偷窥了浏览器,或者WEB服务器被入侵日志被人倒去了,基本泄露可能性100%。而POST来说,日志没有记录,只要数据库服务器不被入侵,基本还是安全的。
    当然如果被抓了包,这一切都没有什么卵用,所以,HTTPS该用还是得用。

    使用准则

    • 可以重复的交互,比如取个数据,跳个页面, 用GET
    • 不可以重复的操作, 比如创建一个条目/修改一条记录, 用POST, 因为POST不能被缓存,所以浏览器不会多次提交。

    参考:post 相比get 有很多优点,为什么现在的HTTP通信中大多数请求还是使用get?

    相关文章

      网友评论

        本文标题:post与get

        本文链接:https://www.haomeiwen.com/subject/mwvfjttx.html