您好,欢迎来电子发烧友网! ,新用户?[免费注册]

您的位置:电子发烧友网>源码下载>通讯/手机编程>

iOS中HTTP传输协议

大小:0.3 MB 人气: 2017-09-26 需要积分:1

  一、HTTP协议

  HTTP本质上是一种协议,全称是Hypertext Transfer Protocol,即超文本传输协议。从名字上可以看出该协议用于规定客户端与服务端之间的传输规则,所传输的内容不局限于文本(其实可以传输任意类型的数据)。

  iOS中HTTP传输协议

  图1.1传输示意图.png

  二、HTTP请求与响应的内容

  当我们往服务端发送一条HTTP请求时都发送了哪些东西过去呢?

  先看一个POST请求的示例图:

  iOS中HTTP传输协议

  图2.1 HTTP_POST请求示例.png

  注:本文使用Paw来interwetten与威廉的赔率体系 发送HTTP请求,使用Charles抓包,Charles选中“Request”以及“Raw”选项就可以看到请求的全部内容

  以上示例图中其实已经包含了一个HTTP请求所必备的几大要素:请求行、请求头(headerField)、请求体(body);同理,响应也有状态行、响应头、实体内容。接下来我们逐个展开。

  1、请求行

  请求行包含请求方法(Method)、请求统一资源标识符(URI)、HTTP版本号,如图2.1第一行所示:

  

  图2.2 请求行.png

  请求方法就是我们所熟悉的POST、GET、HEAD、PUT等

  URI就是URL中排除掉Host剩下的部分,也就是资源在服务器本地上的路径

  HTTP版本号,目前主流的版本是1.1(1999年开始采用),最新的版本是2.0(2015年5月发布)。不同版本之间差异下面会再展开

  2、请求头

  请求头主要存放对客户端想给服务端的附加信息,下图框框的部分就是请求头:

  iOS中HTTP传输协议

  图2.3 请求头.png

  HTTP请求在iOS中用NSURLRequest与NSMutableRequest表示;HTTP响应用NSHTTPURLResponse表示。

  Host: 目标服务器的网络地址

  Accept: 让服务端知道客户端所能接收的数据类型,如text/html */*

  Content-Type: body中的数据类型,如application/json; charset=UTF-8

  Accept-Language: 客户端的语言环境,如zh-cn

  Accept-Encoding: 客户端支持的数据压缩格式,如gzip

  User-Agent: 客户端的软件环境,我们可以更改该字段为自己客户端的名字,比如QQ music v1.11,比如浏览器Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/600.8.9 (KHTML, like Gecko) Maxthon/4.5.2

  Connection: keep-alive,该字段是从HTTP 1.1才开始有的,用来告诉服务端这是一个持久连接,“请服务端不要在发出响应后立即断开TCP连接”。关于该字段的更多解释将在后面的HTTP版本简介中展开。

  Content-Length: body的长度,如果body为空则该字段值为0。该字段一般在POST请求中才会有。

  POST请求的body请求体也有可能是空的,因此POST中Content-Length也有可能为0

  Cookie: 记录者用户信息的保存在本地的用户数据,如果有会被自动附上

  值得一提的是,在iOS中当你发送一个任意请求时,不管你愿不愿意,NSURLRequest都会自动帮你记录你所访问的URL上设置的cookie。在iOS中用NSHTTPCookieStorage表示,是一个单例。通过

  NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage]; for (NSHTTPCookie *cookie in [cookieJar cookies]) { NSLog(@“%@”, cookie); }

  可以获取目前被自动保存的所有cookie。对cookie的操作感兴趣的请移步iOS中http请求使用cookie这篇文章。

 

非常好我支持^.^

(0) 0%

不好我反对

(0) 0%

      发表评论

      用户评论
      评价:好评中评差评

      发表评论,获取积分! 请遵守相关规定!