HTTP
常用响应头
HTTP响应中的常用响应头(消息头)
Location: 服务器通过这个头,来告诉浏览器跳到哪里
Server:服务器通过这个头,告诉浏览器服务器的型号
Content-Encoding:服务器通过这个头,告诉浏览器,数据的压缩格式
Content-Length: 服务器通过这个头,告诉浏览器回送数据的长度
Content-Language: 服务器通过这个头,告诉浏览器语言环境
Content-Type:服务器通过这个头,告诉浏览器回送数据的类型
Refresh:服务器通过这个头,告诉浏览器定时刷新
Content-Disposition: 服务器通过这个头,告诉浏览器以下载方式打数据
Transfer-Encoding:服务器通过这个头,告诉浏览器数据是以分块方式回送的
Expires: -1 控制浏览器不要缓存
Cache-Control: no-cache
Pragma: no-cache
常用的状态码简述
- 2XX
一般是请求成功
200 正常处理
204 成功处理,但服务器没有新数据返回,显示页面不更新
206 对服务器进行范围请求,只返回一部分数据
- 3XX
一般表示重定向
301 请求的资源已分配了新的URI中,URL地址改变了。【永久重定向】
302 请求的资源临时分配了新的URI中,URL地址没变【临时重定向】
303 与302相同的功能,但明确客户端应该采用GET方式来获取资源
304 发送了附带请求,但不符合条件【返回未过期的缓存数据】
307 与302相同,但不会把POST请求变成GET
- 4XX
表示客户端出错了。
400 请求报文语法错误了
401 需要认证身份
403 没有权限访问
404 服务器没有这个资源
- 5XX
服务器出错了
500 内部资源出错了
503 服务器正忙
HTTP版本区别
HTTP1.0和HTTP1.1最主要的区别就是:
- HTTP1.1默认是持久化连接!
相对于持久化连接还有另外比较重要的改动:
- HTTP 1.1增加host字段
- HTTP 1.1中引入了
Chunked transfer-coding
,范围请求,实现断点续传(实际上就是利用HTTP消息头使用分块传输编码,将实体主体分块传输) - HTTP 1.1管线化(pipelining)理论,客户端可以同时发出多个HTTP请求,而不用一个个等待响应之后再请求
- 注意:这个pipelining仅仅是限于理论场景下,大部分桌面浏览器仍然会选择默认关闭HTTP pipelining!
- 所以现在使用HTTP1.1协议的应用,都是有可能会开多个TCP连接的!
参考资料:
HTTP2基础
直观比较一下HTTP2和HTTP1.1的区别:
HTTP 1.1提出了管线化(pipelining)理论,但是仅仅是限于理论的阶段上,这个功能默认还是关闭了的。
管线化(pipelining)和非管线化的区别:
HTTP Pipelining其实是把多个HTTP请求放到一个TCP连接中一一发送,而在发送过程中不需要等待服务器对前一个请求的响应;只不过,客户端还是要按照发送请求的顺序来接收响应!
HTTP1.1新改动:
- 持久连接
- 请求管道化
- 增加缓存处理(新的字段如cache-control)
- 增加Host字段、支持断点传输等
HTTP2新改动:
- 二进制分帧
- 多路复用
- 头部压缩
- 服务器推送
参考资料:
- HTTP2 GitBook电子书(中文版):https://legacy.gitbook.com/book/ye11ow/http2-explained/details
- HTTP/2.0 相比1.0有哪些重大改进?https://www.zhihu.com/question/34074946
- HTTP/2 新特性浅析:https://segmentfault.com/a/1190000002765886
- HTTP2学习资料:https://imququ.com/post/http2-resource.html
- HTTP2简介和基于HTTP2的Web优化:http://caibaojian.com/toutiao/6641
- http2原理入门:https://blog.qingf.me/?p=600
- HTTP/2 对现在的网页访问,有什么大的优化呢?体现在什么地方?https://www.zhihu.com/question/24774343/answer/96586977
- HTTP/2笔记之流和多路复用:http://www.blogjava.net/yongboy/archive/2015/03/19/423611.aspx
HTTPS
使用了SSL建立安全的通信线路。
HTTPS使用的是共享密钥和公开私有密钥混合来进行加密的。由于公开私有密钥需要太多的资源,不可能一直以公开私有密钥进行通信。因此,HTTP在建立通信线路的时候使用公开私有密钥,当建立完连接后,随后就使用共享密钥进行加密和解密了
- 对称加密:
- 加密和解密都是用同一个密钥
- 非对称加密:
- 加密用公开的密钥,解密用私钥
- (私钥只有自己知道,公开的密钥大家都知道)
- 数字签名:
- 验证传输的内容是对方发送的数据
- 发送的数据没有被篡改过
- 数字证书 (Certificate)
- 认证机构证明是真实的服务器发送的数据。