《图解HTTP》笔记

一、网络基础

1、发送端在层与层之间传输数据时,每经过一层时必定会被打上一个该层所属的首部信息。反之,接收端在层与层传输数据时,每经过一层时会把对应的首部消去。http位于应用层,tcp位于传输层,ip位于网络层。
2、ARP(Address Resolution Protocol)是一种用以解析地址的协议,根据通信方的 IP 地址就可以反查出对应的 MAC 地址。
3、TCP位于传输层,为了方便传输,将大块数据分割成以报文段(segment)为单位的数据包进行管理。而可靠的传输服务是指,能够把数据准确可靠地传给对方。
4、URI格式
协议类型:使用http:或https:等协议方案名获取访问资源时要指定协议类型。不区分字母大小写,最后附一个冒号(:)。
登录信息(认证):指定用户名和密码作为从服务器端获取资源时必要的登录信息(身份认证)。此项是可选项。
服务器地址: 使用绝对 URI 必须指定待访问的服务器地址。地址可以是类似hackr.jp 这种 DNS 可解析的名称,或是 192.168.1.1 这类 IPv4 地址名,还可以是 [0:0:0:0:0:0:0:1] 这样用方括号括起来的 IPv6 地址名。
服务器端口号: 指定服务器连接的网络端口号。此项也是可选项,若用户省略则自动使用默认端口号。
带层次的文件路径: 指定服务器上的文件路径来定位特指的资源。这与 UNIX 系统的文件目录结构相似。
查询字符串: 针对已指定的文件路径内的资源,可以使用查询字符串传入任意参数。此项可选。
片段标识符: 使用片段标识符通常可标记出已获取资源中的子资源(文档内的某个位置)。该项也为可选项。

 

二、简单的http协议

1、请求报文是由请求方法、请求 URI、协议版本、可选的请求首部字段和内容实体构成的。
2、响应报文基本上由协议版本、状态码(表示请求成功或失败的数字代码)、用以解释状态码的原因短语、可选的响应首部字段以及实体主体构成。
3、报文包括报文首部和报文主体,报文首部包括请求行/状态行、通用首部、请求首部/响应首部、实体首部、其他(Cookie等)。
4、Cookie 会根据从服务器端发送的响应报文内的一个叫做 Set-Cookie 的首部字段信息,通知客户端保存 Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入 Cookie 值后发送出去。

 

三、http报文

1、报文包括报文首部和报文主体,报文首部包括请求行/状态行、通用首部、请求首部/响应首部、实体首部、其他(Cookie等)。
2、HTTP报文的主体用于传输请求或响应的实体主体。通常,报文主体等于实体主体。只有当传输中进行编码操作时,实体主体的内容发生变化,才导致它和报文主体产生差异。
3、压缩传输的内容编码,HTTP协议中有一种被称为内容编码的功能能进行压缩操作。内容编码指明应用在实体内容上的编码格式,并保持实体信息原样压缩。
4、分块传输编码(不是tcp中的数据包)会将实体主体分成多个部分(块)。每一块都会用十六进制来标记块的大小,而实体主体的最后一块会使用“0”来标记。
5、指定范围发送的请求叫做范围请求(Range Request)。对一份10000字节大小的资源,如果使用范围请求,可以只请求5001~10000字节内的资源。

 

四、http首部

1、报文首部包括请求行/状态行、通用首部、请求首部/响应首部、实体首部、其他(Cookie等)。
通用首部字段: 请求报文和响应报文两方都会使用的首部。
请求首部字段: 从客户端向服务器端发送请求报文时使用的首部。补充了请求的附加内容、客户端信息、响应内容相关优先级等信息。
响应首部字段: 从服务器端向客户端返回响应报文时使用的首部。补充了响应的附加内容,也会要求客户端附加额外的内容信息。
实体首部字段: 针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等与实体有关的信息。
2、通用首部字段
Connection:控制不再转发给代理的首部字段,管理持久连接。
Upgrade: 用于检测HTTP协议及其他协议是否可使用更高的版本进行通信,其参数值可以用来指定一个完全不同的通信协议。配合使用Connection: Upgrade。
Via: 为了追踪客户端与服务器之间的请求和响应报文的传输路径。报文经过代理或网关时,会先在首部字段Via中附加该服务器的信息,然后再进行转发
3、请求首部字段
Accept: 可通知服务器,客服端能够处理的媒体类型及媒体类型的相对优先级。若想要增加优先级,则使用q=来额外表示权重值,用分号进行分隔。权重值q的范围是0~1(可精确到小数点后3位),且1为最大值。不指定权重q值时,默认权重为q=1.0。
Authorization: 是用来告知服务器,客服端的认证信息。通常,想要通过服务器认证的用户代理会在接收到返回的401状态码响应后,把首部字段Authorization加入请求中。
HOST: 相同的IP地址下部署运行着多个域名,那么服务器就会无法理解究竟是哪个域名对应的请求。因此,就需要使用首部字段Host来明确指出请求的主机名。
Range: 对于只需获取部分资源的范围请求,包含首部字段Range即可告知服务器资源的指定范围。在处理请求之后返回状态码为206 Partial Content的响应。无法处理该范围请求时,则会返回状态码200 OK的响应及全部资源。
Referer: 会告知服务器请求的原始资源的URI。服务器就知道请求是从哪个web页面发起的。
User-Agent: 会将创建请求的浏览器和代理名称等信息传达给服务器。
4、响应首部字段:
Location: 将响应接收方引导至某个与请求URI位置不同的资源。基本上,该字段会配合3xx :Redirection的响应,提供重定向的URI。
Retry-After: 告知客户端应该在多久之后再次发送请求。主要配合状态码503 Service Unavailable响应,或3xx Redirect响应一起使用。
WWW-Authenticate: 用于HTTP访问认证。它会告知客户端适用于访问请求URI所指定资源的认证方案(Basic或是Digest,https是采用SSL/TSL)和带参数提示的质询(challenge)。状态码401 Unauthorized响应中,肯定带有首部字段WWW-Authenticate。
5、实体首部字段:
Allow: 用于通知客户端能够支持的所有HTTP方法。当服务器接收到不支持的HTTP方法时,会以状态码405 Method Not Allowed作为响应返回。
Content-Encoding: 会告知客户端服务器对实体的主体部分选用的内容编码方式。内容编码是指在不丢失实体信息的前提下所进行的压缩。

 

五、http与web服务器

1、代理: 代理服务器的基本行为就是接收客户端发送的请求后转发给其他服务器。代理不改变请求URI,会直接发送给前方持有资源的目标服务器。转发时,需要附加Via首部字段以标记出经过的主机信息。
2、网关: 网关的工作机制和代理十分相似。而网关能使通信线路上的服务器提供非HTTP协议服务。
3、隧道: 可按要求建立起一条与其他服务器的通信线路,届时使用SSL等加密手段进行通信。隧道的目的是确保客户端能与服务器进行安全的通信。

 

六、HTTPS

1、DoS攻击:无意义的请求照单全收。无法阻止海量请求下的DoS攻击(Denial of Service,拒绝服务攻击)。
2、HTTPS: 并非是应用层的一种新协议。只是HTTP通信接口部分用SSL(Secure Socket Layer)和TLS(Transport Layer Security)协议代替而已。通常,HTTP直接和TCP通信。当使用SSL时,则演变成先和SSL通信,再由SSL和TCP通信了。简言之,所谓HTTPS,其实就是身披SSL协议这层外壳的HTTP。
3、HTTPS加密:采用共享密钥加密和公开密钥加密两者并用的混合加密机制。公开密钥加密很安全。但是公开密钥加密与共享密钥加密相比,其处理速度要慢。
4、HTTPS通信步骤
步骤1:客户端通过发送Client Hello报文开始SSL通信。报文中包含客户端支持的SSL的指定版本、加密组件(Cipher Suite)列表(所使用的加密算法及密钥长度等)。
步骤2:服务器可进行SSL通信时,会以Server Hello报文作为应答。和客户端一样,在报文中包含SSL版本以及加密组件。服务器的加密组件内容是从接收到的客户端加密组件内筛选出来的。
步骤3:之后服务器发送Certificate报文。报文中包含公开密钥证书。
步骤4:最后服务器发送Server Hello Done报文通知客户端,最初阶段的SSL握手协商部分结束。
步骤5:SSL第一次握手结束之后,客户端以Client Key Exchange报文作为回应。报文中包含通信加密中使用的一种被称为Pre-mastersecret的随机密码串(即共享密钥)。该报文已用步骤3中的公开密钥进行加密。
步骤6:接着客户端继续发送Change Cipher Spec报文。该报文会提示服务器,在此报文之后的通信会采用Pre-master secret密钥(即共享密钥)加密。
步骤7:客户端发送Finished报文。该报文包含连接至今全部报文的整体校验值。这次握手协商是否能够成功,要以服务器是否能够正确解密钥)加密。
步骤7:客户端发送Finished报文。该报文包含连接至今全部报文的整体校验值。这次握手协商是否能够成功,要以服务器是否能够正确解密(使用私有密钥)该报文作为判定标准。
步骤8:服务器同样发送Change Cipher Spec报文。
步骤9:服务器同样发送Finished报文。
步骤10:服务器和客户端的Finished报文交换完毕之后,SSL连接就算建立完成。当然,通信会受到SSL的保护。从此处开始进行应用层协议的通信,即发送HTTP请求。
步骤11:应用层协议通信,即发送HTTP响应。
步骤12:最后由客户端断开连接。断开连接时,发送close_notify报文。这步之后再发送TCP FIN报文来关闭与TCP的通信。

 

七、基于HTTP的功能追加协议

1、HTTP标准瓶颈
一条连接上只可发送一个请求。
请求只能从客户端开始。客户端不可以接收除响应以外的指令。
请求/响应首部未经压缩就发送。首部信息越多延迟越大。
发送冗长的首部。每次互相发送相同的首部造成的浪费较多。
可任意选择数据压缩格式。非强制压缩发送。
2、SPDY协议
(1)SPDY目标
陆续出现的Ajax和Comet等提高易用性的技术,一定程度上使HTTP得到了改善,但HTTP协议本身的限制也令人有些束手无策。为了进行根本性的改善,需要有一些协议层面上的改动。处于持续开发状态中的SPDY协议,正是为了在协议级别消除HTTP所遭遇的瓶颈。
(2)SPDY设计
SPDY没有完全改写HTTP协议,而是在TCP/IP的应用层与运输层之间通过新加会话层的形式运作。同时,考虑到安全性问题,SPDY规定通信中使用SSL。SPDY以会话层的形式加入,控制对数据的流动,但还是采用HTTP建立通信连接。因此,可照常使用HTTP的GET和POST等方法、Cookie以及HTTP报文等。
(3)SPDY功能
多路复用流:通过单一的TCP连接,可以无限制处理多个HTTP请求。所有请求的处理都在一条TCP连接上完成,因此TCP的处理效率得到提高。
赋予请求优先级:SPDY不仅可以无限制地并发处理请求,还可以给请求逐个分配优先级顺序。这样主要是为了在发送多个请求时,解决因带宽低而导致响应变慢的问题。
压缩HTTP首部:压缩HTTP请求和响应的首部。这样一来,通信产生的数据包数量和发送的字节数就更少了。
推送功能:支持服务器主动向客户端推送数据的功能。这样,服务器可直接发送数据,而不必等待客户端的请求。
服务器提示功能:服务器可以主动提示客户端请求所需的资源。由于在客户端发现资源之前就可以获知资源的存在,因此在资源已缓存等情况下,可以避免发送不必要的请求。
3、WebSocket协议
(1)WebSocket目标
WebSocket,即Web浏览器与Web服务器之间全双工通信标准。其中,WebSocket协议由IETF定为标准,WebSocket API由W3C定为标准。仍在开发中的 WebSocket 技术主要是为了解决Ajax和Comet里XMLHttpRequest附带的缺陷所引起的问题。
(2)WebSocket设计
由于是建立在HTTP基础上的协议(使用头部字段Upgrade:WebSocket),因此连接的发起方仍是客户端,而一旦确立WebSocket通信连接,不论服务器还是客户端,任意一方都可直接向对方发送报文。
(3)WebSocket功能
推送功能:支持由服务器向客户端推送数据的推送功能。这样,服务器可直接发送数据,而不必等待客户端的请求。
减少通信量:只要建立起WebSocket连接,就希望一直保持连接状态。和HTTP相比,不但每次连接时的总开销减少,而且由于WebSocket的首部信息很小,通信量也相应减少了。

 

 

tomcat配置http和https
在server.xml中开启两个connector

http:
<Connector port="8080" maxHttpHeaderSize="8192"  
        maxThreads="150" minSpareThreads="25" maxSpareThreads="75"  
        enableLookups="false" redirectPort="8443" acceptCount="100"  
        connectionTimeout="20000" disableUploadTimeout="true"/>  

https:
<Connector port="8081" maxHttpHeaderSize="8192"  
        maxThreads="150" minSpareThreads="25" maxSpareThreads="75"  
        enableLookups="false" disableUploadTimeout="true"  
        acceptCount="100" scheme="https" secure="true"  
        clientAuth="false" sslProtocol="TLS" keystorePass="123456" keystoreFile="d:/tomcat.keystore"/>  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值