1.Web与网络基础
- WWW的三项构建技术: HTML、HTTP、URL.
- TCP/IP是互联网相关各类协议簇的总称,涉及网络层(IP)、传输层(UDP TCP)和应用层(FTP HTTP DNS).
- 与HTTP密切相关的协议: IP TCP DNS
- URI(Uniform Resource Identifier)和 URL(Uniform Resource Locator)
- URI 在RFC2396中的定义,是由某个协议方案表示的资源的定位标识符,如HTTP, ftp:, mailto:, telnet:等,共30种左右,如:
ftp://ftp.is.co.za/rfc/rfc1808.txt
http://www.ietf.org/rfc/rfc2396.txt
ldap://[2001:db8::7]/c=GB?objectClass?one
mailto:John.Doe@example.com
news:comp.infosystems.www.servers.unix
tel:+1-816-555-1212
telnet://192.0.2.16:80/
urn:oasis:names:specification:docbook:dtd:xml:4.1.2
- URL 表示资源的地点(互联网上所处的位置),URL 是 URI 的子集
2.简单的HTTP协议
- 请求响应模型
- 客户端请求:请求方法、请求 URI、协议版本、可选的请求首部字段、内容实体
- 服务器响应:由协议版本、状态码(表示请求成功或失败的数字代码)、用以解释状态码的原因短语、可选的响应首部字段以及实体主体构成。
HTTP/1.1 200 OK
Date: Tue, 10 Jul 2012 06:50:15 GMT
Content-Length: 362
Content-Type: text/html
<html>
……
- HTTP的无状态和cookie
为了简化处理过程,请求和响应都不做持久化处理。cookie用于保存用户状态
- HTTP方法:
1.GET 获取响应内容
2.POST 传输实体的主体
3.PUT 上传文件
4.HEAD 获得报文首部,一般用于确认URL的有效性,检查上次更新日期
5.DELETE 删除文件,与PUT相反
6.OPTIONS 查询支持的方法
7.TRACE 追踪路径,不常用
8.CONNECT 要求使用隧道协议进行TCP通信,例如SSL(Secure Sockets Layer),和TLS(TLS(Transport Layer Security)
------------
- HTTP1.1 的优化:
- 持久连接:HTTP keep-alive,在多个HTTP调用过程中,TCP一直保持连接,减少网络开销.
- 管线化(pipelining): 多个HTTP可以流水线化发起请求
- Cookie:
- 服务器的响应报文中包含一个【Set-Cookie】 首部信息,通知客户端保存cookie,
- 下次客户端发送请求时包含该Cookie信息
- 服务器通过cookie信息判断客户端身份
3.HTTP报文信息
- 报文结构: 报文首部+空行(CR(0x0d)+LF(0x0a))+报文主体
- 编码压缩
- 报文message 和 实体entity的区别: 报文是HTTP通信中的基本单位,由字节流组成;实体是请求或响应的有效载荷,包括实体首部和实体主体。
- HTTP中通过【压缩】和【分块传输编码Chunked Transfer Coding】应对大实体内容。
- 请求部分实体内容(称为范围请求, range request): 首部中指定Range 字段。
- 内容协商技术(Content Negotiation)
对于不同的客户端期望不同的内容版本(如语言等),通过在请求报文中添加Accept-Charset、Accept-Language等实现。
三种协商技术:
- 服务器驱动协商(以请求首部为参考,服务器端自动处理)
- 客户端驱动协商(有客户端进行内容协商,例如在Web页面中提供可选列表,或者使用JS脚本自动选择)
- 透明协商 (服务器协商和客户端协商的结合)
4.返回结果的HTTP状态码
- RFC2616定义,第一位表示响应类别。
- 常见的状态码
200 OK
204 No Content 已经处理成功,但返回报文中不包括实体部分
206 Partial COntent 根据请求报文中的范围请求range字段,返回了部分实体内容
301 Moved Permanently 资源已经分配了新的URL
302 Found 临时性重定向,资源已经重定向,但该URL还可以访问到
303 See Other 请求的资源存在着另一个URL,应使用GET方法定向获取请求的资源。
304 Not Modified 服务端允许请求访问资源,但未满足条件(指请求首部中包含的条件 If-Match,If-Modified-Since,If-None-Match,If-Range,If-Unmodified-Since 中任一)。 304 严格来和重定向没关系。
307 Temporary Redirect 与302含义相同
400 Bad Request 请求报文中存在语法错误。与200相对,浏览器应当对错误作出反应。
401 Unauthorized 需要包含一个【WWW-Authenticate】首部进行身份认证。 浏览器第一次遇到401时应当弹出认证对话框
403 Forbidden 拒绝访问,没有具体理由
404 Not Found
503 Service Unavailable 用于服务器处于超负荷或停机维护时
5.Web服务器
- 通过请求报文的【host】首部实现一个IP托管多个不同域名的web服务
- 代理、网关和隧道
- 代理作为中间人,在客户机和服务器之间转发请求。同时附上【via】首部信息。代理可以级联,每跳一次via中增加一个主机名。
代理不修改请求的URI。
代理的作用:内容缓存、特定网站访问控制
代理分类:根据是否修改报文内容,分为透明和非透明
- 网关进行协议转换。允许通信线路上的服务器提供非HTTP服务,并提升安全性。
- 隧道在服务器与客户端之间建立一条通信线路,进行加密通讯。
6.HTTP首部
在请求中,HTTP 报文由方法、URI、HTTP 版本、HTTP 首部字段等部分构成。
在响应中,HTTP 报文由 HTTP 版本、状态码(数字和原因短语)、HTTP 首部字段 3 部分构成。
- 首部字段的格式 【字段名: 字段值】
- 四种首部字段类型:
- 通用首部字段 General Header Fields: 请求报文和响应报文都会使用
- 请求首部字段 Request Header Fields: 在请求报文中用到,用于补充请求的附加内容,客户端信息等。
- 响应首部字段 Response Header Fields: 在响应报文中用到。
- 实体首部字段 Entity Header Fields: 针对请求报文和响应报文的实体部分使用。补充资源内容更新时间等信息。
- --------------------
- -----------------------------
- ---------------------------------------
- 首部分类 :端到端End-to-End 首部和逐跳Hop-by-hop首部
End-to-End类型的首部会转发给请求、响应的最终接收目标。
hop-by-hop 类型首部只对单次转发有效。在缓存或代理中不再转发。需要配合Connection首部字段。只有以下8种逐跳首部。
- Cookie相关的首部字段
- Set-Cookie: 响应首部字段中服务发放Cookie
- Cookie: 请求首部字段中,客户机发给服务器
7.Web 安全,HTTPS
- 加密技术SSL(Secure Socket Layer),TLS(Transport Layer Security)
- HTTP+加密+认证+完整性保护=HTTPS
HTTPS的流量先通过SSL,再到TCP。HTTPS是披着SSL的HTTP
- HTTPS的建立过程
- 两次SSL握手。
- 第一次获得加密算法和密钥长度的共识,服务器向客户端发布公钥证书
- 第二次握手,客户端用服务器公钥加密,传递pre-master对称密钥串。使用Pre-master secret密钥加密master密钥。约定之后用该对称密钥加密消息内容。
8.用户身份认证
目的: 使WEB页面只能让特定人访问。
HTTP认证方式: BASIC认证、DIGEST认证(摘要认证)、SSL客户端认证、FormBase认证。
- BASE认证. 响应报文401,客户端将[user:psw]用base64加密之后放在Authorization 字段中发送.
缺点: 密码只是base64编码,没有加密。
- DIGEST认证. 服务器-> 客户端: 质询码。 客户端-> 客户端: 响应码.
本质上,服务器比对的是hash值,因此密码没有在通信过程中直接传递。
- SSL认证。给客户端颁发证书,以此鉴别身份。
- 表单认证。最常见的认证方式,在网页上提供登陆界面。
9.基于HTTP的功能追加协议
- SPDY(发音 Speedy): 谷歌在2010年提出,缩短HTTP响应时间,适应社交网络服务的频繁内容更新。
获得的功能:
- 多路复用,一个TCP连接上处理多个HTTP请求
- 赋予请求优先级,在有限带宽下防止响应变慢
- 压缩HTTP首部
- 服务器端主动推送
- 服务器主动提示客户端请求所需资源。
- WebSocket: 浏览器与服务器之间全双工通信的协议
基于HTTP协议,使用upgrade字段转换到websocket协议,建立双工通信
- WebDAV: 对web服务器上的内容直接进行文件复制和编辑等操作
10.基于web内容的技术
11.WEB攻击
- 跨站攻击,在有漏洞的web网站上运行攻击Js脚本
- SQL注入
- OS溢出攻击
- HTTP首部注入,拦截HTTP响应报文,插入攻击首部,实现设置Cookie信息、重定向URL等操作。
- 彩虹表,根据MD5破译明文密码。
- 点击劫持,在攻击页面上覆盖透明网页。