We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
1.1 使用 HTTP 协议访问web
IP 协议: IP 协议是在源地址和目的地址之间传送一种称为数据包的东西;
TCP 协议 TCP 协议是提供可靠的字节流服务;
DNS 服务 提供域名到IP地址之间的解析服务;
在使用 HTTP 协议通信的过程中,IP 协议、TCP 协议 和 DNS 服务 起到的作用:
request headers
contention: keep-alive
contention: Keep-Alive
Connection: close
HTTP 协议是无状态的,为了想保留某些状态,引入了cookie; 本来想写点,但是看了一篇博客,感觉写得非常好,就把地址粘在这里吧https://segmentfault.com/a/1190000004556040
是客户端和服务器端的中间人,是一种有转发功能的应用程序;代理服务器的基本行为就是接收客户端发送的请求后转发(不会改变URI)给其他的服务器; - 缓存代理 代理转发响应的时候,会预先将资源的副本保存到代理服务器上,当代理再次接收相同的资源请求时,就可以将之前缓存的资源作为响应返回。
网关是转发其他服务器通信数据的服务器。当接收到客户端的请求的时候,它就像是自己拥有其他服务器的资源一样来处理。网关能使通信线路上的协议提供非HTTP协议服务。
隧道可按要求建立起一条与其他服务器通信线路。
HTTP 首部可以在客户端和服务器端传递额外重要的信息;
Cache-Control 可以操作缓存服务器的缓存机制;
Connection
Date HTTP 报文的日期和时间
Transfer-Encoding 采用哪种编码方式进行发送
Via 报文经过的传输路径(网关或者代理)
Warning 通知用户一些和缓存相关的问题警告;
Accept: text/html; q=0.3; text/plian
Accept-Charset: iso-8859-5, unicode-1-1; q=0.8
通知服务器,用户代理支持的内容编码以内容编码的优先级顺序;
Accept-Encoding: gzip
Accept-Language: zh-cn
Host: www.hackr.jp
if-modified-since
range: bytes=5001-10000
Age 告诉客户端,源服务器在多久前创建了响应。zi'duan'z字段值的单位为秒;
Etag 可将资源以字符串的形式做唯一性标识的方式,资源的URI虽然没有变,但是当资源更新后,ETAG值会改变;
Server 告诉客户端当前服务器上安装的HTTP服务器应用程序的信息。
实体首部字段
Allow 告诉客户端能够支持的所有HTTP方法;
Content-Length 实体主体部分的大小,** 对实体主体进行内容编码传输的时候,不能再使用content-length;
为cookie 服务的首部字段
set-cookie 字段的属性
https的通信流程(阮大神的一篇博文):http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html
SSL客户端认证和表单认证结合,SSL客户端认证来认证客户端的计算机,而表单认证来确定用户本人的行为;
Ajax的核心技术是XMLHttpRequest的API,通过javascript的脚本的调用就能和服务器进行HTTP通信了,借由这种手段,就能从已经加载完毕web页面上发起请求,只更新局部页面。
使用延迟应答,模拟实现服务器向客户端进行推送的功能。 通常,服务器端接收到请求,在处理完毕后就会立即响应,但是为了实现推送功能,Comet会先将响应置于挂起的状态,等服务器端有内容更新的时候,再返回响应。
SPDY是Google 开发的基于传输控制协议 (TCP) 的应用层协议 ,开发组正在推动 SPDY 成为正式标准(现为互联网草案)。
在应用层和传输层之间增加了一个二进制分帧层,以达到“在不改动HTTP语义,HTTP方法、状态码、URI机及首部字段的情况下,突破HTTP/1.1 的性能限制,改进传输性能,实现低延迟和高吞吐量”;
在二进制分帧层上,HTTP2.0 会将所有的信息分割为更小的消息和帧,并对它们采用二进制格式的编码,其中HTTP1.X 的首部信息会被封装到Headers帧,而request body则封装到Data帧里。
HTTP2.0 通信都在一个连接上完成,这个连接可以承载任意数量的双向数据流。每个数据流以消息的形式发送,而消息又是由一个或者多个帧组成,这些帧可以乱序发送,然后再根据每个帧首部的流标识符重新组装;
HTTP/2.0规定了在客户端和服务器端会**使用并且维护「首部表」**来跟踪和存储之前发送的键值对,对于相同的头部,不必再通过请求发送,只需发送一次。
如果请求中不包含首部,那么首部的开销就是零字节,此时所有的首部都自动使用之前请求发送的首部;如果首部发变化了,那么只需要发送变化了数据在Headers帧里面,新增或者修改的首部帧会被追加到“首部表”。首部表在HTTP2.0连接存续4qi期内始终的存在,由客户端和服务器共同渐进地更新。
HTTP2.0所有的通信都是在一个TCP连接上完成的。HTTP2.0 把 HTTP 协议通信的基本单位缩小为一个个的帧,这些帧对应着逻辑流中的消息。**这些帧并行地同在一个TCP连接上双向交换消息。**也就是说同一链接上有多个不同方向的数据流在传输。客户端可以一边乱序发送streams,也可以一边接收服务器的响应,而服务器端同理。
优点 HTTP性能的关键在于低延迟,而不是高带宽。大多数的HTTP连接的时间短,而且是突发性的,但是TCP只在长时间连接传输大块数据时效率才最高。HTTP2.0 通过让所有的数据流公用一个连接,可以更有效地使用TCP连接,让高带宽也能真正服务于HTTP的性能。 同时,单链接多资源的方式,有如下好处:
可以减少服务器的压力,内训占用少,连接的吞吐量大;
由于 TCP 连接减少,使得网络阻塞的情况得以改观;
慢启动时间减少,拥塞和丢包恢复速度更快。
因此, “资源合并减少请求”的优化手段对于HTTP2.0来说是没有效果的。
既然所有资源都是并行发送,那么就需要“优先级”的概念了,这样就可以对重要的文件进行先传输,加速页面的渲染。
在 HTTP2.0中,服务器推送是指客户端请求之前发送数据的机制。
虽然 HTTP2.0 协议并没有声明一定要使用SSL,但是Google Chrome 等浏览器强制要使用 HTTP2.0 必须使用SSL。
The text was updated successfully, but these errors were encountered:
No branches or pull requests
第一章 了解web及网络基础
1.1 使用 HTTP 协议访问web
通过发送请求获取服务器资源的web浏览器等;
使用一种名为 HTTP 的协议作为规范,完成从客户端到服务端等一系列运作流程,简单的说 Web 就是建立在 HTTP 协议上通信的;
1.2 HTTP 的诞生
HTML, HTTP, URL
1.3 网络基础 TCP/IP
计算机和网络设备之间相互通信所要遵循的规则;
互联网相关的各类协议族的总称;
1.4 与HTTP 关系密切的协议:IP、TCP 和 DNS & 1.5 负责域名解析的DNS服务 & 1.6 各种协议与HTTP协议的关系
IP 协议:
IP 协议是在源地址和目的地址之间传送一种称为数据包的东西;
TCP 协议
TCP 协议是提供可靠的字节流服务;
DNS 服务
提供域名到IP地址之间的解析服务;
在使用 HTTP 协议通信的过程中,IP 协议、TCP 协议 和 DNS 服务 起到的作用:
1.7 URI 和 URL
第一章总结
第二章 简单的HTTP协议
POST/GET
TCP的短连接,持久化链接,管线化
HTTP 协议是无状态的,简单说就是打开一个服务器上的网页和之前打开的网页之间没有任何的联系,比如,你登录了一个网站,跳转到其他的页面,登录的这些信息就不存在了。
request headers
中看到contention: keep-alive
字段;contention: Keep-Alive
;Connection: close
;Cookie
第四章 返回结果的 HTTP 状态码
第五章 与HTTP协作的web服务
代理
是客户端和服务器端的中间人,是一种有转发功能的应用程序;代理服务器的基本行为就是接收客户端发送的请求后转发(不会改变URI)给其他的服务器;
- 缓存代理
代理转发响应的时候,会预先将资源的副本保存到代理服务器上,当代理再次接收相同的资源请求时,就可以将之前缓存的资源作为响应返回。
网关
网关是转发其他服务器通信数据的服务器。当接收到客户端的请求的时候,它就像是自己拥有其他服务器的资源一样来处理。网关能使通信线路上的协议提供非HTTP协议服务。
隧道
第五章 HTTP 首部
概念
HTTP 首部可以在客户端和服务器端传递额外重要的信息;
HTTP/1.1 通用首部字段
Cache-Control
可以操作缓存服务器的缓存机制;
Connection
Date
HTTP 报文的日期和时间
Transfer-Encoding
采用哪种编码方式进行发送
Via
报文经过的传输路径(网关或者代理)
Warning
通知用户一些和缓存相关的问题警告;
请求首部字段
Accept: text/html; q=0.3; text/plian
Accept-Charset: iso-8859-5, unicode-1-1; q=0.8
通知服务器,用户代理支持的内容编码以内容编码的优先级顺序;
Accept-Encoding: gzip
Accept-Language: zh-cn
Host: www.hackr.jp
如果在
if-modified-since
字段指定的日期时间后,资源发生了更新,服务器会接受请求;最大的转发次数
range: bytes=5001-10000
请求获取从第5001字节到10000字节的资源;用户传达浏览器的种类;
响应首部字段
Age
告诉客户端,源服务器在多久前创建了响应。zi'duan'z字段值的单位为秒;
Etag
可将资源以字符串的形式做唯一性标识的方式,资源的URI虽然没有变,但是当资源更新后,ETAG值会改变;
Server
告诉客户端当前服务器上安装的HTTP服务器应用程序的信息。
实体首部字段
Allow
告诉客户端能够支持的所有HTTP方法;
Content-Length
实体主体部分的大小,** 对实体主体进行内容编码传输的时候,不能再使用content-length;
为cookie 服务的首部字段
set-cookie 字段的属性
第七章 确保Web安全的HTTPS
HTTP 的缺点:
通信使用明文(不加密),可能会被窃听
TCP/IP 协议族的工作机制,通信内容在所有的通信线路上都有可能遭到窥视;
不验证通信方的身份,可能遭到伪装
无法证明报文的完整性,可能已遭篡改
由于HTTP 无法证明通信报文的完整性,说以即使请求或者响应的内容遭到了篡改(中间人攻击),也没有办法获悉。
虽然有以上的方法,但是这些方法无法百分百的保证确认结果,因为PGP或MD5也可能被改写,为了防止这些弊端,有必要使用HTTPS。
加密技术
共享密钥加密/对称密钥加密
公开密钥加密/非对称加密
混合加密机制
数字签名
一封信中,文末的签名是为了证明这封信是签名者写的,同理,数字签名也是为了证明某个消息是特定的某个人发的(有效性);同时,数字签名还能证明消息没有被篡改(完整性);
一般不对消息直接进行签名,而是对消息的哈希值进行签名。
证书
证书其实就是对公开加密方法中的公钥进行加密,是对公钥的合法性提供证明的技术;
可以使用数字认证机构(CA)和其他相关的机关颁发公开的密钥证书(就像是银行);
EV SSL证书可以证明作为通信一方的服务器是否规范,同时也可以确认服务器背后运营的企业是否是真实存在的。
证明服务器正在通信的对方始终是预料之内的客户端;
多数浏览器会将开发商发布版本的时候,会事先在内部植入常用的认证机关的公开密钥;
当用户私钥丢失或者被盗,认证机构需要对证书进行作废;
总结
https的通信流程(阮大神的一篇博文):http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html
第八章 确认访问用户身份的认证
何为认证
就像是你买的保险箱只想某些人可以看一样,网页上的web页面也有可能只想特定的人浏览,这就少不了认证功能了,简单的说,认证就是判断访问服务器者的身份。
BASIC 认证步骤
DIGEST 认证
SSL 客户端认证
一般这部分费用是:
表单认证
客户端会向服务器上的Web应用程序发送登录信息,按登录信息的验证结果认证;
因为HTTP是无状态协议,所以一般使用 Cookie 来管理 Session;
双因素认证
SSL客户端认证和表单认证结合,SSL客户端认证来认证客户端的计算机,而表单认证来确定用户本人的行为;
第九章 基于HTTP 的功能追加协议
HTTP 通信的瓶颈
例如论坛上,成千上万的用户发布内容的时候,web网站需要及时的更新,而使用HTTP协议探知服务器上是否有内容更新,就必须频繁地从客户端到服务器端进行确认。如果服务器上没有内容更新,就会产生徒劳的通信。
Ajax 解决办法
Ajax的核心技术是XMLHttpRequest的API,通过javascript的脚本的调用就能和服务器进行HTTP通信了,借由这种手段,就能从已经加载完毕web页面上发起请求,只更新局部页面。
Comet 的解决办法
使用延迟应答,模拟实现服务器向客户端进行推送的功能。
通常,服务器端接收到请求,在处理完毕后就会立即响应,但是为了实现推送功能,Comet会先将响应置于挂起的状态,等服务器端有内容更新的时候,再返回响应。
SPDY
SPDY是Google 开发的基于传输控制协议 (TCP) 的应用层协议 ,开发组正在推动 SPDY 成为正式标准(现为互联网草案)。
允许一个SPDY连接内可以有无限个并行请求,即允许多个并发HTTP请求公用一个TCP会话。这样这要建立一个TCP连接,就可以传送网页上所有资源,不仅可以减少消息交互往返的时间还可以避免创建新连接造成的延迟,使得 TCP 的效率更高。
可以设置优先级,会选择性的先传输 CSS 这样更重要的资源,然后再传输网站图标之类不太重要的资源,可以避免让非关键资源占用网络通道的问题,提升 TCP 的性能。
服务器可以主动向客户端发起通信向客户端推送数据,这种预加载可以使用户一直保持一个快速的网络。
舍弃掉了不必要的头信息,经过压缩之后可以节省多余数据传输所带来的等待时间和带宽。
WebSocket
推荐两篇文章:
HTTP/2.0
支持HTTP2.0的条件
如何浏览器或者服务器有一方不支持,就会自动变为HTTP/1.1
HTTP/2.0 改进点
HTTP/2.0 性能增强的核心:二进制分帧
在应用层和传输层之间增加了一个二进制分帧层,以达到“在不改动HTTP语义,HTTP方法、状态码、URI机及首部字段的情况下,突破HTTP/1.1 的性能限制,改进传输性能,实现低延迟和高吞吐量”;
在二进制分帧层上,HTTP2.0 会将所有的信息分割为更小的消息和帧,并对它们采用二进制格式的编码,其中HTTP1.X 的首部信息会被封装到Headers帧,而request body则封装到Data帧里。
HTTP2.0 通信都在一个连接上完成,这个连接可以承载任意数量的双向数据流。每个数据流以消息的形式发送,而消息又是由一个或者多个帧组成,这些帧可以乱序发送,然后再根据每个帧首部的流标识符重新组装;
压缩头部
HTTP/2.0规定了在客户端和服务器端会**使用并且维护「首部表」**来跟踪和存储之前发送的键值对,对于相同的头部,不必再通过请求发送,只需发送一次。
如果请求中不包含首部,那么首部的开销就是零字节,此时所有的首部都自动使用之前请求发送的首部;如果首部发变化了,那么只需要发送变化了数据在Headers帧里面,新增或者修改的首部帧会被追加到“首部表”。首部表在HTTP2.0连接存续4qi期内始终的存在,由客户端和服务器共同渐进地更新。
多路复用
HTTP2.0所有的通信都是在一个TCP连接上完成的。HTTP2.0 把 HTTP 协议通信的基本单位缩小为一个个的帧,这些帧对应着逻辑流中的消息。**这些帧并行地同在一个TCP连接上双向交换消息。**也就是说同一链接上有多个不同方向的数据流在传输。客户端可以一边乱序发送streams,也可以一边接收服务器的响应,而服务器端同理。
优点
HTTP性能的关键在于低延迟,而不是高带宽。大多数的HTTP连接的时间短,而且是突发性的,但是TCP只在长时间连接传输大块数据时效率才最高。HTTP2.0 通过让所有的数据流公用一个连接,可以更有效地使用TCP连接,让高带宽也能真正服务于HTTP的性能。
同时,单链接多资源的方式,有如下好处:
可以减少服务器的压力,内训占用少,连接的吞吐量大;
由于 TCP 连接减少,使得网络阻塞的情况得以改观;
慢启动时间减少,拥塞和丢包恢复速度更快。
因此, “资源合并减少请求”的优化手段对于HTTP2.0来说是没有效果的。
请求优先级
既然所有资源都是并行发送,那么就需要“优先级”的概念了,这样就可以对重要的文件进行先传输,加速页面的渲染。
服务器推送
在 HTTP2.0中,服务器推送是指客户端请求之前发送数据的机制。
强制 SSL
虽然 HTTP2.0 协议并没有声明一定要使用SSL,但是Google Chrome 等浏览器强制要使用 HTTP2.0 必须使用SSL。
第11章 Web的攻击技术
针对web的攻击技术
在HTTP 请求报文内加载攻击代码,也就是通过URL查询字段或表单、HTTP首部、Cookie等途径把攻击代码传入,如果这时候Web应用存在安全漏洞,那内部信息就会遭到窃取,或被攻击者拿到管理权限;
是通过直接访问Web应用,把攻击代码传入的攻击模式。代表性的是SQL注入攻击 和 命令注入攻击;
利用圈套策略执行攻击代码的攻击模式。
击代码的HTTP请求;
状态中的用户权限遭恶意滥用都能后果;
因输出值转义不完全引发的安全漏洞
因设置或者设计上的缺陷引发的安全漏洞
因回话管理忽略引发的安全漏洞
其他安全漏洞
存疑点
参考文章
The text was updated successfully, but these errors were encountered: