HTTP协议
来源:互联网 发布:淘宝旗舰店和京东自营 编辑:程序博客网 时间:2024/06/10 00:46
请求:请求行,请求头(headerField),请求体(body)。
响应:状态行,响应头(headerField),响应体(body)。
(2)请求行:请求行包含请求方法(Method)、请求统一资源标识符(URI)、HTTP版本号
Method:POST、GET、HEAD、PUT等。
URI:就是URL中排除掉Host剩下的部分,也就是资源在服务器本地上的路径。
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。
(3)请求体
真正需要发给服务端的数据,在使用POST-multipart上传请求中请求体就是上传文件的二进制NSData类型数据;在GET请求中请求体为空;在普通的POST请求中请求体就是一些表单数据。在iOS中一般用NSURLRequest
与NSMutableURLRequest
的HTTPBody
属性表示,添加body用-[NSMutableURLRequest setHTTPBody:]
。
状态行是服务端返回给客户端的状态信息,包含HTTP版本号、状态码、状态码对应的英文名称。
以下就是典型的正确状态行:HTTP/1.1 200 OK
这个部分需要讲的是错误码。事实上HTTP请求错误码可以根据错误码从左往右第一个数字大致分为以下几类:
1XX:信息提示。不代表成功或者失败,表示临时响应,比如100表示继续,101表示切换协议
2XX: 成功
3XX: 重定向
4XX:客户端错误,很有可能是客户端发生问题,如亲切可爱的404
表示未找到文件,说明你的URI是有问题的,服务器机子上该目录是没有该文件的;414
URI太长
5XX: 服务器错误,比如504
网关超时
三、HTTP版本简介
这里我把HTTP版本简单分为三类:1.1之前,1.1,2.0,针对这三类做个主要差异的介绍:
HTTP 1.1之前
- 不支持持久连接。一旦服务器对客户端发出响应就立即断开TCP连接
- 无请求头跟响应头
- 客户端的前后请求是同步的。下一个请求必须等上一个请求从服务端拿到响应后才能发出,有点类似多线程的同步机制。
HTTP 1.1(主流版本)
与1.1之前的版本相比,做了以下性能上的提升
- 增加请求头跟响应头
- 支持持久连接。客户端通过请求头中指定Connection为keep-alive告知服务端不要在完成响应后立即释放连接。HTTP是基于TCP的,在HTTP 1.1中一次TCP连接可以处理多次HTTP请求
- 客户端不同请求之间是异步的。下一个请求不必等到上一个请求回来后再发出,而可以连续发出请求,有点类似多线程的异步处理。
HTTP 2.0
本着向下兼容的原则,1.1版本有的特性2.0都具备,也使用相同的API。但是2.0将只用于https网址。
四、HTTP、Socket、TCP的区别
- HTTP协议
- http协议
- HTTP协议
- HTTP协议
- HTTP协议
- http协议
- HTTP协议
- HTTP协议
- HTTP协议。。。
- HTTP协议
- HTTP协议
- HTTP协议
- HTTP协议
- HTTP协议
- http协议
- HTTP协议
- http协议
- HTTP协议
- java接口 学习
- jQuery
- 蓝桥杯:01字符串
- 利用责任链模式模拟加薪请求 C++
- JS 事件基础 跟随鼠标移动
- HTTP协议
- 3.25日mybatis记录
- HDU 5650 so easy 水的666
- 大数相乘算法 List实现
- 蓝桥杯:字母图形
- 分页加载Demo
- ISE综合选项Keep Hierarchy
- typeof、offsetof、container_of
- 《vb.net视频之沉淀》