• iOS -读书笔记-网络请求


    知道“3次握手”吗?突然想起这个词

    什么是3次握手?
    TCP三次握手/四次挥手详解 这里是3次握手的详解
    3次握手就是为了可靠的传送数据,TCP(什么是TCP呢?TCP就是一种可靠传输的协议)在发送数据之前。两台主机之间进行3次握手。3次握手完毕后才发送数据。

    预备知识: 位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)
    Sequence number(顺序号码) Acknowledge number(确认号码)
    第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到server,主机B由SYN=1知道。A要求建立联机。
    第二次握手:主机B收到请求后要确认联机信息。向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包
    第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。
    完毕三次握手。主机A与主机B開始传送数据。

    进入正题:
    iOS 中首选的通信方式是HTTP。iOS提供的最方便的网络API也是针对HTTP的。


    上文中说的“三次握手”就是为了建立一个TCP连接,HTTP请求和响应就是在TCP连接上来完毕的,TCP连接能够重用,也就是说。并非每次HTTP请求都须要建立TCP连接,仅仅要TCP连接不断开,HTTP请求就能够一直使用。

    HTTP和HTTPS的区别在什么地方?
    安全。事实上HTTPS协议就是SSL+HTTP协议。

    HTTPS和HTTP之间最重要的区别在于会话的建立阶段。TCP连接建立好之后,HTTP请求发送之前。client与server之间必须建立SSL(那么SSL又是什么呢?以下说)会话。会话建立完毕后,在TCP连接之上传输的全部数据都是加密的。

    SSL是什么?
    SSL (Secure Socket Layer),是一种保证server和client安全通信的协议。使用HTTPS协议。全部的HTTP数据都是在SSL协议封装之上传输的。突然冒出另外一个词TLS,事实上TLS是SSL标准化的产物,事实上我们如今用的都是TLS。但由于历史上习惯了SSL这个称呼寻常还是以SSL为多。关于SSL的介绍看下这篇文章讲的非常好SSL/TLS协议执行机制的概述

    iOS 最高层的HTTP API

    NSURL 、NSURLRequest 、NSURLConnection 、NSURLResponse 对象

    1 NSURL

    通过NSURL 对象轻松方便的訪问URL所指向的内容,NSURL 能够指向文件资源,也能够指向网络资源。


    NSURL *url = [NSURL URLWithString:@”“];
    NSData *data = [NSData dataWithContentsOfURL:url];
    即能够获取网络资源又能够获文件资源。

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    
        NSInputStream *inStream = [NSInputStream inputStreamWithFileAtPath:@"文件路径"];
        [request setHTTPBodyStream:inStream];
    

    NSURL还提供了非常多方法来读取URL各个部分的值,比方url.port获取一下url的端口。
    在创建NSURL对象前须要对URL字符串进行百分号编码。RFC3986文档规定,Url中仅仅同意包括英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及全部保留字符。相关更具体的看百分号编码

    2 NSURLRequest

    创建好NSURL对象后接下来就须要执行下一步:创建NSURLRequest对象。NSURLRequest 对象包括了载入URL内容所需的信息。iOS中的URL载入系统支持HTTP 、HTTPS、FTP和FILE URL内容的载入
    URL载入系统提供了一种扩展方式一处理新的协议,方式就是创建NSURLProtocol的子类。然后将返回的结果提供给URL载入系统。

    NSURL *url = [NSURL URLWithString:@"www.baidu.com"];
        NSURLRequest *request = [NSURLRequest requestWithURL:url];

    採用默认的參数来创建对象。

    假设是HTTP或者HTTPS 那么请求方法是GET,而且使用操作系统提供的默认头。

    NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:30];
    

    设置缓存策略和请求时间,NSURLRequest也提供了很多方法来获取请求的属性。可是不能设置,假设想要设置,那么来用NSMutableRequest。

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"POST"];
        [request setHTTPBody:[@"body" dataUsingEncoding:NSUTF8StringEncoding]];
        [request setAllHTTPHeaderFields:@{@"":@""}];
    

    NSMutableRequest 设置各种參数。


    发送大容量内容能够使用NSInputSteam,使用该对象提供请求体而无需将整个内容载入到内存中。发送图片或者视频这是最佳的选择。

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        NSInputStream *inStream = [NSInputStream inputStreamWithFileAtPath:@"文件路径"];
        [request setHTTPBodyStream:inStream];
    

    3 NSURLConnection

    NSURLConnection 对象是URL载入统统活动的中心。用于连接server获取响应。

    提供了同步、异步、队列异步的操作模式。

    同步最简单,可是会有阻塞线程等缺点。异步模式下调用托付代理来处理数据。

    4 NSURLReponse

    NSURLResponse 对象会在URL载入请求完毕后返回。NSError对象与DSData对象,假设请求出现故障或server问题会返回NSError对象,假设有响应返回NSData对象就会包括响应体.
    NSURLReponse提供了非常多属性信息。
    MIMEType 结果数据的MIME类型。该值来源于server。
    expectedContentLenth 返回内容的大小,可能与实际不符。
    suggestedFilename 提供的文件名称,要么来自server提供的内容的文件名称,要么来自URL和MIME类型。


    URL 返回内容的URL。

    由于成定向的原因,URL可能与请求提供的URL不同。


    textEncodingName 最初数据源所用的文本编码名。
    HSHTTPURLResponse 是NSURLResponse的子类,它包括特定于HTTP请求的属性。


    响应头 - allHeaderFields
    HTTP状态码 - statusCode

    文章来自《iOS高级编程》 扫盲

  • 相关阅读:
    ROS学习笔记8-rqt_console和roslaunch
    ROS学习笔记11-写一个简单的服务和客户端(C++版本)
    ROS学习笔记10-写一个简单的订阅者和发布者(C++版本)
    ROS学习笔记9-创建ros消息和服务
    ROS学习笔记INF-重要操作列表
    ROS学习笔记1-引言
    ROS学习笔记6-理解主题
    ROS学习笔记5-理解节点(Node)
    ROS学习笔记4-创建一个ROS包
    算是入行 ISP 了吧
  • 原文地址:https://www.cnblogs.com/mfmdaoyou/p/7016065.html
Copyright © 2020-2023  润新知