美文网首页
iOSHTTP与HTTPS

iOSHTTP与HTTPS

作者: lyt1123 | 来源:发表于2018-06-01 09:54 被阅读0次

国际标准化组织(ISO)在1978年将计算机网络体系结构的通信协议划分为七层,自下而上依次为:物理层数据链路层网络层传输层会话层表示层应用层。其中每一层都规定有明确的服务及接口标准;把用户的应用程序作为最高层;除了最高层外,中间的每一层都向上一层提供服务,同时又是下一层的用户。

http(超文本传输协议)

HTTP是客户端浏览器或其他程序与Web服务器之间的应用层通信协议,HTTP通信的基本单位是报文。在Http工作之前,客户端通过网络和服务器建立链连接,该连接是通过TCP来完成的,一般TCP接口的端口号是80(传输层主要有两个协议,分别是 TCP 和 UDP)。

常见状态码

HTTP请求方法包括GET、POST、PUT、DELETE、PATCH、HEAD、

OPTIONS、TRACE。其中GET和POST最为常用。

GET和POST的区别

从语义角度来说,GET是从指定的资源请求数据,POST是向指定的资源提交要被处理的数据。通俗点将,GET是获取数据,POST是更新数据。

具体区别可以大致总结为一下几点:

(1) GET的URL可见,POST的URL不可见;

(2) GET请求可以被缓存,POST不会被缓存;

(3) GET请求可以保留在浏览器历史记录中,POST不会;

(4) GET请求有长度限制,2048个字节,POST长度没有限制;

(5) GET请求是幂等性的,POST是非幂等性的;

(6) GET请求的安全性没有POST高。

连接的建立需要通过三次握手,连接的断开需要通过四次挥手。

三次握手:第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;

第二次握手:服务器收到syn包,必须确认客户SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。 完成三次握手,客户端与服务器开始传送数据。

四次挥手:第一次握手:TCP发送一个FIN(结束),用来关闭客户到服务端的连接。

第二次握手:服务端收到这个FIN,他发回一个ACK(确认),确认收到序号为收到序号+1,和SYN一样,一个FIN将占用一个序号。

第三次握手:服务端发送一个FIN(结束)到客户端,服务端关闭客户端的连接。

第四次握手:客户端发送ACK(确认)报文确认,并将确认的序号+1,这样关闭完成。

HTTPS(:Hyper Text Transfer Protocol over Secure Socket Layer)

HTTPS是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP+SSL/TSL

HTTPS使用端口443,而不是象HTTP那样使用端口80来通信。

HTTPS的建立流程

(1)客户使用https的URL访问服务器,要求与服务器建立SSL连接。

(2)服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。

(3)客户端的浏览器与服务器开始协商SSL连接的安全等级,也就是信息加密的等级。

(4)客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。

(5)服务器利用自己的私钥解密出会话密钥。

(6)服务器利用会话密钥加密与客户端之间的通信。

HTTPS和HTTP的区别主要如下:

1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。

2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。

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

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

AFNetworking支持HTTPS

AFNetworking支持HTTPS相关的类为AFSecurityPolicy,其中AFNetworking提供了三种验证方式:

typedefNS_ENUM(NSUInteger, AFSSLPinningMode) {  

AFSSLPinningModeNone,// 是默认的认证方式,只会在系统的信任的证书列表中对服务端返回的证书进行验证

AFSSLPinningModePublicKey,// 需要预先保存服务端发送的证书(自建证书),但是这里只会验证证书中的公钥是否正确

AFSSLPinningModeCertificate,// 需要客户端预先保存服务端的证书(自建证书)

};

// AFSecurityPolicy相关属性

// 验证方式,对应上面的三种验证方式

@property(readonly,nonatomic,assign) AFSSLPinningMode SSLPinningMode;

// 自建证书的时候,提供相应的证书

@property(nonatomic,strong,nullable)NSSet *pinnedCertificates;

// 是否允许自建证书

@property(nonatomic,assign)BOOLallowInvalidCertificates;

// 是否需要验证域名

@property(nonatomic,assign)BOOLvalidatesDomainName;

--------------------------------------

// AFSecurityPolicy相关方法

// 验证逻辑,这个方法在AFURLSessionManager这个类中,实现的NSURLSession的两个代理方法中调用。

// 具体验证逻辑,大家可读AFNetworking源码

- (BOOL)evaluateServerTrust:(SecTrustRef)serverTrust                  forDomain:(nullableNSString*)domain;

实际运用

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];

policy.allowInvalidCertificates =YES;

policy.validatesDomainName =YES;

// 证书的路径

NSString*cerPath = ...;

NSData*cerData = [NSDatadataWithContentsOfFile:cerPath];

SecCertificateRef certificate = SecCertificateCreateWithData(NULL, (__bridgeCFDataRef)(cerData));

policy.pinnedCertificates = [NSSetsetWithObject:CFBridgingRelease(certificate)];

manager.securityPolicy = policy;

相关文章

  • iOSHTTP与HTTPS

    国际标准化组织(ISO)在1978年将计算机网络体系结构的通信协议划分为七层,自下而上依次为:物理层、数据链路层、...

  • iOSHTTP与HTTPS

    国际标准化组织(ISO)在1978年将计算机网络体系结构的通信协议划分为七层,自下而上依次为:物理层、数据链路层、...

  • iOShttp升级https-2019-08-05

    以前一直都没有培养出来一个写博客的习惯,总喜欢把自己遇到的问题和自己的心得写在自己的笔记里,直到最近在我碰到一个棘...

  • http 与 https

    通常来讲,http 效率更高,https 更安全。但是更详细的你可能就不知道了,下面是我总结的一些两者之间的区别。...

  • HTTP与HTTPS

    概述 HTTP是互联网上应用最为广泛的一种网络协议,有名超文本链接协议。我们在开发中请求数据,发送数据都会用到HT...

  • http与https

    作者:forthealllightgithub.com/forthealllight/blog/issues/19...

  • HTTPS与握手

    HTTPS (HyperText Transfer Protocol over Secure Socket Lay...

  • http与https

    安全套接字层(SSL)超文本传输协议HTTPS,为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,...

  • HTTP与HTTPS

    https://www.cnblogs.com/by-3ks/articles/4113849.html http...

  • HTTP与HTTPS

    1.http 1)http:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP)...

网友评论

      本文标题:iOSHTTP与HTTPS

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