iOS每日一记之———————————————初识HTTP协议 Socket TCP/UDP

原创 2016年06月24日 19:52:29

一、HTTP协议

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


二、HTTP请求与响应的内容

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


一个HTTP请求所必备的几大要素:请求行、请求头(headerField)、请求体(body);同理,响应也有状态行、响应头、实体内容。

1、请求行

请求行包含请求方法(Method)、请求统一资源标识符(URI)、HTTP版本号,

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

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

2、请求头 (headerField)

请求头主要存放对客户端想给服务端的附加信息,

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



3、请求体 (body)

真正需要发给服务端的数据,在使用POST-multipart上传请求中请求体就是上传文件的二进制NSData类型数据;在GET请求中请求体为空;在普通的POST请求中请求体就是一些表单数据。在iOS中一般用NSURLRequest与NSMutableURLRequest的HTTPBody属性表示,添加body用-[NSMutableURLRequest setHTTPBody:]。



四、HTTP、Socket、TCP的区别

这三个概念经常被谈到,也是比较容易被混掉的概念。在回顾之前我们先看一下这三者在TCP/IP协议族中的位置关系:

HTTP是应用层的协议,更靠近用户端;TCP是传输层的协议;而socket是从传输层上抽象出来的一个抽象层,本质是接口。所以本质上三种还是很好区分的。尽管如此,有时候你可能会懵逼,HTTP连接、TCP连接、socket连接有什么区别?好吧,如果上面的图解释的还是不够清楚的话,我们继续往下看。

1、TCP连接与HTTP连接的区别

上文提过,HTTP是基于TCP的,客户端往服务端发送一个HTTP请求时第一步就是要建立与服务端的TCP连接,也就是先三次握手,“你好,你好,你好”。从HTTP 1.1开始支持持久连接,也就是一次TCP连接可以发送多次的HTTP请求。

小总结:HTTP基于TCP

2、TCP连接与Socket连接的区别

在图4.1中我们提到,socket层只是在TCP/UDP传输层上做的一个抽象接口层,因此一个socket连接可以基于TCP,也有可能基于UDP。基于TCP协议的socket连接同样需要通过三次握手建立连接,是可靠的;基于UDP协议的socket连接不需要建立连接的过程,不过对方能不能收到都会发送过去,是不可靠的,大多数的即时通讯IM都是后者。

小总结:Socket也可以基于TCP

3、HTTP连接与Socket连接的区别

区分这两个概念是比较有意义的,毕竟TCP看不见摸不着,HTTP与Socket是实实在在能用到的。

  • HTTP是短连接,Socket(基于TCP协议的)是长连接。尽管HTTP1.1开始支持持久连接,但仍无法保证始终连接。而Socket连接一旦建立TCP三次握手,除非一方主动断开,否则连接状态一直保持。

  • HTTP连接服务端无法主动发消息,Socket连接双方请求的发送先后限制。这点就比较重要了,因为它将决定二者分别适合应用在什么场景下。HTTP采用“请求-响应”机制,在客户端还没发送消息给服务端前,服务端无法推送消息给客户端。必须满足客户端发送消息在前,服务端回复在后。Socket连接双方类似peer2peer的关系,一方随时可以向另一方喊话。

4、问题来了:什么时候该用HTTP,什么时候该用socket

这个问题的提出是很自然而然的。当你接到一个与另一方的网络通讯需求,自然会考虑用HTTP还是用Socket。

用HTTP的情况:双方不需要时刻保持连接在线,比如客户端资源的获取、文件上传等

用Socket的情况:大部分即时通讯应用(QQ、微信)、聊天室、苹果APNs等

在iOS中,发HTTP请求一般用原生的NSURLConnection、NSURLSession或者开源的AFNetWorking(推荐)、ASIHttpRequest(已停止更新)。连接Socket连接我用的比较多是robbiehanson大神的CocoaAsyncSocket(XMPPFramework也是出自他手)。




版权声明:本文为博主原创文章,未经博主允许不得转载。

iOS开发之TCP/UDP/Socket简单介绍

简单介绍iOS开发中网络编程的常用协议TCP/UDP/Socket
  • shxwork
  • shxwork
  • 2016年03月22日 12:34
  • 987

HTTP、TCP、UDP,Socket,HTTPS(史上最强理解,没有之一)

TCP   HTTP   UDP三者的关系如下: TCP/IP是个协议组,可分为四个层次:网络接口层、网络层、传输层和应用层。 在网络层有IP协议、ICMP协议、ARP协议、RARP协议和...
  • WHB20081815
  • WHB20081815
  • 2017年03月28日 19:45
  • 2406

网络七层协议、TCP/IP、UDP、HTTP、Socket 个人理解

OSI是一个开放性的通信系统互连参考模型,他是一个定义得非常好的协议规范。OSI模型有7层结构,每层都可以有几个子层。 应用层 示例:TELNET,HTTP,FTP,NFS,SMTP等。 ...
  • ch1406285246
  • ch1406285246
  • 2017年02月17日 09:44
  • 1656

android 网络编程--socket tcp/ip udp http之间的关系

网络通信协议概图: 
  • lanhuzi9999
  • lanhuzi9999
  • 2014年06月20日 17:05
  • 13230

Socket使用解析(涉及TCP、UDP、HTTP)

1、网络基础部分了解 层次图:计算机网络分为五层(从上至下): 应用层 》》 运输层》》网络层》》数据链路层》》物理层          其中:          网络层,负责根据IP找到目的地址的主...
  • zhuqinguo
  • zhuqinguo
  • 2017年01月05日 21:52
  • 918

Socket、TCP、UDP、HTTP、FTP等网络协议

1、TCP/IP是个协议组,可分为三个层次:网络层、传输层和应用层。 在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。 在传输层中有TCP协议与UDP协议。 在应用层...
  • u011269801
  • u011269801
  • 2014年10月30日 15:46
  • 2100

各协议(TCP/IP、UDP、HTTP、socket)内与外简述

网络由下往上分为: 对应 物理层 数据链路层 网络层( IP协议) 传输层(TCP协议) 会话层 应用层和表示层(HTTP协议)   socket则是对TCP/IP协议的封装和应用(...
  • MCpang
  • MCpang
  • 2015年01月05日 21:35
  • 13655

TCP,Socket,HTTP,TCP和UDP的区别

网络由下往上分为   物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。   通过初步的了解,我知道IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层,  ...
  • wsdxsYB
  • wsdxsYB
  • 2016年04月20日 21:42
  • 732

ZigBee入门之Socket----TCP/IP、Http与Socket

网络由下往上分为   物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。   通过初步的了解,我知道IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层,   三者...
  • u014293306
  • u014293306
  • 2015年05月17日 15:23
  • 2095

面试中关于TCP UDP HTTP HTTPS的问题

大家面试中问到这个问题该怎么答。 首先我把概念和之间的关系给大家简单的说下: http:是用于www浏览的一个协议。 tcp:是机器之间建立连接用到的一个协议 1.TCP/IP 是个协议组,...
  • qq_32185689
  • qq_32185689
  • 2017年03月07日 20:23
  • 952
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS每日一记之———————————————初识HTTP协议 Socket TCP/UDP
举报原因:
原因补充:

(最多只允许输入30个字)