Http请求:iOS网络功能笔记(一)

构建Http请求


1.1简介

     Berners-Lee最终体案上有三个主要的创新:HTML、HTTP、URL。HTML定义了向文本添加样式的一种方式;HTTP定义了服务器与客户端之间传输数据的一种方式、URL定义了再网络机器中定位唯一资源的方式。


1.2 Http请求与响应

      对于计算机通信来说,http请求遵循着客户端-服务器范式,如下图所示就是一个简单的Http请求步骤,客户端建立一个到服务器的TCP连接,然后发送http请求,服务器随后通过同一个TCP连接上发送一个Http响应来响应该请求。接下来,客户端可以重用这个TCP连接,发送请求或者将连接关闭。早期版本只允许在一个TCP上发送请求,Http1.1则允许客户端重用连接。

    


    HTTP与HTTPS之间的区别在于会话的连接建立阶段。在TCP连接建立好、HTTP请求发送前,客户端与服务器之间必须建立SSL会话,SSL会话包括:客户端与服务器协商使用何种密码、交换公钥、验证协商以及验证身份。但SSL会话完毕后,在TCP连接上传输的所有数据都是加密的。

1.2.1 URL结构

     URL 为Internet上的任何资源与内容提供了一个全局唯一的位置名。作为原则,单个资源可以通过多个URL定位,但单个URL不能引用不同的资源,在iOS中,使用NSURL来管理URL对象。

      URL由5个部分组成:http(协议)://user:password@(认证) hostname(主机名):port(端口):/absolute_path(绝对路径)?query(查询字符串)

      1、协议:协议部分指定了使用哪个应用层的协议。iOS常用的协议还有FILE协议,FILE请求用于在应用沙盒中取得本地文件系统中的资源。如果使用字符串而没有使用协议创建NSURL对象,那么默认就是FILE协议。

    2、认证:的某些http服务器支持在URL中传输用户认证以实现BASIC认证,认证部分包括认证用户名和密码。该方式使用较少,安全性能偏低。

    3、主机名:URL的主机名部分指定了包含请求资源的的主机的TCP主机名和ip地址。如果URL的协议是FILE,那这部分和端口号必须省略。虽然URL要引用唯一的资源,但对于相对本地的主机名时就会有例外,如果使用localhost作为主机名,URL就会引用本地的机器,因此相同的URL在不同的机器上回得到不同资源。

    4、端口:URL的端口指定了客户端连接的TCP端口,HTTP 80端口 HTTPS 443端口(默认状态时,认为也可以做修改)

    5、绝对路劲:指定了网络资源的路径。绝对路径不可以包含问号、空格、回车换行符

    6、查询字符串:多个查询参数通过&字符分割。 绝对路劲和查询字符串的内容是受到限制的,因此URL通常使用百分号进行编码。


1.2.2 请求内容

    Http 请求包含3个部分:请求行、请求头、请求体。请求行与请求头是文本行,通过回车/换行 符分割(值为13的字节、或是0x0D 值为10的字节或是0xa)在Http请求中使用这样文本值,使得他们很容易构建、解析、调试。空行 将请求头和请求体划分开来。

请求行包括3个方面的主要信息:Http请求方法、URL、Http的版本

    


方法  标准方法
GET             从服务器获取一段内容,通常不包括请求体。GET请求通常不会导致服务器数据发生变化
POST使用客户端提供的数据更新实体。POST请求通常会在请求体中加入应用服务所需的信息。POST请求是非幂等的,意味着当处理多个请求时,其结果和处理单个请求时时不同的。
HEAD获取响应元素数据而无需检索响应的全部内容。该方法用于检查服务器最近的内容变化而无需检索全部内容
PUT使用客户端提供的数据添加实体,PUT请求将应用服务器所需的请求信息放在请求体中,来创建新的实体,PUT是幂等的
DELETE            根据URI的内容或客户端提供的请求体来删除实体,DELETE请求是REST服务接口中使用最频繁的

       Http 规范允许Http客户端与服务器之间添加、删除、重排以及修改http头,虽然使用了有状态的TCP传输层,但Http取是一个无状态的协议,,意味着Http服务器并不会保留关于某个请求的任何消息以用在未来的请求中,Cookie提供了一种方式可以将一些简单的状态信息存储到客户端,并在后续的请求中与服务器进行通信。

       Http头之后是可选的请求体,请求体可以是任意字节的序列,通过一个空行与头分割开。请求体必须遵循客户端与服务器之间预先确定的数据编码。该编码通常是XML或者是JSON。在iOS中,NSURLRequest 及其子类NSMutableRequest提供了必要的方法和属性。


1.2.3 响应内容

      在Http服务器与应用服务器处理完请求后,Http响应会通过同一个TCP socket返回给客户端。http响应的结构类似于http请求,第一行是状态行,接着是头,响应体。状态行包括3个域,第一个是:响应的Http版本、请求结果的状态值。首先是3位整数,包含了请求结果的状态码,后面接的是说明短语。

    紧接的状态行的是响应头,响应头之间通过回车换行进行分割。每个头都包含了关于响应的元数据,包括数据的修改时间、客户端可以缓存数据多长时间,数据的编码方式、以及在随后的请求中提交的状态信息。

    响应体是通过空行与响应行分开的。响应体可以包含任意数量的二进制字符,与客户端通信的响应体的长度可以通过请求的Content-Length头或者通过编码实现。块编码响应包括:Transfer-Encoding头,并带有chunked值。块编码包含一个或者多个体片段。每个片段都有起始行,指定块中的字节数量。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值