美文网首页iOS面试知识点iOS 面试题iOS开发攻城狮的集散地
08·iOS 面试题·HTTP 请求方法有几种?其中 GET 方

08·iOS 面试题·HTTP 请求方法有几种?其中 GET 方

作者: pengxuyuan | 来源:发表于2018-10-12 00:18 被阅读5次

    前言

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

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

    HTTP 超文本传输协议,位于应用层

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

    image image

    这里我们主要了解两点:

    1. 将复杂的网路体系分层,可以更加简单的实现每层的协议,也便于以后对各层协议的扩展和优化。
    2. HTTP 属于应用层,是一种基于请求和响应、且无状态的一种协议。

    HTTP 是不保存状态的协议

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

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

    HTTP 支持的方法种类

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

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

    image

    HTTP 有请求报文和响应报文

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

    对于报文首付中的字段解释以及 HTTP 状态码等,可以参阅下 书籍-图解HTTP 或者文末的参考链接。这里就不过多描述了(因为实在是太多了 - -/...)。

    GET 方法和 POST 方法的区别

    从语义角度来说,GET 是从指定的资源请求数据,POST 是向指定的资源提交要被处理的数据。正规详细的解释在这里: HTTP 方法:GET 对比 POST。摘抄区别如下:

    GET POST
    后退按钮/刷新 无害 数据会被重新提交(浏览器应该告知用户数据会被重新提交)。
    书签 可收藏为书签 不可收藏为书签
    缓存 能被缓存 不能缓存
    编码类型 application/x-www-form-urlencoded application/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码。
    历史 参数保留在浏览器历史中。 参数不会保存在浏览器历史中。
    对数据长度的限制 是的。当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。 无限制。
    对数据类型的限制 只允许 ASCII 字符。 没有限制。也允许二进制数据。
    安全性 与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。在发送密码或其他敏感信息时绝不要使用 GET ! POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。
    可见性 数据在 URL 中对所有人都是可见的。 数据不会显示在 URL 中。

    GET 方法和 POST 方法安全性比较

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

    1. GET 方法参数直接拼接在 URL 后面,可以在浏览器直接看到。
    2. GET 方法参数会被缓存。
    3. POST 方法参数放到 HTTP 消息主体,但是通过网络抓包一样是可以获取到参数的。

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

    HTTP 的缺点

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

    1. 由于通信是使用明文的,所以内容很容易被窃听。
    2. 由于不会验证对方身份,这里很容易遭遇伪装,伪装服务器或者伪装客户端等,容易遭受 Dos 攻击。
    3. 不校验报文的完整性,会出现中间人攻击,篡改报文信息的情况。

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

    总结

    本章的知识点和图片基本来自书籍-图解TCP/IP书籍-图解HTTP 。这两本书作为入门书非常棒,强烈推荐。

    参考文献

    知乎-get和post区别?

    HTTP 方法:GET 对比 POST

    书籍-图解TCP/IP

    书籍-图解HTTP

    HTTP 状态消息

    HTTP 方法:GET 对比 POST

    相关文章

      网友评论

        本文标题:08·iOS 面试题·HTTP 请求方法有几种?其中 GET 方

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