一、HTTP协议
1、HTTP的诞生及作用
1989 年 3 月,互联网还只属于少数人。在这一互联网的黎明期,HTTP诞生了。最开始,CERN(欧洲核子研究 组织)的 蒂姆 • 伯纳斯 - 李(TimBernersLee)博士提出了一种能让远隔两地的研究者们共享知识的设想,最初基本理念是:借助多文 档之间相互关联形成的超文本(HyperText)连成可相互参阅的WWW(World Wide Web,万维网)。现在已提出了 3 项 WWW 构建技术,分别是:把 SGML(Standard Generalized Markup Language,标准用标记语言)作为页面的文本标记语 言 HTML(HyperText Markup Language,超文本标记语言);作为文档协议的 HTTP ;指定文档所在地址的 URL(Uniform Resource Locator,统一资源定位符)
HTTP 正式作为标准被公布是在 1996 年的 5 月,版本被命名为HTTP/1.0,并记载于 RFC1945。虽说是初期标准,但该协 议标准至今仍被广泛使用在服务器端。与HTTP协议密切的协议有三类:IP、TCP、DNS
客户端:
HTTP协议职责:生成针对目标web服务器的HTTP请求报文
TCP协议职责:为方便通讯,将HTTP请求报文分割成报文段
IP协议职责:搜索对方地址,一边中转一边发送
服务端:
HTTP协议职责:对Web服务器请求的内容的处理
TCP协议职责:接收报文段,并重组,按序号医院来的顺序重组请求报文
IP协议职责:搜索对方地址,一边中转一边发送
2、HTTP如何被运用在服务器与客户端之间
3、HTTP用来下达命令的方法
方法 | 说明 | 支持的 HTTP 协议版本 |
GET | 获取资源 | 1.0、1.1 |
POST | 传输实体主体 | 1.0、1.1 |
PUT | 传输文件 | 1.0、1.1 |
HEAD | 获得报文首部 | 1.0、1.1 |
DELETE | 删除文件 | 1.0、1.1 |
OPTIONS | 询问支持的方法 | 1.1 |
TRACE | 追踪路径 | 1.1 |
CONNECT | 要求用隧道协议连接代理 | 1.1 |
LINK | 建立和资源之间的联系 | 1.0 |
UNLINE | 断开连接关系 | 1.0 |
二、HTTP报文
1、报文结构
上面为请求报文,下面为响应报文。
请求报文(上)和响应报文(下)的示例
请求行:包含用于请求的方法,请求URI 和 HTTP 版本
状态行:包含表明响应结果的状态码,原因短语和 HTTP 版本。
首部字段包含表示请求和响应的各种条件和属性的各类首部。一般有 4 种首部,分别是:通用首部、请求首部、响 应首部和实体首部。其他
三、HTTP首部
1、HTTP/1.1首部字段一览
通用首部字段
首部字段名 | 说明 |
Cache-Control | 控制缓存的行为 |
Connection | 逐跳首部、连接的管理 |
Date | 创建报文的日期时间 |
Pragma | 报文指令 |
Trailer | 报文末端的首部一览 |
Transfer-Encoding | 指定报文主体的传输编码方式 |
Upgrade | 升级为其他协议 |
Via | 代理服务器的相关信息 |
Warning | 错误通知 |
请求首部字段
首部字段名 | 说明 |
Accept | 用户代理可处理的媒体类型 |
Accept-Charset | 优先的字符集 |
Accept-Encoding | 优先的内容编码 |
Accept-Language | 优先的语言(自然语言) |
Authorization | Web认证信息 |
Expect | 期待服务器的特定行为 |
From | 用户的电子邮箱地址 |
Host | 请求资源所在服务器 |
If-Match | 比较实体标记(ETag) |
If-Modified-Since | 比较资源的更新时间 |
If-None-Match | 比较实体标记(与 If-Match 相反) |
If-Range | 资源未更新时发送实体 Byte 的范围请求 |
If-Unmodified-Since | 比较资源的更新时间(与If-Modified-Since相反) |
Max-Forwards | 最大传输逐跳数 |
Proxy-Authorization | 代理服务器要求客户端的认证信息 |
Range | 实体的字节范围请求 |
Referer | 对请求中 URI 的原始获取方 |
TE | 传输编码的优先级 |
User-Agent | HTTP 客户端程序的信息 |
响应首部字段
首部字段名 | 说明 |
Accept-Ranges | 是否接受字节范围请求 |
Age | 推算资源创建经过时间 |
ETag | 资源的匹配信息 |
Location | 令客户端重定向至指定URI |
Proxy-Authenticate | 代理服务器对客户端的认证信息 |
Retry-After | 对再次发起请求的时机要求 |
Server | HTTP服务器的安装信息 |
Vary | 代理服务器缓存的管理信息 |
WWW-Authenticate | 服务器对客户端的认证信息 |
实体首部字段
首部字段名 | 说明 |
Allow | 资源可支持的HTTP方法 |
Content-Encoding | 实体主体适用的编码方式 |
Content-Language | 实体主体的自然语言 |
Content-Length | 实体主体的大小(单位:字节) |
Content-Location | 替代对应资源的URI |
Content-MD5 | 实体主体的报文摘要 |
Content-Range | 实体主体的位置范围 |
Content-Type | 实体主体的媒体类型 |
Expires | 实体主体过期的日期时间 |
Last-Modified | 资源的最后修改日期时间 |
X-Frame-Options
X-XSS-Protection
DNT
P3P
X-Frame-Options首部字段 X-Frame-Options 属于 HTTP 响应首部,用于控制网站内容在其他Web 网站的 Frame 标签内的显示问题。其主要目的是为了防止点击劫持(clickjacking)攻击。
首部字段 X-Frame-Options 有以下两个可指定的字段值。
DENY:拒绝
SAMEORIGIN :仅同源域名下的页面(Top-level-browsingcontext)匹配时许可。(比如,当指定 http://hackr.jp/sample.html
页面为 SAMEORIGIN 时,那么 hackr.jp 上所有页面的 frame 都被
允许可加载该页面,而 example.com 等其他域名的页面就不行了)
首部字段 X-XSS-Protection 属于 HTTP 响应首部,它是针对跨站脚本攻击(XSS)的一种对策,用于控制浏览器 XSS 防护机制的开关。
首部字段X-XSS-Protection 可指定的字段值如下。
0 :将 XSS 过滤设置成无效状态
1 :将 XSS 过滤设置成有效状态
DNT
首部字段DNT 属于 HTTP 请求首部,其中 DNT 是 Do Not Track 的简称,意为拒绝个人信息被收集,是表示拒绝被精准广告追踪的一种方法。
首部字段DNT 可指定的字段值如下。
0 :同意被追踪
1 :拒绝被追踪
P3P首部字段 P3P 属于 HTTP 相应首部,通过利用 P3P(The Platform for Privacy Preferences,在线隐私偏好平台)技术,可以让 Web 网站上的个人隐私变成一种仅供程序可理解的形式,以达到保护用户隐私的目的。
四、确保web安全的HTTPS
1、HTTP的缺点
通信使用明文(不加密),内容可能会被窃听不验证通信方的身份,因此有可能遭遇伪装无法证明报文的完整性, 所以有可能已遭篡改这些问题不仅在 HTTP 上出现,其他未加密的协议中也会存在这类问题。除此之外,HTTP 本身还 有很多缺点。而且,还有像某些特定的 Web 服务器和特定的 Web 浏览器在实际应用中存在的不足(也可以说成是脆弱 性或安全漏洞),另外,用 Java 和 PHP 等编程语言开发的Web 应用也可能存在安全漏洞。
1.1 不验证通信方的身份就可能遭遇伪装
HTTP 协议中的请求和响应不会对通信方进行确认。也就是说存在“服务器是否就是发送请求中 URI 真正指定的主 机,返回的响应是否真的返回到实际提出请求的客户端”等类似问题。任何人都可发起请求。在 HTTP 协议通信时,由 于不存在确认通信方的处理步骤,任何人都可以发起请求。另外,服务器只要接收到请求, 不管对方是谁都会返回一个 响应(但也仅限于发送端的 IP 地址和端口号没有被 Web 服务器设定限制访问的前提下)。
1.2 无法证明报文完整性,可能已遭篡改
所谓完整性是指信息的准确度。若无法证明其完整性,通常也就意味着无法判断信息是否准确,接收到的内容可能 有误,由于 HTTP 协议无法证明通信的报文完整性,因此,在请求或响应送出之后直到对方接收之前的这段时间内,即 使请求或响应的内容遭到篡改,也没有办法获悉。换句话说,没有任何办法确认,发出的请求/ 响应和接收到的请求 / 响应是前后相同的。
2、HTTP+ 加密 + 认证 + 完整性保护 =HTTPS
如果在 HTTP 协议通信过程中使用未经加密的明文,比如在 Web 页面中输入信用卡号,如果这条通信线路遭 到窃听,那么信用卡号就暴露了。另外,对于 HTTP 来说,服务器也好,客户端也好,都是没有办法确认通信方 的。因为很有可能并不是和原本预想的通信方在实际通信。并且还需要考虑到接收到的报文在通信途中已经遭到窜 改这一可能性。为了统一解决上述这些问题,需要在 HTTP 上再加入加密处理和认证等机制。我们把添加了加密 及认证机制的 HTTP 称为 HTTPS(HTTPSecure)。
五、构建web内容的技术
1、HTML
HTML(HyperTextMarkup Language,超文本标记语言)是为了发送Web 上的超文本(Hypertext)而开发的 标记语言。超文本是一种文档系统,可将文档中任意位置的信息与其他信息(文本或图片等)建立关联,即超链接文 本。标记语言是指通过在文档的某部分穿插特别的字符串标签,用来修饰文档的语言。我们把出现在 HTML 文档内的 这种特殊字符串叫做 HTML 标签(Tag)。平时我们浏览的Web 页面几乎全是使用 HTML 写成的。由HTML 构成的文 档经过浏览器的解析、渲染后,呈现出来的结果就是 Web 页面。
HTML文档示例
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset <title>hackr.jp</title> <style type="text/css"> .logo { padding: 20px; text-align: center; } </style> </head> <body> <div class="logo"> <p><img src="photo.jpg" alt="photo" width="240" height="12 <p><img src="hackr.gif" alt="hackr.jp" width="240" height= <p><a href="http://hackr.jp/">hackr.jp</a> </p> </div> </body> </html> |
2、css
CSS(Cascading Style Sheets,层叠样式表)可以指定如何展现 HTML 内的各种元素,属于样式表标准之 一。即使是相同的HTML 文档,通过改变应用的 CSS,用浏览器看到的页面外观也会随之改变。CSS 的理念就是 让文档的结构和设计分离,达到解耦的目的。 示例
.logo { padding: 20px; text-align: center;
}
可在选择器(selector).logo的指定范围内,使用 {} 括起来的声明块中写明的 padding: 20px 等声明语句应 用指定的样式。可通过指定 HTML 元素或特定的class、ID 等作为选择器来限定样式的应用范围。
3、javascript
利用javascript能够实现动态的HTML页面,利用 DOM(DocumentObjectModel,文档对象模型)可指定欲 发生动态变化的 HTML 元素。
<body>
<h1>繁琐的Web安全</h1>
<p>第Ⅰ部分 Web的构成元素</p>
<p>第Ⅱ部分 浏览器的安全功能</p>
<p>第Ⅲ部分 接下来发生的事</p>
</body>
<script type="text/javascript">
var content =document.getElementsByTagName('P'); content[2].style.color = '#FF0000'; </script>
document.getElementsByTagName('P') 语句调用 getElementsByTagName函数,从整个 HTML 文档(document object)内取出 P 元素。接下来的 content[2].style.color = '#FF0000' 语句指定 content 的索引为 2(第 3 个)的元素的样式颜色改为红色(#FF0000)。DOM内存在各种函数,使用它们可查阅 HTML 中的各个元素。
4、web应用
Web 应用是指通过Web 功能提供的应用程序。比如购物网站、网上银行、SNS、BBS、搜索引擎和 e- learning 等。互联网(Internet)或企业内网(Intranet)上遍布各式各样的 Web 应用。原本应用HTTP 协议 的 Web 的机制就是对客户端发来的请求,返回事前准备好的内容。可随着 Web 越来越普及,仅靠这样的做法 已不足以应对所有的需求,更需要引入由程序创建 HTML 内容的做法。类似这种由程序创建的内容称为动态内 容,而事先准备好的内容称为静态内容。Web 应用则作用于动态内容之上。