一、HTTP 是一种超文本传输协议,全名hypertext transfer protocol,从字面意思上可以看出该协议用于规定客户端与服务端之间的传输规则,

传输的内容不限于文本(任意类型的数据)。

二、HTTp请求与响应的内容

1、可以用火狐浏览器安装一个插件可以看到你的http请求的全部内容{

-请求  :请求行,                         -响应:状态行、

请求头(headerField),             响应头、

请求体(body),                      实体内容,

}

现在逐个解释下

*请求行{

请求方法(POST/GET/HEAD/PUT...)

请求统一资源标识符(url,除去host剩下的部分,请求资源在服务器本地上的路径)

HTTP版本号,目前主流的版本1.1,最新的2.0

}

*请求头{

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请求中才会有。

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

这里强调下在iOS中当你发送一个任意请求时,不管你做不做,NSURLRequest都会自动帮你记录你所访问的URL上设置的cookie。 iOS中用NSHTTPCooikeStrorage表示,是一个单利。

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

}

*请求体{

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

-           [NSMutableURLRequest setHTTPBody:]。

}

*响应状态{

状太行是服务器端返回给客户端的状态信息,包含HTTP版本号、状态码、状态吗对应的英文。

eg、:HTTP/1.1 200 ok

这个部分需要讲的是错误码。事实上HTTP请求错误码可以根据错误码从左往右第一个数字大致分为以下几类:

1XX:信息提示。不代表成功或者失败,表示临时响应,比如100表示继续,101表示切换协议

2XX: 成功

3XX: 重定向

4XX:客户端错误,很有可能是客户端发生问题,如亲切可爱的404表示未找到文件,说明你的URI是有问题的,服务器机子上该目录是没有该文件的;414URI                  太长

5XX: 服务器错误,比如504网关超时

错误码是不用去记的,出错了再查对应的错误码含义就行。但是知道上面的分类有助于第一时间做出大体的判断,起码你能清楚是服务端还是客户端的原因。

}

*响应头与响应实体{

跟请求部分的大致一样,及时响应头的field 有少许不同

}

/*********************************************fuck work***************************************/

HTTP、Socket、TCP的区别

介绍完HTTP 现在主要说标题的东西啦,上面的铺垫还是很有用的

我们都知道HTTP 是应用层的协议,更靠近用户端;

TCP 是传输层的协议;

Socket 是从传输层上抽象出来的一个抽象层,本质是接口。

so本质上这三个还是比较好区分的。

那么我们经常会搞不清HTTP连接、TCP连接、socket连接有什么区别

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

HTTP是基于TCP的,客户端往服务端发送一个HTTP请求时第一步就是要建立与服务端的tcp连接,也就是先来三次握手。那么现在我们可以知道“HTTP基于TCP”

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

socket层只是在TCP/UDP传输层上的抽象接口层,因次一个socket连接可以基于TCP也可以基于UDP。UDP协议是不需要建立连接过程的,不管对方收不收到消息我都发,不可靠的传输(即时通讯)所以“socket也是基于TCP”

3、HTTP连接与socket连接区别

---HTTP是短连接,socket(基于tcp的)是长连接。虽然HTTP1.1支持持久连接,但是不能保证连接不断,而socket连接一旦建立tcp,除非一端主动断开,否则连接状态一直保持。

---HTTP连接服务器端无法主动发消息,Socket连接双发请求的发送没有先后限制(随便发)。

好了总结就到这

祝大家工作顺利

iOS之 HTTP、Socket、TCP的区别(易混的更多相关文章

  1. iOS中 HTTP/Socket/TCP/IP通信协议具体解释 韩俊强的博客

    简介: // OSI(开放式系统互联), 由ISO(国际化标准组织)制定 // 1. 应用层 // 2. 表示层 // 3. 会话层 // 4. 传输层 // 5. 网络层 // 6. 数据链接层 / ...

  2. iOS中 HTTP/Socket/TCP/IP通信协议详解

    // OSI(开放式系统互联), 由ISO(国际化标准组织)制定 // 1. 应用层 // 2. 表示层 // 3. 会话层 // 4. 传输层 // 5. 网络层 // 6. 数据链接层 // 7. ...

  3. iOS中 HTTP/Socket/TCP/IP通信协议详解 韩俊强的博客

    每日更新关注:http://weibo.com/hanjunqiang  新浪微博 简单介绍: // OSI(开放式系统互联), 由ISO(国际化标准组织)制定 // 1. 应用层 // 2. 表示层 ...

  4. HTTP.Socket.TCP详解

    这会没事,整理了一下HTTP,socket,TCP之间的关系与区别,我们在面试的时候应该会经常问到这方面的东西,那么什么是HTTP呢? HTTP属于老话题了,在项目中我们经常需要往服务端发POST或者 ...

  5. http、TCP/IP协议与socket之间的区别

    http.TCP/IP协议与socket之间的区别     网络由下往上分为:  www.2cto.com   物理层--                       数据链路层-- 网络层--   ...

  6. TCP/IP Http 和Https socket之间的区别

    TCP/IP Http 和Https  socket之间的区别 TCP/IP是个协议组,它分为网络层,传输层和应用层, 在网络层有IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议.   ...

  7. http、TCP/IP协议与socket之间的区别(转载)

    http.TCP/IP协议与socket之间的区别  https://www.cnblogs.com/iOS-mt/p/4264675.html http.TCP/IP协议与socket之间的区别   ...

  8. iOS Socket/Tcp编程 GCDAsyncSocket的实战(带回调)

    很多同学一听到Socket TCP UDP 这几个字眼感觉特别害怕,很怕在工作当中使用,因为他们太底层了.下面我把我在工作中使用Socket类库GCDAsyncSocket进行一次实战 文章中只适用于 ...

  9. UrlConnection连接和Socket连接的区别

    关于UrlConnection连接和Socket连接的区别,只知道其中的原理如下: 抽象一点的说,Socket只是一个供上层调用的抽象接口,隐躲了传输层协议的细节. urlconnection 基于H ...

随机推荐

  1. 【原创】Kakfa utils源代码分析(二)

    我们继续研究kafka.utils包 八.KafkaScheduler.scala 首先该文件定义了一个trait:Scheduler——它就是运行任务的一个调度器.任务调度的方式支持重复执行的后台任 ...

  2. javascript设计模式实践之策略模式--输入验证

    策略模式中的策略就是一种算法或者业务规则,将这些策略作为函数进行封装,并向外提供统一的调用执行. 先定义一个简单的输入表单: <!DOCTYPE html> <html> &l ...

  3. 使用Dom4j进行XML解析

    1  概述 在进行ESB集成项目中,使用到了很多系统的接口,这些接口传输的数据大部分都采用了XML的格式,这样在使用ESB开发服务时就需要对XML数据进行解析或拼接的操作,本文以项目中流程服务为例,讲 ...

  4. 为什么我会选IT【这几年是怎么过来的】

    导火线 晚上跟高中同学说我近来的状况,无意中他提到:“如果当初没意外话,今年估计你就是一名老师了吧”.这让我很是怀念以前的日子,这四年来过的很快,开始想着当初是怎么过来的 : 高考 本人英语不佳,高考 ...

  5. Castle ActiveRecord相关错误

    1.Could not compile the mapping document: (string)错误? 如果确保配置文件没有错误,那请检查用户身份,必须是Administrator才行,即使有管理 ...

  6. C#编程总结(六)异步编程

    C#编程总结(六)异步编程 1.什么是异步? 异步操作通常用于执行完成时间可能较长的任务,如打开大文件.连接远程计算机或查询数据库.异步操作在主应用程序线程以外的线程中执行.应用程序调用方法异步执行某 ...

  7. (转)Android 系统 root 破解原理分析

    现在Android系统的root破解基本上成为大家的必备技能!网上也有很多中一键破解的软件,使root破解越来越容易.但是你思考过root破解的 原理吗?root破解的本质是什么呢?难道是利用了Lin ...

  8. 360手机卫士会影响Widget的运行

    最近开发了一个Widget,老是运行时间长了就会出现NullPointerException错误,一直不知道是什么原因造成的,后来把Widget加入360一键清理的保护名单,错误就少很多,但是仍然有错 ...

  9. How to DEBUG a trigger or procedure

    DEBUGGING STORED PROCEDURES Over the past several weeks, we’ve been working on debugging a stored pr ...

  10. chkconfig系统服务启动设置

    chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息. 谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接. 使用语法:chkconfig [--a ...