简单了解HTTP
我们现在所说的http协议大多是使用HTTP/1.1版本
简单看一下发送请求和接收数据
首先请求一个网址,我们最熟悉的知乎日报消息接口
http://news-at.zhihu.com/api/4/news/latest
然后我们用Chrome自带的开发者工具来查看一下这次请求的请求头
Request Headers
GET /api/4/news/latest HTTP/1.1
Host: news-at.zhihu.com
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Linux; Android 5.1.1; Nexus 6 Build/LYZ28E) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.23 Mobile Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8
开始的GET为我们请求的方法method
,然后 /api/4/news/latest 是我们想要访问的资源,也叫Request Uri,HTTP/1.1也就是我们http协议的版本,而 news-at.zhihu.com 则就是我们的服务器地址了。
一个完整的请求是由以下组成
- 请求方法
- Request Uri
- http协议版本
- 服务器地址
- 请求首部字段(Connection以及后面的字段)
- 内容实体(这里没有实体)
当我们的服务器接收到请求,那么就会给我们返回
Response Headers
HTTP/1.1 200 OK
Date: Wed, 23 Nov 2016 12:34:31 GMT
Content-Type: application/json; charset=UTF-8
Transfer-Encoding: chunked
Etag: W/"5b1c62c079999ad155b99ed987f581b3be9363eb"
X-Backend: zhihu-daily.zhihu-daily-web.da6ac16e
Content-Encoding: gzip
X-Req-ID: 2AADF158358CD7
Server: ZWS
Vary: Accept-Encoding
首先HTTP/1.1不用多说,是http的版本,200是返回给我们的状态码,OK是原因短语,然后Date是我们当前响应的时间,接着是我们返回的类型等等。
HTTP为不保存状态的协议
什么叫不保存状态的协议?
http协议自身不对请求和响应之间的状态进行保存,也就是说只要有新的请求,就会有新的响应。也不会做持久化的处理。
持久化连接
在以前的http版本中是没有持久化的这个概念的,所以就是每次建立连接获取数据后,都要关闭连接,那么我在频繁请求大数据的时候,这样就会显得很麻烦,并且效率不高。
所以在1.1的版本中,http新加了一个标准:也就是只要当任意一方不提出断开连接,那么久一直保持连接状态。所以在1.1和部分1.0版本中默认就是持久连接
Cookie
刚才说了http是无状态协议,那么他就不会对他的响应和请求做处理,那么比如我逛购物网站的话,那么这样就成为了一个问题,岂不是我每次跳转一个页面都会让我登录?所以这个时候就引入了Cookie。
例:现在请求www.baidu.com
Response Headers
HTTP/1.1 200 OK
Server: bfe/1.0.8.18
Date: Wed, 23 Nov 2016 13:03:42 GMT
Content-Type: text/html;charset=utf-8
Content-Length: 19119
Connection: keep-alive
Cache-Control: no-cache
Content-Encoding: gzip
Set-Cookie: H_WISE_SIDS=107504_108269_100273_111887_100103_111914_107851_103342_111962_110773_110631_110642_110020_107800_111123_110610_110717_110693_111870_110497_110010_111550_107917_109586_111326_111927_109588_110655_107311_111280_110031_111216_110085; path=/; domain=.baidu.com
Set-Cookie: BDSVRTM=148; path=/
Strict-Transport-Security: max-age=604800
Traceid: 147990622201950656101683597674316466511
Set-Cookie: __bsi=12477407333812093255_00_108_R_N_153_0303_C02F_N_I_I_0; expires=Wed, 23-Nov-16 13:03:47 GMT; domain=www.baidu.com; path=/
当我们请求服务器时,服务器会通过Set-Cookie字段来通知我们客户端保存Cookie,所以当我们客户端保存了这个Cookie,并且下次请求用这个Cookie来请求的话,服务器就会发现我们的Cookie,并且来查找当前是哪个客户端发来的请求,然后对比服务器的记录来获得之前的状态信息
最后
爱生活,爱小丽,爱Android