一句话说透计算机网络里面的Get和Post的区别

238 阅读2分钟

一句话总结:
GET 像明信片,内容谁都能看;POST 像信封,内容藏里面,但别以为绝对安全——快递员(网络)还是能拆开!


一、核心区别表

区别点GETPOST
数据位置URL 参数(?name=张三请求体(body)内藏
安全性明文暴露,别传密码!相对隐蔽,但未加密仍可能泄露
数据长度受 URL 长度限制(约2048字符)理论上无限制
缓存会被浏览器缓存默认不缓存
幂等性幂等(多次请求结果相同)非幂等(可能多次提交订单)
历史记录保留在浏览器历史中不保留

二、通俗比喻

1. GET:公开的快递单

  • 场景:你想查快递到哪儿了,直接问快递公司:“单号123到哪了?”(参数在URL里)。

  • 特点

    • 快递单贴在包裹外面,谁都能看到单号(参数暴露)。
    • 查快递不影响包裹内容(只读操作)。

2. POST:封口的信封

  • 场景:你要寄一封投诉信,把信纸塞进信封里(数据在body里)。

  • 特点

    • 信封外面只写地址(URL),内容在内部(相对隐蔽)。
    • 寄信可能触发动作(如退款、删帖)。

三、常见问题解答

1. 为什么说GET不安全?

  • URL暴露参数:浏览器历史、服务器日志、网络嗅探都可能泄露数据。

  • 示例

    http://example.com/login?username=张三&password=123456  # 作大死!  
    

2. POST真的安全吗?

  • 不!  只是数据不在URL显示,但未加密(HTTP)时,抓包工具(如Wireshark)仍可截获。
  • 安全建议:无论GET/POST,敏感数据必须用HTTPS加密传输。

3. 什么时候用GET?什么时候用POST?

  • 用GET

    • 获取数据(如搜索、翻页)。
    • 参数少且非敏感(如过滤条件 ?category=books)。
  • 用POST

    • 提交数据(如登录、注册、支付)。
    • 参数多或含敏感信息(如上传文件、提交表单)。

4. GET能否传文件?

  • 能,但别用!

    • 通过URL传Base64编码的图片:

      http://example.com/upload?image=Base64编码的一串乱码  
      
    • 缺点:URL长度限制、性能差、难维护。


四、代码示例对比

GET请求(查天气)

GET /weather?city=北京&date=2023-10-01 HTTP/1.1  
Host: example.com  

POST请求(登录)

POST /login HTTP/1.1  
Host: example.com  
Content-Type: application/x-www-form-urlencoded  

username=张三&password=123456  

五、高级区别(幂等性与副作用)

  • 幂等性

    • GET:多次请求同一URL效果相同(如刷新页面)。
    • POST:每次提交可能产生新结果(如重复提交订单)。
  • 副作用

    • GET:理想情况下只读,不修改服务器数据(实际取决于后端实现)。
    • POST:通常用于修改数据(如新增、更新、删除)。

总结口诀

“GET参数在地址栏,明文暴露不安全。
POST数据藏体内,上传提交更优先。
幂等缓存是GET,副作用大用POST。
敏感信息必加密,HTTPS保平安!”