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)、请求行

请求行只包括三个内容:方法、请求资源的URIHTTP版本,其格式可以表示为:

Method  Request-URI  HTTP-Version  CRLF

其中,CRLF表示回车和换行。

方法有GETPOST

(2)、请求报头

常见的请求报头有AcceptUser-AgentAccept用于指定客户端所接受的信息类型。

例如:Accepttext/html

  Acceptimage/gif

表明客户端可接收图像和HTML文件或文本文件

User-Agent用于将发送请求的客户端信息,如客户端的操作系统名称和版本信息、浏览器的名称和版本信息等告知服务器。

其他常用的请求报头说明如下:

Accept:用于指定客户端所支持的信息类型。

Accept-Charset:指定客户端可以接受的字符集,如ISO-8859-1GB2312等。如果未设置这个域,则表示可以接收任何字符集。

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请求中不能包含实体内容,而使用POSTPUTDELETE方法的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:表示内部服务器错误,即服务器端的CGIASPJSP等程序发生了错误。

503:表示服务器暂时性超载,不能处理当前的请求。

状态行举例:

HTTP 1.0 200 OK

(2)、响应报头

常见的响应报头如下:

Allow:指出服务器所支持的请求方法,如GETPOST等方法。

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                      /*连接状态*/

DateWed,  19 Nov 2011 02:20:45 GMT  /*日期*/

ServerApache/2.0.54(Unix)             /*服务器*/ 

Content-Length397                    /*指定数据包含的字节长度*/

Content-Typetext/html                  /*指定返回数据的MIME类型*/

/*空行*/

<html>

<body>

/*数据*/

</body>

</html>

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章