基本Web概念
URI
- URI(Uniform Resource Identifier,统一资源标识符)是以特定语法来标识一个资源的字符串。
- 绝对URI由URI模式(scheme)和模式特有的部分组成,用冒号隔开:
模式:模式特有部分
。 - URI中的模式特有部分没有特定的语法,但很多都有结构层次的形式:
//authority/path?query
。authority部分制定了负责解析该URI其他部分的授权机构如www.baidu.com。如URIhttp://www.ietf.org
具有模式http和授权机构www.iter.org.
URN
- 有两种类型的URI:URL(Uniform Resource Locator, 统一资源定位符)和URN(Uniform Resource Name, 统一资源名).URL是指向Internet上某个位置的某个资源。URN是没有指向某个位置的某个资源的名。URN和URL不同,它不仅限于Internet资源。
- URN的目标是处理映射于许多不同的位置或者已经从一个网站移动到另一个网站的资源;它们用资源本身标识,而不是用资源所在的位置。
- URN的一般形式为:
urn:namespace:resource_name
命名空间是某个授权机构维护的某类资源的集合名。资源名是集合中的资源名。如urn:ISBN:1565924851
- 资源名的具体语法取决于命名空间。
URL
- URL用于标识在Internet上资源的位置。它指定用于访问服务器的协议、服务器名和文件在此服务器上的位置。
- URL的语法为:
protocol://username@hostname:port/path/filename?query#fragment
- 片段(fragment)指向远程资源的某个部分。如果远程资源是HTML,那么片段标识符将指定该HTML文档中的一个锚(anchor).如果远程资源是XML,那么片段标识符是一个XPoint。 指定的锚是在HTML文档中用标签创建的,如
<a name="xtocid19024">comments</a>
相对URL
- 每个URL不要求指定其全部,而是继承父文档的协议、主机名和路径。继承父文档部分信息的不完整URL成为相对URL。相反,完整指定的URL成为绝对URL。
- 如果相对URL以”/”开头,那么它是相对于文档根目录的,而不是当前文件。
- 相对URL允许一个文档数用多种协议来提供。并且允许整个文档数从一个网站移动或复制到另一个网站,而不会破坏所有的内部链接。
HTML、SGML和XML
HTML、SGML
- HTML是描述文本数据语义内容的简单标准。
- 标准HTML是SGML(Standard Generalized Markup Language,标准通用标记语言)的一个实例。
- SGML和继承而来的HTML所基于的想法是通过含义而不是外观进行设计。不能说希望某些文本以18磅大小显示,只可以说它是顶级标题。
- 用来标识文本的标签是不区分大小写的。
<STRong>
和<strong>
相同。从起始标签到结束标签之间的整个文本成为元素(element)。 - 有些元素在起始标签中有以名-值对形式编码的附加属性。属性的值可以引在单引号或双引号内。但引号只有在值包含空格时才是必需的。
XML
- XML(Extensible Markup Language,可扩展标记语言)是一种语义语言,允许网页作者创建所需的元素。
- XML严格要求格式良好的XML文档语法,要求浏览器拒绝所有格式不正确的文档。浏览器不能尝试修复出现的问题。
- XML可能有一个DTD(Document Type Definition,文档类型定义),它可以向有效文档加入额外的限制。
- XML要比HTML容易解析。
HTTP
HTTP是Web浏览器和Web服务器之间通信的标准协议。HTTP指明客户端如何与服务器建立连接、客户端如何从服务器请求数据、服务器如何响应请求,最后连接如何关闭。
客户端到服务器请求的步骤
- 建立连接。客户端与服务器的80端口建立一个TCP连接
- 进行请求。发送消息,请求URL中指定的页面:
GET /index.html HTTP/1.0
不管客户端或服务器平台上以何种方式结束一行,请求都以两个回车/换行对(在Java中是\r\n\r\n
)结束。
客户端请求中还可能包括其他信息,采用如下形式:keyword:value
。最常见的是关键词Accept。Accept: text/html, text/plain, image/gif, image/jepg
说明客户端可以处理四种MIME媒体类型,分别是HTML文档、纯文本以及JPEG和GIF图片。
另一个常见的关键词是User-Agent,它让服务器知道使用的是何种浏览器,允许服务器发送为特定浏览器类型而优化的文件。 - 响应。服务器向客户端发送响应。响应以响应码开头,后面是元数据首部、空行和所请求的文档或错误消息。
HTTP/1.1 200 OK
第一行指明服务器所使用的协议,后面是响应码。 - 关闭连接。客户端或服务器或两者都可以关闭连接。这样,每个请求都使用一个单独的网络连接。如果客户端重新请求,服务器不会记忆前次的连接或结果。不记忆过去请求的协议成为无状态协议。相反,有状态协议(如FTP)能够在连接关闭前处理多个请求。HTTP也是无状态协议。
HTTP 1.0 响应码
响应码 | 意义 |
---|---|
2xx Successful(成功) | 200到299之间的响应码表示接收、理解并接受了请求 |
200 OK(OK) | 最常见的响应码 |
3xx Redirection(重定向) | 300到399之间的响应码表示Web浏览器需要转到不同的页面 |
4xx Client Error(客户端错误) | 400到499之间的响应码指示客户端在某些方面有错误 |
400 Bad Request(不好的请求) | 客户端向服务器的请求使用了错误的语法 |
401 Unauthorized(未授权) | 访问此页面需要身份认证 |
403 Forbidden(禁止) | 服务器理解请求,但有意拒绝进行处理。身份认证没有用处 |
404 Not Found(未找到) | 指示服务器没有所请求的页面 |
5xx Server Error(服务器错误) | 500到599之间的响应码指示服务器发生了错误,服务器也无法修复此问题 |
MIME媒体类型
- MIME支持100多种预定义的内容类型。内容类型分为两级:类型和子类型。类型非常概括地展示包含的是何种数据:图片、文件还是影片。子类型标识数据的特定类型。
- 大部分Web服务器和客户端至少理解两种MIME文本内容类型text/html和text/plain、两种图片格式image/gif和image/jpeg。
- Java依靠MIME类型为数据流选择适当的内容处理器。
- MIME允许使用前缀-x定义附加的非标准子类型。
服务器端程序
- Java中,动态的服务器端程序经常使用servlet或JSP(Java Server Pages)编写,也可以使用其他语言编写,如C或Perl,或使用其他框架,如ASP或PHP。
- Web浏览器读取用户键入的数据,以一种简单的方式进行编码。每个字段的名与值用等号(=)分隔。不同的字段用与号(&)分隔。每个字段名和值都采用x-www-form-url-encoded形式;即所有非ASCⅡ或保留字符都用百分号加该字符在某个字符集中的值的十六进制数字所代替。空格是一种特殊情况,因为它和常见。空格不编码为%20,而是变成+号。加号本身编码为%2b。如,表单数据可以编码为:
username=Elliotte+Harold&email=elharo%40macfaq.com
这称为查询字符串(query string)。 - 将查询字符串发送给服务器有两种方法,GET和POST。如果表单指定了GET方法,则浏览器将查询字符串附加到要发送给服务器的URL的后面。指定POST的表单会在输出流中发送查询字符串。使用POST方法,Web浏览器会发送正常的首部,后面是一个空行(两个连续的回车/换行对),然后发送查询字符串。
- 因为GET请求会在URL中包括所有必需的信息,所以可以放入书签、进行链接等等。POST的请求却不可以。GET用于不承担责任的动作,如浏览一个页面。POST用于有所承诺的动作。例如,向购物车中添加货物应当用GET,因为这个动作不需要承诺;你仍可以放弃购物车。但是下订单应当用POST,因为这个动作是有承诺的。这就是为什么浏览器会在你回到一个使用POST的页面时要求你的确认。重新发送数据可能会购买两本一样的书。