HTTP篇-----Get和Post

一、Get和Post的区别

Get的语义是从服务器获取指定的资源,这个资源可以是静态的文本、页面、图片和视频等。

他的参数一般位于URL中,URL规定只能支持ASCII,所以Get字符只允许ASCII字符。

Post的语义是根据请求负荷(报文body)对指定的资源做出处理,具体处理方式视资源类型不同。

Post请求携带数据的位置一般是写在报文body中,body中的数据可以任意格式的数据,只要客户端和服务器端协商好,且不会做出大小限制。

二、安全和等幂的概念

安全:指请求方法不会破坏服务器的资源;

等幂:多次执行相同的操作,结果都是相同的。

从这个角度看,
Get方法都是安全且等幂的,因为Get是只读操作,无论操作多少次,服务器的数据都是安全的,且结果不会有变化。

所以可对Get请求的数据做缓存,这个缓存可以做到浏览器本身,也可以做到代理服务器上,浏览器中Get请求可以保存为书签。

Post是**【新增或提交数据】的操作,会修改服务器资源, 所以是不安全的**,且多次提交会创建多个资源,所以不是等幂的

so,浏览器不会缓存Post的请求,也不能把Post请求保存为书签。

Get请求示例:

在这里插入图片描述
请求行:

GET /search/users?q=JakeWharton HTTP/1.1

URL为 /search/users?q=JakeWharton,协议为HTTP1.1。

请求行下面均为请求头部,可以看到host为api.github.com,连接方式为长连接。

该例子是不存在请求数据的。

Post请求示例:

在这里插入图片描述Post请求中,URL为空,协议版本为HTTP1.1.

与Get不同在于,它的请求参数是位于数据中的,可以看到name=Professional%20Ajax&publisher=Wiley就是它的请求数据,且请求数据和请求头部之间需要空出一行。

对于 GET 和 POST 的区别,总结来说就是:它们的本质都是 TCP 链接,并无区别。但是由于 HTTP 的规定以及浏览器/服务器的限制,导致它们在应用过程中可能会有所不同。

小结:

GET 的语义是请求获取指定的资源。GET 方法是安全、幂等、可被缓存的。

POST 的语义是根据请求负荷(报文主体)对指定的资源做出处理,具体的处理方式视资源类型而不同。POST 不安全,不幂等,(大部分实现)不可缓存。

这些概念都是从RFC规范定义的语义来分析的。
实际过程中,可以用Get来实现新增或修改数据的请求,也可以用Post实现查询数据的请求。
而且安全如果放入概念是信息不会被泄露,那Get请求在URL中传输,而Post在body中传输,明显URL中更容易被看到数据,所以并不能说Get一定比Post安全。
想要避免传输过程数据不被窃取,就要使用HTTPS协议,这样的HTTP数据会被加密传输。

问题1:GET 请求可以带 body 吗?

答:RFC 规范并没有规定 GET 请求不能带 body 的。理论上,任何请求都可以带 body 的。只是因为 RFC 规范定义的 GET 请求是获取资源,所以根据这个语义不需要用到 body。

另外,URL 中的查询参数也不是 GET 所独有的,POST 请求的 URL 中也可以有参数的。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值