我爱编程

HTTP/HTTPS协议 TCP Socket 区别

2018-03-11  本文已影响81人  CoderLWG

HTTP/HTTPS协议 TCP Socket 区别

一、HTTP请求与响应的内容

image.png

二、HTTP协议格式

一个请求包含一下内容:请求行 请求头 请求体
1.请求行:包含请求方法、请求统一资源标识符(URI)、HTTP协议版本
GET /XXServer/resources/images/1.jpg HTTP/1.1
2.请求头

image.png

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

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

可以获取目前被自动保存的所有cookie。

了解所有请求头请看这里请求头响应头列表
那在iOS中如何设置添加这些field呢?可以使用-[NSMutableURLRequest addValue: forHTTPHeaderField:]方法,获取当前请求已经设置的field可以用-[NSURLRequest allHTTPHeaderFields]。也就是我们可以通过以上接口定制我们所需要的请求头,但是有些field是不能改的,我们看一下iOS的描述

image.png 这几个是不能改的。

3.请求体

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

4.响应状态行
状态行是服务端返回给客户端的状态信息,包含HTTP版本号、状态码、状态码对应的英文名称。
典型的正确状态行:

HTTP/1.1 200 OK

5.响应头与响应实体
这部分与请求部分差异不大,响应头的字field会有稍许不同

三、HTTP与HTTPS区别

最重要在于会话的连接建立阶段,TCP连接建立好,HTTP请求发送前,客户端与服务器之间必须建立SSL会话。

四、HTTP、Socket、TCP的区别

image.png

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

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

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

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

在iOS中,发HTTP请求一般用原生的NSURLConnection、NSURLSession或者开源的AFNetWorking。连接Socket连接我用的比较多是robbiehanson大神的CocoaAsyncSocket

上一篇下一篇

猜你喜欢

热点阅读