首页 > 代码库 > No1_Web的工作机制
No1_Web的工作机制
1、C/S结构与B/S结构的区别
a、硬件环境方面。C/S结构是建立在局域网基础上的,而B/S结构是建立在广域网的基础之上的。
b、软件重用性方面。C/S程序的软件重用性没有B/S程序中软件的重用性好。
c、系统维护方面。C/S结构的系统升级困难,必须整体考量,要实现升级可能需要重新实现一个系统。B/S结构中可以仅更换个别构建,实现系统的无缝升级,降低系统维护的开销,升级简单。
d、用户接口方面。B/S结构使用浏览器作为展示界面,因此有更加丰富的表现方式,而C/S结构表现方法有限。
e、处理问题方面。C/S结构与操作系统有关,B/S结构可以面向不同的用户群,地域上可以是分散的,与操作系统平台的关系较小。
2、解析HTTP协议请求
(1)、请求行
请求行只包括三个内容:方法、请求资源的URI和HTTP版本,其格式可以表示为:
Method Request-URI HTTP-Version CRLF
其中,CRLF表示回车和换行。
方法有GET、POST等
(2)、请求报头
常见的请求报头有Accept和User-Agent。Accept用于指定客户端所接受的信息类型。
例如:Accept:text/html
Accept:image/gif
表明客户端可接收图像和HTML文件或文本文件
User-Agent用于将发送请求的客户端信息,如客户端的操作系统名称和版本信息、浏览器的名称和版本信息等告知服务器。
其他常用的请求报头说明如下:
Accept:用于指定客户端所支持的信息类型。
Accept-Charset:指定客户端可以接受的字符集,如ISO-8859-1、GB2312等。如果未设置这个域,则表示可以接收任何字符集。
Accept-Encoding:指定客户端可接受的编码。
Accept-Language:指定客户端可接受的自然语言,如果该域未设置,则表示客户端可接受各种语言。
Host:指定被请求资源所在的主机和端口号,缺省端口号为80。
Connection:指定请求结束后是保持连接还是关闭连接。
HTTP请求举例:
GET /index.html HTTP/1.1
Accept: text/plain /*纯ASCII码文本文件*/
Accept: text/html /*HTML文本文件*/
User-Agent: Mozilla/4.5(WinNT) /*指定用户代理*/
/*空行*/
需要注意的是,使用GET方法的HTTP请求中不能包含实体内容,而使用POST、PUT和DELETE方法的HTTP请求中可以包含实体内容。
(3)、GET方法和POST方法
Get方法中对总的字符数是有限制的,这取决去具体的服务器。如果用户在地址栏中键入的文本太长,可能会导致GET方法无法正常工作。
用GET方法发送的数据会追加到URL的后面,而且在浏览器的地址栏中会显示出这些数据,因此一些比较隐私的或敏感的数据不建议使用GET方法来发送。
在GET方法中,参数会追加到请求URL后面,且以”?”开头。各个参数之间使用”&”进行分隔。
使用POST方法发送数据的示例如下:
POST /index.html HTTP1.1 /*请求行*/
HOST:www.javait.com /*存放所请求对象的主机*/
User-Agent:Mozilla/4.5(WinNT) /*指定用户代理*/
Accept:text/html /*HTML文本文件*/
Accept-language:zh-cn /*指定可接受的语言*/
Content-Length:22
Connection:keep-alive
param1=abc?m2=def /*提交的参数*/
3、解析HTTP协议响应
(1)、状态行
状态行由HTTP版本(HTTP-Version)、状态码(Status-Code)以及解释状态码的简单短语(Reason-phrase)三部分构成,其格式如下:
HTTP-Version Status-Code Reason-phrase CRLF
状态码由三位数字组成,共有5大类33种,其中第一个数字指定了响应类别,取值为1-5,后面两位没有具体的规定。
1xx:指示信息,如请求收到了或正在处理。
2xx:成功。
3xx:重定向。
4xx:客户端错误,如请求中含有错误的语法或不能正常完成。
5xx:服务器端错误,如服务器失效而无法完成请求。
例如:
200 OK 成功
304 Not Modified 未修改
400 Bad Request 错误请求
404 Not Found 未找到
典型的响应状态吗解释如下:
200:表示请求成功,成功返回了请求的资源。
302/307:表示临时重定向,此时被请求的文档已经临时移动到其他位置,该文档新的URL将在Location响应报头中给出。
401:表示浏览器访问的是一个受到密码保护的页面。
403:表示服务器收到请求,但拒绝提供服务。
404:表示找不到资源,即服务器上不存在浏览器请求的资源。
500:表示内部服务器错误,即服务器端的CGI、ASP、JSP等程序发生了错误。
503:表示服务器暂时性超载,不能处理当前的请求。
状态行举例:
HTTP 1.0 200 OK
(2)、响应报头
常见的响应报头如下:
Allow:指出服务器所支持的请求方法,如GET、POST等方法。
Content-Encoding:指定文档的编码方法。
Content-Length:指定响应中数据的字节长度。
Content-Type:指定回送数据的MIME类型。
Date:指定发送HTTP消息的日期。
Last-Modified:指定返回数据的最后修改时间。
Location:重定向请求者到一个新的URI地址。
Refresh:指定浏览器定时刷新的时间。
Expired:指定浏览器缓存数据的时间。
Server:指定服务器的名称,包含了处理请求的服务器使用的软件产品信息,与User-Agent请求报头相对应。
(3)、响应正文
响应正文是指服务器所返回的资源内容,如HTML页面。响应报头和响应正文之间必须用空行来分隔。
一个典型的HTTP响应示例如下:
HTTP/1.1 200 OK /*状态行*/
Connection: close /*连接状态*/
Date:Wed, 19 Nov 2011 02:20:45 GMT /*日期*/
Server:Apache/2.0.54(Unix) /*服务器*/
Content-Length:397 /*指定数据包含的字节长度*/
Content-Type:text/html /*指定返回数据的MIME类型*/
/*空行*/
<html>
<body>
/*数据*/
</body>
</html>
No1_Web的工作机制