一些不太重要的备注:
并发访问响应模型(Web I/O):
服务器对请求报文进行解析,并获取请求的资源及请求方法等相关信息,根据方法,资源,首部和可选的主体部分对请求进行处理。
一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据4个部分组成,下图给出了请求报文的一般格式。
请求行分为三个部分:请求方法、请求地址和协议版本。
请求方法
HTTP 定义的请求方法:GET、POST、HEAD、PUT、DELETE、TRACE、OPTIONS。
最常的两种GET和POST,如果是RESTful接口的话一般会用到GET、POST、DELETE、PUT。
请求地址
URL:统一资源定位符,是一种自愿位置的抽象唯一识别方法。
协议版本
HTTP 使用版本。
请求头部为请求报文添加了一些附加信息,由“名/值”对组成,每行一对,名和值之间使用冒号分隔。
请求头部的最后会有一个空行,表示请求头部结束,接下来为请求数据,这一行非常重要,必不可少。
可选部分,比如GET请求就没有请求数据。
服务器获取请求报文中请求的资源web服务器,即存放了web资源的服务器,负责向请求者提供对方请求的静态资源,或动态运行后生成的资源。
资源放置于本地文件系统特定的路径:DocRoot
。
DocRoot --> /var/www/html
HTTP在Linux中的文件根目录是:/var/www/html
,对应URL 中 服务器名称后面的 “/”
例如:
Linux中的文件位置:
/var/www/html/images/logo.jpg
完整的URL;
http://www.magedu.com/images/logo.jpg
web服务器资源路径映射方式:
(a) docroot
(b) alias
(c) 虚拟主机docroot
(d) 用户家目录docroot
一旦Web服务器识别除了资源,就执行请求方法中描述的动作,并返回响应报文。响应报文中 包含有响应状态码、响应首部,如果生成了响应主体的话,还包括响应主体。
如果事务处理产生了响应主体,就将内容放在响应报文中回送过去。响应报文中通常包括:
web服务构建的响应并非客户端请求的资源,而是资源另外一个访问路径。
Web服务器要负责确定响应主体的MIME类型。多种配置服务器的方法可将MIME类型与资源管理起来:
HTTP响应报文主要由状态行、响应头部、空行以及响应数据组成。
1、状态行:
由3部分组成,分别为:协议版本,状态码,状态码描述。
其中协议版本与请求报文一致,状态码描述是对状态码的简单描述,所以这里就只介绍状态码。
状态码:
状态代码为3位数字。
1xx:指示信息--表示请求已接收,继续处理。
2xx:成功--表示请求已被成功接收、理解、接受。
3xx:重定向--要完成请求必须进行更进一步的操作。
4xx:客户端错误--请求有语法错误或请求无法实现。
5xx:服务器端错误--服务器未能实现合法的请求。
2、响应头部
与请求头部类似,为响应报文添加了一些附加信息
常见响应头部如下:
3、响应数据
用于存放需要返回给客户端的数据信息。
Web服务器通过连接发送数据时也会面临与接收数据一样的问题。服务器可能有很多条到各个客户端的连接,有些是空闲的,有些在向服务器发送数据,还有一些在向客户端回送响应数据。服务器要记录连接的状态,还要特别注意对持久连接的处理。对非持久连接而言,服务器应该在发送了整条报文之后,关闭自己这一端的连接。对持久连接来说,连接可能仍保持打开状态,在这种情况下,服务器要正确地计算Content-Length首部,不然客户端就无法知道响应什么时候结束了。
最后,当事务结束时,Web服务器会在日志文件中添加一个条目,来描述已执行的事务。
// 发起请求
http://localhost/general/form/getpost.asp?Text=Hello+World
// 解析请求参数(asp语法)
<% If Request.QueryString(“Text”) <> ““ Then %>
通过get方法传递来的字符串是: “<%= Request.QueryString(“Text”) %>“
<% End If %>
// 发起请求
http://localhost/general/form/getpost.asp
// 解析请求参数(asp语法)
<% If Request.Form(“Text”) <> ““ Then %>
通过Post方法传递来的字符串是: “<%= Request.Form(“Text”) %>“
<% End If %>