一、Web相关
1、Web服务流程
2、Web应用分层架构
(1)Web应用三层架构【无拓展性】
(2)Web应用四层架构【解决方案】
3、名词区分
URI:统一资源标识符,用来唯一的标识一个资源;
URL:统一资源定位符,用来定位一个资源;
URN,uniform resource name,统一资源命名,是通过名字来标识资源。如:mailto:[email protected]。
URI抽象结构 [scheme]:scheme-specific-part#[fragment]
[scheme]://[authority][path]?[query]#[fragment]
authority为[user]:[password]@[host]:[port]
[scheme]://[user]:[password]@[host]:[port][path]?[query]#[fragment]
二、HTTP
1、HTTP工作流程
HTTP客户端启动TCP连接(创建套接字)到服务器,端口80。一旦建立连接,浏览器进程和服务器进程就可以通过各自的套接字来访问。
http报文(应用层协议报文)在浏览器(http client)和Web服务器(http server)之间进行交换。
客户端套接字:客户往自己的套接字发送HTTP请求消息,也从自己的套接字接收HTTP响应消息。
服务器从自己的套接字接收HTTP请求消息,也往自己的套接字发送HTTP响应消息。
2、HTTP连接类型
HTTP既可以使用非持久连接(non-persistent
connection),也可以使用持久连接(persistent
connection)。HTTP/1.0使用非持久连接,HTTP/1.1默认使用持久连接。
(1)非持久连接
非持久连接情况下从服务器到客户传送一个Web页面的步骤。假设该页面由1个基本HTML文件和10个JPEG图像构成,而且所有这些对象都存放在同一台服务器主机中。 再假设该基本HTML文件的URL为http: // www.besti.edu.cn/somepath/index.html。具体步骤为:
HTTP客户初始化一个与服务器主机www.besti.edu.cn中的HTTP服务器的TCP连接。HTTP服务器使用默认端口号80监听来自HTTP客户的连接建立请求。
HTTP客户经由与TCP连接相关联的本地套接字发出一个HTTP请求消息。这个消息中包含路径名/somepath/index.html。
HTTP服务器经由与TCP连接相关联的本地套接字接收这个请求消息,再从服务器主机的内存或硬盘中取出对象/somepath/index.html,经由同一个套接字发出包含该对象的响应消息。
HTTP服务器告知TCP关闭这个TCP连接(不过TCP要到客户收到刚才这个响应消息之后才会真正终止这个连接)。
HTTP客户经由同一个套接字接收这个响应消息。TCP连接随后终止。该消息标明所封装的对象是一个HTML文件。客户从中取出这个文件,加以分析后发现其中有10个JPEG对象的引用。
给每一个引用到的JPEG对象重复步骤1-4。
(2)持久连接
持久连接情况下,服务器在发出响应后让TCP连接继续打开着。同一对客户/服务器之间的后续请求和响应可以通过这个连接发送。
通常,HTTP服务器在某个连接闲置一段特定时间后关闭它,而这段时间通常是可以配置的。
持久连接分为不带流水线(without
pipelining)和带流水线(with
pipelining)两个版本。如果是不带流水线的版本,那么客户只在收到前一个请求的响应后才发出新的请求。
HTTP/1.1的默认模式使用带流水线的持久连接。这种情况下,HTTP客户每碰到一个引用就立即发出一个请求,因而HTTP客户可以一个接一个紧挨着发出各个引用对象的请求。服务器收到这些请求后,也可以一个接一个紧挨着发出各个对象。
2、HTTP消息格式
(1)请求消息
GET方法
如:
GET
/somedir/page.html HTTP/1.1
Host:www.besti.edu.cn
Connection:close
User-agent:Mozilla/4.0
Accept-language:zh-cn
这个消息是用普通的ASCII文本书写的。共有5行(每行以一个回车符和一个换行符结束),最后一行后面还有额外的一个回车特和换行符。请求行有3个字段:方法字段、URL字段、HTTP版本字段。方法字段有若干个值可供选择,包括GET、POST和HEAD。HTTP请求消息绝大多数使用GET方法,头部行Host:www.besti.edu.cn定存放所请求对象的主机。请求消息中包含头部Connection:close是在告知服务器本浏览器不想使用持久连接;服务器发出所请求的对象后应关闭连接。User-agent头部行指定用户代理,也就是产生当前请求的浏览器的类型。本例的用户代理是Mozilla/4.0,它是Nelscape浏览器的一个版本。
附属体不在GET方法中使用,而是在POST方法中使用。POST方法适用于需由用户填写表单的场合,如往google搜索引擎中填入待搜索的词。用户提交表单后,HEAD方法与GET方法类似,两者的差别只是服务器在对HEAD方法的响应消息中去掉了所请求的对象,其他内容则与对GET方法的响应消息一样。HEAD方法通常用于HTTP服务器软件开发人员进行调试。
- POST方法
如:
POST /HTTP/1.1
Host: www.wrox.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1;
en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 40
Connection: Keep-Alive
name=Professional%20Ajax&publisher=Wiley
(2)响应消息
典型的HTTP响应消息:
HTTP/1.1
200 OK
Connection:close
Date: Thu,
13 Oct 2005 03:17:33 GMT
Server:
Apache/2.0.54 (Unix)
Last—Modified:Mon,22 Jun 1998
09;23;24 GMT
Content—Length:682l
Content—Type:text/html
响应报文的开始行是状态行。状态行包括三项内容,即 HTTP 的版本,状态码,以及解释状态码的简单短语。
3、状态码
1xx 表示通知信息的,如请求收到了或正在进行处理。
2xx 表示成功,如接受或知道了。
3xx 表示重定向,表示要完成请求还必须采取进一步的行动。
4xx 表示客户的差错,如请求中有错误的语法或不能完成。
5xx 表示服务器的差错,如服务器失效无法完成请求。
其中:
200 OK——请求成功,所请求信息在响应消息中返回。
301 Moved Permanently——所请求的对象己永久性迁移,新的URL在本响应消息的Location头部指出。客户软件会自动请求这个新的URL。
400 Bad Request——表示服务器无法理解相应请求的普通错误的状态码。
404 Not Found——服务器上不存在所请求的文档。
HTTP Version Not Support——服务器不支持所请求的HTTP协议版本。
4、分析比较
(1)GET、POST、HEAD
GET:长度限制1024,速度快,不安全(URL地址栏里提交的参数是可见的,URL提交参数以问号分割;每个参数格式为:参数名=参数值,多个参数用&连接;URL编码用于解决格式问题,统一标准)。
POST:长度无限制,通常由中间件限制,速度较慢,安全性高(参数在URL中不可见)。
HEAD:只返回头。
(2)Cookie、Session
Cookie:把身份信息记录在客户端(浏览器);
Session:在客户端(浏览器)存放的是ID值,身份信息在服务器端。