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

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

如何理解HTTP协议


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


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


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


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


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


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


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


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


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


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


2466108-4f96c1b838116b0d.webp.jpg


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

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


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


2466108-a5fa5cae40355617.webp.jpg


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


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


2466108-e5341de780854f7e.webp.jpg


常见的响应状态码


此外,在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协议安全。

目录
相关文章
|
7月前
|
iOS开发
iOS多线程之NSOperationQueue-依赖、并发数、优先级、自定义Operation等最全的使用总结
iOS多线程之NSOperationQueue-依赖、并发数、优先级、自定义Operation等最全的使用总结
221 0
|
7月前
|
安全 调度 C语言
iOS多线程之GCD-同步、异步、并发、串行、线程组、栅栏函数、信号量等全网最全的总结
iOS多线程之GCD-同步、异步、并发、串行、线程组、栅栏函数、信号量等全网最全的总结
489 1
|
11月前
|
安全 算法 编译器
iOS线程安全——锁(二)
iOS线程安全——锁(二)
119 0
|
11月前
|
存储 安全 API
iOS线程安全——锁(一)
iOS线程安全——锁(一)
210 0
|
iOS开发
iOS多线程的初步研究-- dispatch同步
GCD提供两种方式支持dispatch队列同步,即dispatch组和信号量。
147 0
|
API iOS开发
iOS多个线程发起相同请求,避免重复
有时候在调用多个模块时,会对同一个API进行多次请求,但因为内容都是一样的,所以最好就是加上锁,防止重复请求造成网络资源浪费
152 0
|
敏捷开发 安全 Unix
iOS开发 - 在实战中挖掘之线程间的通信方式
iOS开发 - 在实战中挖掘之线程间的通信方式
154 0
|
存储 Java 数据库
JAVA实现网络多线程编程小游戏开发
实验总结:五子棋是一个很简单的游戏,但是如果认真对待,一个代码一个代码的去研究,会收获到很多知识,会打好学习基础。方便以后开发更高、更难的项目时打下稳固的基础。在自己开发的过程中会有各种意想不到的bug,通过查阅资料及询问老师同学进行解决对本身的一个代码能力会有一个质的增长,同时这也是一个非常快乐的过程。有进步,总归是好事。
JAVA实现网络多线程编程小游戏开发