iOS之 HTTP、Socket、TCP的区别(易混
一、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的区别(易混的更多相关文章
- iOS中 HTTP/Socket/TCP/IP通信协议具体解释 韩俊强的博客
简介: // OSI(开放式系统互联), 由ISO(国际化标准组织)制定 // 1. 应用层 // 2. 表示层 // 3. 会话层 // 4. 传输层 // 5. 网络层 // 6. 数据链接层 / ...
- iOS中 HTTP/Socket/TCP/IP通信协议详解
// OSI(开放式系统互联), 由ISO(国际化标准组织)制定 // 1. 应用层 // 2. 表示层 // 3. 会话层 // 4. 传输层 // 5. 网络层 // 6. 数据链接层 // 7. ...
- iOS中 HTTP/Socket/TCP/IP通信协议详解 韩俊强的博客
每日更新关注:http://weibo.com/hanjunqiang 新浪微博 简单介绍: // OSI(开放式系统互联), 由ISO(国际化标准组织)制定 // 1. 应用层 // 2. 表示层 ...
- HTTP.Socket.TCP详解
这会没事,整理了一下HTTP,socket,TCP之间的关系与区别,我们在面试的时候应该会经常问到这方面的东西,那么什么是HTTP呢? HTTP属于老话题了,在项目中我们经常需要往服务端发POST或者 ...
- http、TCP/IP协议与socket之间的区别
http.TCP/IP协议与socket之间的区别 网络由下往上分为: www.2cto.com 物理层-- 数据链路层-- 网络层-- ...
- TCP/IP Http 和Https socket之间的区别
TCP/IP Http 和Https socket之间的区别 TCP/IP是个协议组,它分为网络层,传输层和应用层, 在网络层有IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议. ...
- http、TCP/IP协议与socket之间的区别(转载)
http.TCP/IP协议与socket之间的区别 https://www.cnblogs.com/iOS-mt/p/4264675.html http.TCP/IP协议与socket之间的区别 ...
- iOS Socket/Tcp编程 GCDAsyncSocket的实战(带回调)
很多同学一听到Socket TCP UDP 这几个字眼感觉特别害怕,很怕在工作当中使用,因为他们太底层了.下面我把我在工作中使用Socket类库GCDAsyncSocket进行一次实战 文章中只适用于 ...
- UrlConnection连接和Socket连接的区别
关于UrlConnection连接和Socket连接的区别,只知道其中的原理如下: 抽象一点的说,Socket只是一个供上层调用的抽象接口,隐躲了传输层协议的细节. urlconnection 基于H ...
随机推荐
- SQL--工作中遇到的
--递归查询产品分类 WITH cte AS ( SELECT * FROM syn_Categories WHERE id = $CategoryID$ UNION ALL SELECT syn_C ...
- 30天C#基础巩固----查找XML文件元素
一:XML文档 了解xml文档. 利用代码来创建XML文档. //引用命名空间+using System.Xml; XmlDocument xdoc=new XmlDocument(); XmlDec ...
- 在DevExpress中使用WizardControl控件构建多步向导界面
利用好的界面控件,往往能做成比较界面体验效果.在一些界面操作里面,我们可能把它拆分为几部进行处理,这个时候引入WizardControl向导控件应该是比较不错的选择了.多步的处理方式,可以让用户避免一 ...
- 新学C++的for,switch和随机数
通过一个小程序学习: #include<iostream> #include<cstdlib> #include<ctime> using namespace st ...
- 奔跑的歌颂 diskgenius 找回了20G数据
2.0同学家的电脑不慎重装系统,结果默认重新分区.其他倒没什么数据,就是几千张记录孩子成长的照片最为珍贵.为了找回数据,用U盘启动,使用Diskgenius全部找回,在此奔歌一下.
- SQL Server2000导出数据时包含主键、字段默认值、描述等信息
时经常用SQL Server2000自带的导出数据向导将数据从一台数据库服务器导出到另一台数据库服务器: 结果数据导出了,但表的主键.字段默认值.描述等信息却未能导出,一直没想出什么方法,今天又尝试了 ...
- win8.1安装Team Function Server 2013
1.系统是Win8.1企业版64位 2.Visual Studio 2013 3.数据库是Sql Server2012 (这里注意需要升级到SP1否则安装可能失败下载地址http://www.micr ...
- 在Win Server 2012中安装.NET Framework 3.5的问题
在Windows Server 2012 上安装 SQL Server 2012 时,提示 启用 Windows 功能 NetFx3 时出错,错误代码:-2146498298.请尝试从 Windows ...
- 不可或缺 Windows Native (12) - C++: 引用类型
[源码下载] 不可或缺 Windows Native (12) - C++: 引用类型 作者:webabcd 介绍不可或缺 Windows Native 之 C++ 引用类型 示例CppReferen ...
- jquery可见性选择器(匹配所有隐藏的元素)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...