摘自《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协议安全。
网友评论