HTTP协议并非对等的,须要客户端和服务端,经过请求和响应模型实现。web
对HTTP来讲,每一个请求响应都是独立的,不关心请求之间的联系。
HTTP是经过Cookie技术来保存用户状态的。apache
服务器经过Set-Cookie首部字段信息设置一个Cookie值,(服务器本身也会保存这个值)通知客户端要保存这个Cookie值,客户端在下次请求时自动在请求头中加入Cookie值后发送。服务器对比这个Cookie就知道这个那个用户发来的请求了。浏览器
http 1.0 1.1 都支持的:缓存
http1.1新增的:安全
仅http1.0支持,也就是被http/1.1淘汰了:服务器
又叫持久链接,好处是减小了TCP链接和断开的次数。
在http/1.1中默认是长链接了websocket
管线化,就是同时发送多个请求。至关于一个链接中的串行请求响应,变成并行的。并发
其中请求报文首部又分为app
响应报文首部又包含:webapp
压缩传输
gzip
compress
deflate
identity(不进行编码)
Chunked Transfer Coding
multipart/form-data
multipart/byterabge
boundary=xxx
能够套嵌使用
断点重连
Range: bytes=5001-10000
Accept
Accept-Charset
Accept-Encoding
Accept-Language
Content-Language
服务器驱动协商
客户端驱动协商
透明协商
RFC2616定义的状态码40种,WebDAV 扩展了一些状态码
WebDAV(Web-based Distributed Authoring and Versioning, 基于万维网的分布式创做和版本控制),至关于http/1.1的加强版,主要用于操做文件,好比网盘场景。
一个服务器应用(如一个Tomcat)如何部署多个不一样域名的web站点吗,而且端口都是默认端口?
首先DNS确定要为主机IP绑定两个域名,
当请求进入Tomcat中后如何区分这两个域名呢?经过请求头Host字段的域名来区分,Tomcat的server.xml的<Host>标签须要配置
<Host name="www.111.com" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Context path="" docBase="onefolder" debug="0" reloadable="true" /> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host> <Host name="www.222.com" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Context path="" docBase="twofolder" debug="0" reloadable="true" /> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host>
代理:接收请求后转发给其余服务器(不改变请求的URI?)
网关:与代理的功能很类似,也是转发请求。主要区别是网关能够改变请求的URI,使用非http协议请求后续的服务器。
隧道:在请求端与远距离的服务器创建安全的传输通道。
能够经过哪些特征证实本身呢?
HTTP使用的认证方式
Windows的统一认证:Kerberos认证、NTLM认证
原理:
缺点:
用户密码是明文传输,极不安全。
原理:不直接传输用户名密码,而是作散列以后进行传输。
须要客户端安装证书
原理:
SSL客户端认证采用双因素认证:加上了表单认证
自实现的表单认证方式
经过Cookie保存Session_Id, 注意要将此Cookie加上httponly 属性,防止跨站脚本攻击XSS。
Session_Id是与用户密码关联的。
用户密码的保存注意要salt+hash后保存,salt最好随机生成,这样能够保证相同密码的密文密码也是不一样的,更难以破解。
经过延迟应答来模拟服务器推送的功能。
缺点是显而易见的,须要保持链接不断,会消耗更多的资源。
Google在2010年发布了SPDY,旨在解决HTTP的性能瓶颈,缩短页面加载时间。那么,HTTP有哪些瓶颈呢?
修改HTTP协议自己!
SPDY没有彻底改写HTTP,而是在HTTP和SSL之间加入了一层SPDY层,能够称为会话层。
主要的功能:
须要浏览器和Web服务器作出相应的调整。
SPDY只是将单个域名的通讯进行了多路复用,当一个网站上使用多个域名下的资源时,改善效果会打折扣。
WebSocket 是Web浏览器与Web服务器之间全双工通讯标准。
WebSocket也是创建在HTTP基础上的协议,所以链接的发起方任然是客户端,一旦创建链接,就能够双向发送数据了!
特色:
过程:
握手-请求:须要添加几个请求头。
握手-响应:
经过HTTP创建WebSocket链接以后,再也不使用HTTP的数据帧,而是使用WebSocket独立的数据帧!!格式:ws://xxx.com/xxx
WebSocket API
js能够调用此API。
var socket = new WebSocket('ws://example.com:8080/updates'); socket.onopen = function(){ setInterval(function(){ if(socket.bufferedAmount == 0){ socket.send(getUpdateData()); } }); }
WebDAV是基于万维网的分布式创做和版本控制,用于文件操做,好比网盘。
原理:扩展了HTTP/1.1
增长了一些概念:集合、资源、属性、锁
添加了一些方法Method,与GET/POST同级
扩展了一些状态码: