iOS 面试题·HTTP 请求方法有几种?其中 GET 方法和 POST 方法有什么区别?

640?wx_fmt=gif

640?wx_fmt=jpeg

Linux编程 点击右侧关注,免费入门到精通! 640?wx_fmt=jpeg


作者丨彭序猿
https://www.jianshu.com/p/5fb66338ad14


640?wx_fmt=gif

前言


虽然这里只问了 HTTP 请求方法有哪几种,以及其中的 GET 方法和 POST 方法有什么区别,但是如果我们能够介绍 HTTP 是什么,它的特点和缺点以及特性,可以从侧面反应我们的知识广度。


我们这里分别回答 HTTP 是什么、请求方法的种类、如何利用 Cookie 来解决无状态这个缺陷、以及 HTTP 有什么缺点,最后引出 HTTPS 是什么。


640?wx_fmt=gifHTTP 超文本传输协议,位于应用层


OSI 参考模型将复杂的计算机网络体系结构分了 7 层; TCP/IP
协议族则将网络体系分了 4 层,具体如下图:


640?wx_fmt=other

640?wx_fmt=other


这里我们主要了解两点:


1.将复杂的网路体系分层,可以更加简单的实现每层的协议,也便于以后对各层协议的扩展和优化。


2.HTTP 属于应用层,是一种基于请求和响应、且无状态的一种协议。


640?wx_fmt=gifHTTP 是不保存状态的协议


HTTP 为了快速的处理大量事务,确保协议的可伸缩性,所以设计的很简单;HTTP 是一种不保存状态,即无状态协议。简单来说,HTTP 对于请求和响应都不会做持久化处理。


但是无状态这个特性会导致业务逻辑的尴尬(例如需要登录权限),为了实现保持状态的功能,引入了 Cookie 技术;通过在请求和响应报文中写入 Cookie 信息来控制客户端的状态。


640?wx_fmt=gifHTTP 支持的方法种类


HTTP 请求方法有:GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS、TRACE。最常用的就是 GET 方法 和 POST 方法;


对于方法种类和介绍如下图:


640?wx_fmt=other


640?wx_fmt=gifHTTP 有请求报文和响应报文


HTTP 通信的基本单位是报文,HTTP 是一种基于请求和响应的协议,所以有请求报文和响应报文。HTTP 报文由报文首部和报文实体组成:报文首部主要是配置信息,然后报文实体是传输的数据。


对于报文首付中的字段解释以及 HTTP 状态码等,可以参阅下 

https://book.douban.com/subject/25863515/

 或者文末的参考链接。这里就不过多描述了(因为实在是太多了 - -/...)。


640?wx_fmt=gifGET 方法和 POST 方法的区别


从语义角度来说,GET 是从指定的资源请求数据,POST 是向指定的资源提交要被处理的数据。正规详细的解释在这里:

http://www.w3school.com.cn/tags/html_ref_httpmethods.asp


 HTTP 方法:GET 对比 POST。摘抄区别如下:


640?wx_fmt=png


640?wx_fmt=gifGET 方法和 POST 方法安全性比较


对于安全性,只能说 POST 比 GET 相对安全一丢丢:


1.GET 方法参数直接拼接在 URL 后面,可以在浏览器直接看到。


2.GET 方法参数会被缓存。


3.POST 方法参数放到 HTTP 消息主体,但是通过网络抓包一样是可以获取到参数的。


在这里不能讨论安全性的问题,POST 跟 GET 只是 HTTP 两种方法而已,对于传输层来说都是明文的,都是不安全的,对于网络请求安全问题应该要借助其它技术来实现,例如利用 HTTPS 来保证安全性。


640?wx_fmt=gifHTTP 的缺点


为了让 HTTP 更加快速的处理大量事务,确保协议的可伸缩性,所以把 HTTP 设计的很简单。因此也会出现以下问题:


1.由于通信是使用明文的,所以内容很容易被窃听。


2.由于不会验证对方身份,这里很容易遭遇伪装,伪装服务器或者伪装客户端等,容易遭受 Dos 攻击。


3.不校验报文的完整性,会出现中间人攻击,篡改报文信息的情况。


对于这些缺点,我们可以通过将报文加密、认证通信双方、校验报文的完整性来解决。HTTP + 加密 + 认证 + 完整性保护 = HTTPS。这里就是为什么推行 HTTPS 的原因,因为 HTTPS 可以有效的解决上述 HTTP 的缺点。


 推荐↓↓↓ 

640?wx_fmt=png

?16个技术公众号】都在这里!

涵盖:程序员大咖、源码共读、程序员共读、数据结构与算法、黑客技术和网络安全、大数据科技、编程前端、Java、Python、Web编程开发、Android、iOS开发、Linux、数据库研发、幽默程序员等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值