基础概念:
HTTP:Hyper Text Transfer Protocol 超文本传输协议
versions:
HTTP/0.9:只接收GET一种请求方法,只支持纯文本
HTTP/1.0:支持PUT、POST、DELETE和HEAD,支持MINE
HTTP/1.1:在HTTP/1.0的基础上,增加了缓存功能,支持长连接,支持管道方式同时 发送多个请求
HTTP请求方法:获取资源的方法
HTTP/0.9:GET
HTTP/1.0:PUT(修改服务器上的内容),POST,DELETE(请求删除服务器上的request-URL),HEAD
其他:TRACE,OPTIONS,CONNECTION
MINE:Mutipurpose Internet Mail Extension 多用途互联网邮件扩展
将非文本数据在传输前重新编码为文本格式,使得HTTP可以传输非文本文件并展示
方法:将非文本数据交给指定的进程在传输前重新编码为文本格式,接收方能够用相反的方法 将其重新还原为原来的文件,还能够对用相应的程序来打开此文件
HTML:HyperText Mark Language 超文本标记语言,用来开发超文本
Browser:浏览器,客户端,用于解析HTML
Web资源(Web对象):多个资源可以被整合成一个html文档
URL:Uniform Resource Locator,定位Web资源
格式:protocol://HOST:port/path/to/fole
动态网页:服务器端存储的文档非HTML格式,而是编程语言开发的脚本
客户端通过GET请求发送相关参数给服务器端
脚本接受参数之后在服务器运行一次,运行完成后会生成HTML文档,把生成的文档发给客户端
HTTP报文:请求报文、响应报文
请求报文格式:
<method> <request-URL> <version>
<headers>
<request-body>
method:请求方法
GET:请求参数和对应的值都附加在URL后面,一般不包含<request-body>请求数据
限制:参数长度受限,不适合传输大量数据
不适合传送私密数据
POST:将请求参数封装在<request-body>字段中,参数长度不受限
HEAD:用法和GET,但服务器端接收到HEAD请求方法后只返回响应头,而不会返回
<response-body>响应数据
request-URL:即请求的URL
version:HTTP版本号
headers:请求头部,格式 关键字:值
Accept:告诉服务器,本客户端能够接受的响应类型/响应工具
Cookie:发送客户端的Cookie
Referer:表示此次请求是从那个URL过来的
Cache-Control:对本次请求所返回的数据缓存进行控制
User-Agent:客户端的浏览器信息
GET /search?hl=zh-CN&source=hp&q=domety&aq=f&oq= HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-silverlight, application/x-shockwave-flash, */* Referer: <a href="http://www.google.cn/">http://www.google.cn/</a> Accept-Language: zh-cn Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld) Host: <a href="http://www.google.cn">www.google.cn</a> Connection: Keep-Alive Cookie: PREF=ID=80a06da87be9ae3c:U=f7167333e2c3b714:NW=1:TM=1261551909:LM=1261551917:S=ybYcq2wpfefs4V9g; NID=31=ojj8d-IygaEtSxLgaJmqSjVhCspkviJrB6omjamNrSm8lZhKy_yMfO2M4QMRKcH1g0iQv9u-2hfBW7bUFwVh7pGaRUb0RnHcJU37y- FxlRugatx63JLv7CWMD6UB_O_r
POST /search HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-silverlight, application/x-shockwave-flash, */* Referer: <a href="http://www.google.cn/">http://www.google.cn/</a> Accept-Language: zh-cn Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld) Host: <a href="http://www.google.cn">www.google.cn</a> Connection: Keep-Alive Cookie: PREF=ID=80a06da87be9ae3c:U=f7167333e2c3b714:NW=1:TM=1261551909:LM=1261551917:S=ybYcq2wpfefs4V9g; NID=31=ojj8d-IygaEtSxLgaJmqSjVhCspkviJrB6omjamNrSm8lZhKy_yMfO2M4QMRKcH1g0iQv9u-2hfBW7bUFwVh7pGaRUb0RnHcJU37y- FxlRugatx63JLv7CWMD6UB_O_r hl=zh-CN&source=hp&q=domety
响应报文语法:
<version> <status> <reson-phrase>
<headers>
<response-body>
version:HTTP版本号
status reson-phrase:状态码 原因描述
1xx:指示类的信息
100 Continue:表示服务器仅收到部分请求,继续接收客户端的请求
101 Switching Protocols:服务器遵循从客户的请求转换到另一种协议
2xx:成功类的信息
200 OK:请求成功
201 Create:请求已被创建,同时新的资源被创建
202:Accepted:请求已被接收,但是处理未完成
3xx:重定向类的信息
301 Moved Permanently:请求的页面已经转移至新的url
302 Found:请求的页面已经临时转移至新的url
304 Not Modified:服务器告诉客户端,原来缓存的文档还可以继续使用
4xx:客户端错误类的信息
400 Bad Request:服务器未能理解请求
401 Unauthorized:请求的页面需要用户密码认证
403 Forbidden:禁止客户端访问请求的页面
404 Not Found:服务器无法找到客户端请求的页面
5xx:服务器端错误类的信息
500 Internal Server Error:请求未完成,服务器端遇到不可预知的错误
503 Server Unavailable:请求未完成,服务器当前不能处理客户端的请求
504 Gateway Timeout:网关超时
HTTP/1.1 200 OK Date: Sat, 31 Dec 2005 23:59:59 GMT Content-Type: text/html;charset=ISO-8859-1 Content-Length: 122 <html> <head> <title>Wrox Homepage</title> </head> <body> <!-- body goes here --> </body> </html>
常见的Client:
IE
Firefox
Chrome
Opera
Safari
常见的Server:
Apache->httpd
IIS
nginx
lighttpd
thttpd:嵌入式
常见的应用程序服务器
IIS(微软)
tomcat(apache,JSP,source)
Websphere(IBM,JSP,commodity)
Weblogic(Oracle,JSP,commodity)
JBoss(RedHat)
Web服务器的主要操作
1、建立连接——接受或拒绝客户端连接请求;
2、接收请求——通过网络读取HTTP请求报文;
3、处理请求——解析请求报文并做出相应的动作;
4、访问资源——访问请求报文中相关的资源;
5、构建响应——使用正确的首部生成HTTP响应报文;
6、发送响应——向客户端发送生成的响应报文;
7、记录日志——当已经完成的HTTP事务记录进日志文件;
详细讲解用户访问web服务器的整个过程
简单点访问原理:客户端用户发送一个http请求,http请求到达服务器之后。先进入服务器的内核空间,服务器的内核空间,将其进行解析。发现其实一个web请求。然后将其给本机的用户进程http进程。http进程再发送一个请求,到内核空间,内核空间将我们要访问的数据从硬盘上提取出来。返回给我们的用户空间进程。用户空间进程再将其内容发送给内核空间。内核空间经过层层转换发送给客户端。
复杂点访问原理:客户端用户发送一个http请求,http请求到达服务器之后。先进入服务器的内核空间,服务器的内核空间,将其进行解析。发现其实一个web请求。然后将其给本机的用户进程http进程。http进程发现其要访问的是动态网页,通过其他协议,首先调用动态网页的程序即动态网页解释器再将内容给送到内核空间,内核空间将我们要访问的数据从硬盘上提取出来进行处理。返回给我们的用户空间的的解释器进程。解释器进程再将生成的文档再通过协议返回给web用户进程。web服务器再将其发送给我们的内核。内核空间经过层层转换发送给客户端。
Web服务器处理并发连接请求的架构方式
1、单线程web服务器(Single-threaded web servers)
此种架构方式中,web服务器一次处理一个请求,结束后读取并处理下一个请求。在某请求处理过程中,其它所有的请求将被忽略,因此,在并发请求较多的场景中将会出现严重的必能问题。
2、多进程/多线程web服务器
此种架构方式中,web服务器生成多个进程或线程并行处理多个用户请求,进程或线程可以按需或事先生成。有的web服务器应用程序为每个用户请求生成一个单独的进程或线程来进行响应,不过,一旦并发请求数量达到成千上万时,多个同时运行的进程或线程将会消耗大量的系统资源。
3、I/O多路复用web服务器
为了能够支持更多的并发用户请求,越来越多的web服务器正在采用多种复用的架构——同步监控所有的连接请求的活动状态,当一个连接的状态发生改变时(如数据准备完毕或发生某错误),将为其执行一系列特定操作;在操作完成后,此连接将重新变回暂时的稳定态并返回至打开的连接列表中,直到下一次的状态改变。由于其多路复用的特性,进程或线程不会被空闲的连接所占用,因而可以提供高效的工作模式。
4、多路复用多线程web服务器
将多进程和多路复用的功能结合起来形成的web服务器架构,其避免了让一个进程服务于过多的用户请求,并能充分利用多CPU主机所提供的计算能力。
Web代理服务器
Web代理服务器工作于web客户端和web服务器之间,它负责接收来自于客户端的http请求,并将其转发至对应的服务;而后接收来自于服务端的响应,并将响应报文回送至客户端。