读《图解HTTP》总结--第十章

构建Web内容的技术

在Web刚出现时,我们只能浏览那些页面样式简单的内容。如今,Web使用各种各样的技术,来呈现丰富多彩的内容。

10.1  HTML

10.1.1 页面几乎全由HTML构建

HTML(HyperText Markup Language,超文本标记语言)是为了发送Web上的超文本而开发的标记语言。超文本是一种文档系统,可将文档中任意位置的信息与其他信息(文本或图片等)建立关联,即超链接文本。标记语言是指通过在文档的某部分穿插特别的字符串标签,用来修饰文档的语言。我们把出现在HTML文档内的这种特殊字符串叫做HTML标签(Tag)。平时我们浏览的Web页面几乎全都是使用HTML写成的。由HTML构成的文档经过浏览器的解析、渲染后,呈现出来的结果就是Web页面。以下就是用HTML编写的文档的例子。而这份HTML文档内这种被<>包围着的文字就是标签。在标签的作用下,文档会改变样式,或插入图片、链接。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
<!--
.logo {
	padding: 20px;
	text-align: center;
}
-->
</style>
<title>hackr.jp</title>
</head>

<body>
<div class="logo">
  <p><img src="photo.jpg" alt="photo" width="240" height="127" /></p>
  <p><img src="hackr.gif" alt="hackr.jp" width="240" height="84" /></p>
  <p><a href="http://hackr.jp/">hackr.jp</a> </p>
</div>
</body>
</html>

10.1.2  HTML版本

Tim Berners提出HTTP概念的同时,还提出HTML原型。1993年在伊利诺伊大学的NCSA发布了Mosaic浏览器(世界首个图形界面浏览器程序),而能够被Mosaic解析的HTML,统一标准后即作为HTML1.0发布。目前的最新版本是HTML4.01标准,1999年12月的W3C组织推荐使用这一版本。下一个版本预计会在2014年左右正式推荐使用HTML5标准。HTML5标准不仅解决了浏览器之间的兼容性问题,并且可能把文本作为数据对待,更容易复用。动画等效果也变得更生动。时至今日,HTML仍存在较多悬而未解决问题。有些浏览器未遵循HTML标准实现,或扩展自用标签等。这都反映了HTML的标准实际上尚未统一的现状。

10.1.3 设计应用CSS

CSS(Cascading Style Sheets,层叠样式表)可以指定如何展现HTML内的各种元素,属于样式表标准之一。即使是相同的HTML文档,通过改变应用的CSS,用浏览器看到的页面外观也会随之改变。CSS的理念就是让文档的结构和设计分离,已达到解耦的目的。

可用选择器(selector) .logo的指定范围内使用{}括起来的声明块中写明的padding:20px等声明语句应用指定的样式。可通过指定HTML元素或特定的class、ID等作为选择器来限定样式的应用范围。

下面就是一个CSS的用例:

.logo {
	padding: 20px;
	text-align: center;
}

10.2 动态HTML

10.2.1 让Web页面动起来的动态HTML

所谓动态HTML(Dynamic HTML),是指使用客户端脚本语言将静态的HTML内容变成动态的技术的总称。鼠标单击点开的新闻、Google Maps等可滚动的地图就用到了动态HTML。动态HTML技术是通过调用客户端脚本语言JavaScript,实现对HTML的Web页面的动态改造。利用DOM(Document Object Model,文档对象模型)可指定欲发生动态变化的HTML元素。

10.2.2  更容易控制的HTML的DOM

DOM是用以操作HTML文档和XML文档的API(Application Programming Interface,应用编程接口)。使用DOM可以将HTML内的元素当做对象操作,如取出元素内的字符串、改变那个CSS的属性等.使页面的设计发生改变。通过调用JavaScript等脚本语言对DOM的操作,可以更为简单的方式控制HTML的改变。

<body>
        <h1>繁琐的Web安全</h1>
        <p>第一部分  Web的构成元素</p>
        <p>第二部分  浏览器的安全功能</p>
        <p>第三部分  接下来发生的事</p>
</body>

比如从JavaScript的角度来看,将上述HTML文档的第三个P元素(P标签)改变文字颜色时,会像下方这样编写代码。document.getElementsByTagName(‘p‘)调用getElementsByTagName(‘p‘)函数,从整个HTML文档内(document object)取出P元素。接下来content[2].style.color = "#FF0000"语句指定content的索引为2(第三个)的元素的样式颜色改为红色。DOM内存在各种函数,会使用他们可查阅HTML中各个元素。

<script type="text/javascript">
    var content = document.getElementByTagName(‘p‘);
    content[2].style.color = "#FF0000"
</script>

10.3 Web应用

10.3.1 通过Web提供功能的Web应用

Web应用是指通过Web功能提供的应用程序。比如购物网站、网上银行、SNS、BBS、搜索引擎和e-learning等。互联网或企业内网上遍布各式各样的Web应用。原本应用HTTP协议的Web机制就是客户端发来的请求,返回事前准备好的内容。可随着Web越来越普及,仅靠这样的做法已不足应对所有的需求,需要引入由程序创建HTML内容的做法。类似这种程序创建的内容称为动态内容,而事先准备好的内容称为静态内容。Web应用则是作用于动态内容上的。

10.3.2 与Web服务器及程序协作的CGI

CGI(Common Gateway Interface ,通用网关接口)是指Web服务器在接收到客户端发送过来的请求后转发给程序的一组机制。在CGI的作用下,程序会对请求内容做出相应的动作,比如创建HTML等动态内容。使用CGI的程序叫做CGI程序,通常Perl、PHP、Ruby、和C等编程语言编写而成的。具体流程如下:

10.3.3 因Java而普及的Servlet

Servlet是一种能在服务器上创建动态内容的程序。Servlet使用Java语言实现的一个接口,属于面向企业级Java(JavaEE,Java Enterprise Edition)的一部分。之前提及的CGI,由于每次接收到的请求,程序都要跟着启动一次。因此一旦访问量过大,Web服务器要承担相当大的负载。而Servlet运行在与Web服务器相同的进程中,因此受到的负载小。Servlet的运行环境叫做Web容器或Servlet容器。Servlet作为解决CGI问题的对抗技术,随着Java一起得到了普及。随着CGI的普及,每次请求都要启动新CGI程序的CGI运行机制逐渐变成了性能瓶颈,所以之后Servlet和mod_perl等可直接在Web服务器上运行的程序才得以开发、普及。

10.4 数据发布的格式及语言

10.4.1 可扩展标记语言

XML(eXtensible Marup Language,可扩展标记语言)是一种可按应用目标进行扩展的通用标记语言。旨在通过使用XML,使互联网数据共享变的更容易。XML和HTML都是从标准通用标记语言SGML(Standard Generalized Markup Language)简化而成的。与HTML相比,它对数据的记录方式做了特殊处理。下面就是以HTML编写某公司的研讨会议程为例进行说明:

<html>    
<head>     
<title>T公司研讨会介绍</title>         
</head>   
 
<body>    
<h1>T公司研讨会介绍</h1>
<ul>
    <li>研讨会编号:TR001
        <ul>
            <li>Web应用程序脆弱性诊断讲座</li>
        </ul>
     </li> 
    <li>研讨会编号:TR002
        <ul>
            <li>Web应用系统脆弱性诊断讲座</li>
        </ul>
     </li> 
</ul>  
</body>    
</html>

用浏览器打开该文档时,会显示排列的列表内容,但是如果这些数据被其他应用程序读取会发生什么呢?某些程序虽然具备可通过识别布局特征取出文本的方法,但是这份HTML的样式一旦改变,要读取数据内容也就变得相对困难了,可见,为了保持数据的正确读取,HTML不适合用来记录数据结构。接着将这份列表以XML的形式改写成了以下的实例。

<研讨会 编号="TR001" 主题="Web应用程序脆弱性 诊断讲座">
    <类别>安全</类别>
    <概要>为深入研究Web应用程序脆弱性诊断必要的...</概要>
 </研讨会>
 <研讨会 编号="TR002" 主题="Web系统程序脆弱性 诊断讲座">
    <类别>安全</类别>
    <概要>为深入研究Web系统程序脆弱性诊断必要的...</概要>
 </研讨会>

XML和HTML一样,使用标签构成树形结构。并且可自定义扩展标签,从XML文档中读取数据比起HTML更为简单。由于XML的结构基本上都是标签分隔而成的树形结构,因此通过语法分析器(Parser)的解析功能解析XML结构并取出数据元素,可更容易地对数据进行读取。更容易地复用数据使得XML在互联网上被广泛的接受,比如,可用在2个不同的应用之间的交换数据格式化。

10.4.2 发布更新信息的RSS/Atom

RSS(简易信息聚合,也叫聚合内容)和Atom都是发布新闻或博文日志更新信息文档的格式的总称。两种都用到了XML。

RSS有以下版本,名称和编写方式也不相同。

RSS 0.9 (RDF Site Summary):最初的RSS版本.1999年3月由网景通信公司自行开发用于其门户网站。基础构图创建在初期的RDF规格上。

RSS 0.91(Rich Site Summary):在RSS0.9的基础上扩展元素,于1999年7月开发完毕。非RDF规格,使用XML方式编写。

RSS 1.0(RDF Site Summary):RSS规格正处于混乱状态。2000年12月由RSS-DEV工作组再次采用RSS0.9中使用的RDF规格发布完成。

RSS 2.0(Really Simple Syndication):非RSS1.0发展路线。增加支持RSS0.91的兼容性,2000年12月由UserLand Software公司开发完成。

Atom具有以下两种标准:

Atom供稿格式(Atom Syndication Format):为了发布内容而制定的网站消息来源格式,单讲Atom时,就以此为标准。

Atom出版协定(Atom Publishing Protocol):为Web上内容的更新或修改而制定的协议。

用于订阅博客更新信息的RSS阅读器,这种应用几乎支持RSS的所有版本以及Atom。

 下面是RSS1.0的实例:(具体详细信息建议参考网站http://web.resource.org/rss/1.0/)
<?xml version="1.0" encoding="utf-8"?>

<rdf:RDF 
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns="http://purl.org/rss/1.0/"
>

  <channel rdf:about="http://www.xml.com/xml/news.rss">
    <title>XML.com</title>
    <link>http://xml.com/pub</link>
    <description>
      XML.com features a rich mix of information and services 
      for the XML community.
    </description>

    <image rdf:resource="http://xml.com/universal/images/xml_tiny.gif" />

    <items>
      <rdf:Seq>
        <rdf:li resource="http://xml.com/pub/2000/08/09/xslt/xslt.html" />
        <rdf:li resource="http://xml.com/pub/2000/08/09/rdfdb/index.html" />
      </rdf:Seq>
    </items>

  </channel>
  
  <image rdf:about="http://xml.com/universal/images/xml_tiny.gif">
    <title>XML.com</title>
    <link>http://www.xml.com</link>
    <url>http://xml.com/universal/images/xml_tiny.gif</url>
  </image>
  
  <item rdf:about="http://xml.com/pub/2000/08/09/xslt/xslt.html">
    <title>Processing Inclusions with XSLT</title>
    <link>http://xml.com/pub/2000/08/09/xslt/xslt.html</link>
    <description>
     Processing document inclusions with general XML tools can be 
     problematic. This article proposes a way of preserving inclusion 
     information through SAX-based processing.
    </description>
  </item>
  
  <item rdf:about="http://xml.com/pub/2000/08/09/rdfdb/index.html">
    <title>Putting RDF to Work</title>
    <link>http://xml.com/pub/2000/08/09/rdfdb/index.html</link>
    <description>
     Tool and API support for the Resource Description Framework 
     is slowly coming of age. Edd Dumbill takes a look at RDFDB, 
     one of the most exciting new RDF toolkits.
    </description>
  </item>

</rdf:RDF>

10.4.3 JavaScript衍生的轻量级易用JSON

JSON(JavaScript Object Notation)是一种以JavaScript的对象表示法为基础的轻量级数据标记语言。能够处理的数据类型有false/null/ture/对象/数组/数字/字符串,这7种类型。

JSON让数据更轻更纯粹,并且JSON的字符串形式可被JavaScript轻易地读入。当配合XML使用的Ajax技术也让JSON的应用变得更为广泛。另外,其它各种编程语言也提供丰富的库类,以达到轻便操作JSON的目的。ps:有关JSON更为详实的内容请参看RFC4627"The application/json Media TYpe for JavaScript Object Notation(JSON)"

JSON格式:{"name":"Web Application Securety","num":"TR001"}

时间: 2024-09-30 07:29:45

读《图解HTTP》总结--第十章的相关文章

[已读]图解CSS3核心技术与案例实战

买的时候犹豫了好久,也征询了下几个前端朋友.我一直蛮怕买华章的书,好在这本内容很不错,买得值了. 大漠的css功底很深厚,这本书也很厚= =,读完之后对css圆角以及background-origin与background-clip的区别都有了更深入的了解.其他的内容我表示没吸收到新的东西~~ 从大方面来讲,css3的内容其实也不多:弹性盒.多列布局.渐变.阴影.变形.过渡.动画.媒体查询与web字体.其中,弹性盒的发展历程那叫一个坎坷,各种版本看得眼晕.css3要深入的话其实有蛮多需要提升的地

阅读日志

记录自2017.5起,降序记录,专业书籍阅读 --大型网站技术架构(核心原理与案例分析):在读(18.2.1) --java8实战:已读(18.1.19-18.1.27) --redis实战:已读(18.1.19) --图解Java多线程设计:在读 --Java编程思想(Thinking in java):在读(排版翻译看起来不舒服,准备作为工具书,不通读) --图解TCP/IP(第5版):已读(17.11-17.12.25) --跟阿铭学Linux:在读 --算法图解:已读 --图解HTTP:

读《《图解TCP-IP》》有感

读<<图解TCP/IP>>有感 TCP/IP 最近几天读完<<图解TCP/IP>>,收获蛮多,记得上学时读stevens的<<TCP/IP详解>>时那是一个囫囵吞枣,没认真看也看不下去.等有时间再拜读下<<TCP/IP详解>>吧,估计能有不少共鸣. 现在觉得,要想比较透彻理解TCP/IP,还得需要有服务器编程经验,学校应该同时开设<socket编程>>相关课程,最好同一个老师教,可以串讲,不然

[图解Java]读写锁ReentrantReadWriteLock

图解ReentrantReadWriteLock 如果之前使用过读写锁, 那么可以直接看本篇文章. 如果之前未使用过, 那么请配合我的另一篇文章一起看:[源码分析]读写锁ReentrantReadWriteLock 0. demo 我先给出一个demo, 这样大家就可以根据我给的这段代码, 边调试边看源码了. 还是那句话: 注意"My" , 我把ReentrantReadWriteLock类 改名为了 "MyReentrantReadWriteLock"类 , &q

《图解HTTP》读后总结

阅读时间:2019.10.30-2019.11.6 阅读心得: 从知乎上看到有人推荐这本书,本身对计算机网络方面学习的比较少,于是就买来这本书开始看.这本书总体看下来比较轻松,因为书中的插画非常卡通,而且因为整本书都是在围绕HTTP进行讲解,所以内容上不会设计太多其他深奥的知识.读完之后,我对HTTP有了一个基本的认识,从以前只知道它是一个协议,到现在能够搞清楚这个协议内部的结构.返回的状态码等等,这都得益于这本小巧但又细致的书.也希望感兴趣的伙伴可以去读一读这本书呀! 阅读总结: [这本书一共

读《图解HTTP》总结--第七章

确保Web安全的HTTPS 在HTTP协议中有可能存在信息窃听或者身份伪装等问题.使用HTTPS通信机制可以有效地防止这类问题.本篇着重介绍下HTTPS 7.1 HTTP的缺点 到现在为止,我们已经了解到HTTP具有相当优秀和方便的一面,然而HTTP并非只有好的一面,事物皆具有两面性,HTTP也具有不足之处.其主要的不足列举如下: 通信使用明文(不加密),内容可能会被窃听; 不验证通信方的身份,因此有可能遭遇伪装; 无法证明报文的完整性,所以有可能已遭篡改 这些问题不仅在HTTP上出现,其他未加

读《图解HTTP》总结--第一章

一.第一章:了解Web及网络基础 1.基础知识     HTTP:(HyperText Transfer Protocol ,超文本传输协议)          客户端:发送请求获取服务器资源的web浏览器等都可以称为客户端          www : World Wide Web  万维网          URL :Uniform  Resource Locator ,统一资源定位符          URI  :Uniform Resource Identifier  统一资源标识符  

读《图解HTTP》总结--第四章

返回结果的HTTP状态码 HTTP状态码负责表示客户端HTTP请求的返回结果,标记服务器端的处理是否正常.通知出现的错误等工作.下边详细介绍下状态码的工作机制. 4.1 状态码告知从服务器端返回的请求结果 状态码的职责是当客户端向服务器端发送请求时,描述返回的请求结果.借助状态码,用户可以知道服务器端是正常处理了请求,还是出现了问题. 状态码如200 OK,以3位数字和原因短语组成.数字中的第一位指定了响应类型,后两位无分类.响应类型有如下5种: 类别 原因短语 1XX Informationa

读《图解HTTP》总结--第十一章

Web的攻击技术 互联网上的攻击大都将Web站点作为目标.本篇讲解具体有哪些攻击Web站点的手段,以及这些攻击会造成怎样的影响. 11.1 针对Web的攻击技术 简单的HTTP协议本身并不存在安全性问题,因此协议本身几乎不会成为攻击的对象.应用HTTP协议的服务器和客户端,以及运行在服务器上的Web应用等资源才是攻击的目标.目前,来自互联网的攻击大多是冲着Web站点来的,他们大多把Web应用作为攻击目标.下面主要讲述针对Web应用的攻击技术. 11.1.1 HTTP不具备必要的安全功能 与最初的