简单有趣的方式讲述了HTPP,图灵出品,还是很不错的;简单阅读一下,掌握基础知识;
了解Web及网络基础
1 客户端使用 URL 获取服务器文件资源。(使用HTTP协议访问Web)
2 HTML:页面的文本标记语言;HTTP:文本传递协议;URL:指定文档所在地址;
3 TCP/IP:互联网相关的各类协议族的总称;包括:应用层,传输层,网络层,链路层;
应用层:向用户提供应用服务时通信的活动,FTP和DNS是其中两大类服务,(HTTP也属于该层);
传输层:对应用层提供网络连接中的2台计算机之间的数据传输,TCP和UDP两种不同的协议;
网络层:处理网络上流动的数据包,在传输时选择一条传输路线,IP协议;
链路层:处理连接网络的硬件部分;
举个例子:发送端发送 A 数据(应用层)-> 添加TCP头(传输层) -> 添加IP头(网络层) -> 添加以太网头(链路层) -> 接收端反向操作,去除以太网头(网络层) -> 去除IP头(网络层) -> 去除TCP头(传输层)-> 获得 A数据;4 IP协议:把数据传输给对方,但是确保送达需要很多条件,最重要的2个是IP地址和MAC地址;
ARP协议:解析地址,根据 IP可以反查MAC地址;
具体传输有点类似快递,需要多次使用路由器做中转;5 TCP协议:提供可靠的字节流服务;1 分割数据成报文段位单位的数据包;2 能确定数据是否送达;
确保数据送达:TCP三次握手,6 DNS服务:域名解析,IP地址与域名的转换;
7 URI:统一资源标识符,协议方案包含(http,ftp,file,tel,telnet,mailto.....)
URL:资源地址(是URI的子集)
绝对URI:http://user:pass@www.example.jp:80/dir/index.htm?uid=1#ch1
协议方案,登录认证(可选),服务器地址,服务器端口,文件路径,查询内容,片段标识符
简单的HTTP协议
1 HTTP协议:用于客户端与服务端之间的通信;客户端发送请求,服务端响应;HTTP本身没有持久化处理,但是使用Cookie可以管理状态;
2 请求URI定位资源
3 HTTP方法:GET获取,POST传输实体主体,PUT传输文件,HEAD获得报文首部,DELETE删除文件,OPTIONS询问支持的方法,TRACE追踪路径(不用),CONNECT要求使用隧道协议连接代理
4 HTTP长连接,建立一次连接,就可以发送请求的资源,不用每次请求都重新连接并断开;管线化,并行发送多个请求;
5 Cookie:再请求响应后,服务端会返回一个cookie,如果客户端保存,那么下次请求时会添加cookie,那么服务端就会知道是哪个客户端了。
HTTP报文内的HTTP信息
1 HTTP报文:报文首部 + (CR+LF) + 报文主体
请求报文:报文首部(请求行,各种首部字段,其他)
响应报文:状态行,各种首部字段,其他)2 编码提升传输速率:压缩传输的内容编码(gzip,compress,deflate,identity);分割发送的分块传输编码;
3 获取部分内容的范围请求:添加 Range:bytes=5000-
4 内容协商返回合适内容:比如对应显示中英文;
返回结果的HTTP状态吗
1 状态吗类别:
1XX:Informational(信息性状态码):接受的请求正在处理
2XX:Success(成功状态码):请求正常处理完毕
3XX:Redirection(重定向状态码):需要进行附加操作以完成请求
4XX:Client Error(客户端错误状态码):服务器无法处理请求
5XX:Server Error(服务器错误状态码):服务器处理请求出错2XX:成功
200:正常处理
204:没有资源
206:范围请求3XX:重定向
301:资源URI更新
304:资源已找到,但是不符合条件请求4XX:客户端错误
400:语法错误
401:第一次401,需要认证;第二次401,认证失败
403:资源拒绝访问
404:没有请求的资源5XX:服务器错误
500:内部资源异常
503:暂时无法处理(可能超负载或者维护中)
与HTTP协作的Web服务器
1 通信数据转发程序:代理、网关、隧道
代理:客户端与服务器的中间人,处理信息交换,主要存在两类:缓存代理,透明代理(不修改报文)
网关:转发其他服务器通信数据的服务器,能提供非HTTP的服务,网关可以提高通信安全
隧道:客户端与服务器中转,可以使用SSL等加密手段通信2 资源缓存:使用缓存代理实现,提示缓存有时限;客户端也可以实现缓存;
HTTP首部
通用首部
Cache-Control:缓存机制,指令有很多种;
Connection:控制不在转发给代理的首部字段,管理持久连接;
Date:表示创建HTTP报文的日期和时间;
Pragma:1.0遗留字段;no-cache(与Cache-Control的一个字段一样)
Trailer:
Transfer-Encoding:传输报文主题的编码方式
UUpgrade:检测HTTP等协议是否可用更高的版本进行通信;
Via:追踪传输路径;
Warning:告知一些缓存相关的警告;请求首部字段:补充请求附加信息、对响应内容相关的优先级等;
Accept:返回资源格式与优先级;
Accept-Charset:字符集与优先级;
Accept-Encoding:内容编码与优先级;
Accept-Language:自然语言集与优先级;
Authorization:授权信息;
Expect:
From:邮箱地址(也有可能再User-Agent字段内);
Host:主机(与单台服务器分配多个域名的虚拟主机有关)
If-Match:字段值与资源的ETag值一致时,才处理请求;
If-None-Match:与If-Match相反;
If-Modified-Since:指定的日期之后,资源发送变化,才处理请求;
If-Unmodified-Since:与If-Modified-Since相反;
If-Range:先判断字段是否与资源的ETag或者更新日期是否匹配,一致则根据Range字段处理请求,不一致则忽略Range字段,返回全部资源;节省了一步If-March
Max-Forwards:最多转发次数,数值变为0是返回响应;
Proxy-Authorization:代理服务器认证;
Range:部分资源;
Referer:请求原始资源URI;
TE:传输编码方式与优先级;
User-Agent:表示浏览器种类,也会添加代理服务器名称;响应首部字段:补充响应的附加信息、服务器信息、以及客户端附加要求等;
Accept-Ranges:告知请求范围是否正常;
Age:源服务器上次响应时间间隔;
ETag:资源唯一标识;
Location:引导至另一个位置的资源;(重定向相关)
Proxy-Authenticate:与请求类似
Retry-After:多久后再次尝试;
Server:当前HTTP服务器信息;
Vary:对应的Accept-Language,
WWW-Authenticate:实体首部字段:补充内容的更新时间等;
Alllow:支持请求方法;
Content-Encoding:实体的主体部分编码方式;
Content-Language:实体的主体自然语言;
Content-Length:实体的主体大小;
Content-Location:主体返回资源的URI;
Content-MD5:主体MD5
Content-Range:主体内容范围 与 实体大小;
Content-Type:主体对象类型;
Expires:资源失效日期;
Last-Modified:资源最后修改时间;Cookie服务的首部
SetCookie
Cookie其他
HTTPS
HTTPS = HTTP + 加密 + 认证 + 完整性保护
HTTP 通信使用明文,可能被窃听;
通信加密:使用SSL或者TLS与HTTP组合使用,使用SSL的就是所说的 HTTPS;
内容加密:对报文内容加密后发送;HTTP 不验证通信方的身份,可能遭遇伪装;
任何人可以发起请求,存在安全隐患;
通过SSL,使用证书,验证通信方身份;HTTP 无法验证报文完整性,可能遭篡改;
通过SSL,生成摘要,防篡改;HTTPS 混合加密机制:1 非对称加密验证身份可靠,并传输对称加密密钥K;2 使用对称加密进行通信(对称加密处理速度相对比非对称快)
数字证书:(非对称加密)1 服务器A 向证书认证机构P 提出公钥申请,确认之后机构P会对服务器A的公钥做数字签名(也是非对称加密),再放入公钥证书C;2 服务器会将公钥证书C发送给客户端,客户端需要验证证书C的可靠性,所有在这里浏览器本身植入了机构P的公钥X,客户端向机构P对证书C的签名验证真实性; 3 客户端使用服务器公钥C对报文加密后发送(通信);
EV SSL 证书:验证了运营组织的真实性,比一般的更加可靠;
认证机构:信誉第一,需要绝对可靠的信用(比如google 就是 由 google 签名的。)
另外还有自签名证书和中级证书,可靠程度一般;HTTPS 通信流程:1 客户端发送开始连接(包含基本数据);2 服务端发送1的回应数据,再发送证书,最后发送第一次握手结束;3 客户端使用收到的公钥,加密一个随机生成的密钥,发送给服务器,再发送通知消息表示以后使用这个密钥通信,随后发送已完成;4 服务器同3发送数据给客户端,完成SSL连接;5之后通信使用HTTP,但是已经有SSL保护;
SSL 与 TLS:TLS是以SSL为原型设计; 统称SSL;
HTTPS 速度比 HTTP 慢 2-100 倍,主要由于通信慢 与 加解密处理速度慢;
确认访问用户身份的认证
HTTP认证方式:BASIC基本认证,DIGEST摘要认证,SSL客户端认证,FormBase表单认证;
BASIC认证:通过HTTP Authorization首部字段,发送用户ID与密码的Base64b
编码字符串,由于其明文不安全以及无注销操作,故不使用;DIGEST认证:BASIC的基础上,添加了服务端产生随机字段,组合之后生成MD5作为首部;增强了密码保护,但是无法防止用户伪装;
SSL认证:HTTPS加密通信,一般采用双因素认证,组合表单认证;
表单认证:即一般的注册登录;大部分都是表单认证;
基于HTTP的功能追加协议
Ajax:异步JavaScript 与 XML;有效利用JavaScript和DOM(文件对象模型)的操作,局部Web页面的加载;
Comet:服务器有更新,就向客户端发送推送;
SPYD:解决HTTP的性能瓶颈;多路复用流,赋予请求优先级,压缩HTTP首部,推送功能;(仅单域名通信多路复用,一个Web上使用多个域名下的资源时,就会受到限制)
WebSocket:推送功能,减少通信量(保持连接状态);使用HTTP的Upgrade首部字段,握手修改通信协议,使用WebSocket通信;
HTTP/2.0
Web服务器管理文件的WebDAV
构建Web内容的技术
HTML:超文本标记语言,构建Web基础;
CSS:展现HTML内元素的样式;
动态HTML:使用客户端脚本语言JacaScript,实现对HTML的Web页面的动态改造;利用DOM可指定欲发生动态变化的HTML元素;
DOM:操作HTML文档和XML文档的API;使用JacaScript对DOM的操作可以简单的方式控制HTML;例如:document.getElementsByTagName();
Web应用:通过Web功能提供的应用程序,例如购物网站,搜索引擎等;作用与动态内容之上;
CGI:通用网关接口,Web服务器接收客户端发送来的请求后转发给程序,程序对请求内容做出响应的动作;
Servlet:服务器上创建动态内容;执行相对轻量级,效率更高;
XML:可扩展标记语言;
RSS/Atom:发布更新信息,也是呀XML;
JSON:由JavaScript衍生,更加轻量化的数据格式;
Web的攻击技术
输出值转义不完全引发的安全漏洞:跨站脚本攻击(XSS),窃取用户Cookie,SQL注入,OS命令注入,HTTP首部注入,HTTP响应截断攻击,邮件首部注入攻击,目录遍历攻击,远程文件包含漏洞。
设计或设置缺陷引发的漏洞:强制浏览,不正确的错误处理,开放重定向,
会话管理疏忽的漏洞:会话劫持,会话固定攻击,跨站点请求伪造;
其他漏洞:密码破解,点击劫持,DoS攻击,后门程序;