美文网首页
iOS中的网络和多线程编程(三)

iOS中的网络和多线程编程(三)

作者: anny_4243 | 来源:发表于2022-02-16 17:27 被阅读0次

摘自《iOS程序员面试笔试宝典》

如何理解HTTP协议

超文本传输协议(HyperText TransferProtocol,HTTP)是互联网上应用最为广泛的一种网络协议。简单来说,HTTP是客户端和服务器端之间请求和应答的标准,它可以使浏览器(或其他客户端)更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容优先显示(如文本先于图形)等。

一次HTTP操作称为一个事务,其工作过程可分为4步:

1)客户端与服务器需要建立连接。例如,单击某个超链接后,浏览器和服务器将建立通信连接。

2)建立连接后,客户端发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户端信息和可能的内容。

3)服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。

4)客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。

如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,由显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标单击,等待信息显示就可以了。

通常HTTP消息包括客户端向服务器的请求消息和服务器向客户端的响应消息。这两种类型的消息由一个起始行,一个或者多个头域,一个指示头域结束的空行和可选的消息体组成。HTTP的头域包括通用头、请求头、响应头和实体头4个部分。每个头域由一个域名、冒号(:)和域值组成。域名是大小写无关的,域值前可以添加任何数量的空格符,头域可以被扩展为多行,在每行开始处,使用至少一个空格或制表符。

一个完整的由客户端发给服务器的HTTP请求包含以下两部分内容。

1)请求头:包含了对客户端的环境描述、客户端请求信息等。

2)请求体:客户端发给服务器的具体数据,例如文件数据(POST请求才会有)。

同样,一个完整的HTTP响应中应该包含以下两部分内容。

1)响应头:包含了对服务器的描述、对返回数据的描述。

2)响应体:服务器返回给客户端的具体数据,例如文件数据。

常见的响应状态码如图所示。

常见的响应状态码

此外,在iOS开发中发送HTTP请求有以下几种方案:

1)NSURLConnection。iOS 7之前,通常使用NSURLConnection及关联类,这是iOS开发中最经典的网络请求方案。

2)NSURLSession。iOS 7之后,逐渐取代NSURLConnection,现在已经是iOS开发中最常用的网络请求方式。

3)CFNetwork。它是NSURLConnection和NSURLSession的底层C语言实现,很少在开发中使用。

4)其他第三方网络请求框架,如Objective-C中的AFNetworking和Swift中的Alamofire等。这些网络框架也基本上都是对其他3种方案的封装与拓展。

HTTPS协议与HTTP协议有什么区别与联系

HTTP协议被用于在Web浏览器和网站服务器之间传递信息。HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,那么就可以直接读懂其中的信息。因此,HTTP协议不适合传输一些敏感信息,如信用卡号、密码等。

为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议(HTTPS)。为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。

HTTPS和HTTP的区别主要为以下4点:

1)HTTPS协议需要从CA (CertificateAuthority)申请一个用于证明服务器用途类型的证书,一般免费证书很少,需要交费。

2)HTTP是超文本传输协议,信息是明文传输,HTTPS则是具有安全性的SSL加密传输协议。

3)HHTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

4)HTTP的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比HTTP协议安全。

相关文章

网友评论

      本文标题:iOS中的网络和多线程编程(三)

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