Web服务及http协议

HTTP:HyperText Transfer Protocol--超文本传输协议

超链接:能够在文档之间跳转的文本

早起的Web仅仅是能够实现在文档之间跳转的一种协议
http/0.9:仅支持纯文本(超链接) 由纯ASCII值组成的
HTMLHyperText Mark Language 超文本标记语言 用来编写超文本的语言
<h2>Title</h2>
<h2>...</h2>HTML的一组标签,用来定义里面的字符的显示属性,这组标签是HTML语言内置的,事先规定好了的,应该将这些字体解析成什么格式的内容

Browser客户端用户通过浏览器可以将web服务器提供的超文本进行显示,其中那些标签是不会显示出来的

 

但是如果有两台主机上提供的文本的名称是一样的,用户该如何区别这两个文件呢?

URIUniform Resource Indentifier 统一资源标识符 可以在全局范围内唯一引用某一个独立的资源的命名方式

URLUniform Resource Location 统一资源定位符 是统一资源标识符的一个子对象, 用于描述在互联网上互联网资源的统一表示格式

protocol://HOST:port/path/to/file
协议://主机:端口/路径/文件名
http://www.qq.com/download/linux.tar.gz

 

web资源:能够通过统一资源定位符唯一的标记,能够让客户端访问的文件
多个资源很可能被整合为一个html文档

web对象:跟web资源是同一个概念

 

HTTP方法(资源访问的方法):
GET从服务器获取资源到本地并且通过浏览器进行显示(早起的HTTP版本例:http0.9只有这一种方法)
PUT从远程服务器上直接获取一个文件到本地
POST通过表单提交数据到服务器上去的
DELETE在远程服务器上删除一个文件的
HEAD只返回首部,不返回主体
TRACE
OPTIONS
CONNECTION

 

MIMEMultipurpose Internet Mail Extension 多用途互联网邮件扩展

SMTPSimple Mail Transmission Protocol 只能传输纯文本的
MIME可以将非文本数据在传输前能够重新编码为文本格式再进行传输,并且在接收方可以用相反的方式将其重新还原为原来的格式,还能够调用相应的程序来打开此文件
Base64一种文本编码格式

 

动态效果
flash
Java,Applet,JRE

 

动态网页:在服务器端存储的文档非HTML格式,而是一种编程语言开发的脚本,脚本在接受来自客户端的参数之后在服务器执行一次,执行完成之后会生成HTML格式的文档,把生成的文档发送给客户端
注:web服务器不会帮你去执行这些脚本,而是通过调用其他工具来执行。web服务器并不负责处理动态内容
例:web:index.php
web --> procotol --> php(运行index.php)

 

静态页面响应流程:
用户发来的请求一定是通过网络协议发送到服务端的,而协议是工作在操作系统的内核中的。当请求到达内核,内核空间经过解析后,发现请求范文的是80端口的套接字,内核就会将这个用户请求通过套接字转给用户空间的web服务器。web服务器发现用户访问的是一个网页文件,服务器端就会陷入内核,重新转换成内核模式,到磁盘上将这个文件加载过来。当内核找到这个文件后,返回给用户空间,web服务器发现文件取出来了,就通过套接字再次回到内核空间,通过网络TCP/IP协议栈返回给客户端

 

动态页面响应流程:
用户发来的请求一定是通过网络协议发送到服务端的,而协议是工作在操作系统的内核中的。当请求到达内核,内核空间经过解析后,发现请求范文的是80端口的套接字,内核就会将这个用户请求通过套接字转给用户空间的web服务器。web服务器发现用户访问的是一个动态页面,web服务器就会通过其他协议启动一个解释器的进程,然后解释器陷入内核,重新转换成内核模式,到磁盘上去将这个文件加载到解释器中,然后执行一次,执行之后将执行结果返回给web服务器,并关闭解释器进程,然后web服务器将这个结果通过套接字再次回到内核空间,通过网络TCP/IP协议栈返回给客户端。


一个动态网页包含了静态内容(不需要改变的,不需要执行的,例如:图片)和动态内容(需要执行再返回给用户)

 

用户具体要访问的哪个资源的信息记录在HTTP协议的首部中
HTTP报文:分为请求报文和响应报文

请求报文语法:

<method> <request-URL> <version>
资源获取方法 请求的资源是什么 对应请求资源协议的版本号
<headers>
http协议首部

<entity-body>
报文主体

响应报文语法:
<version> <status> <reason-phrase>
对应请求资源协议的版本号 状态码 具体说明status的意义
<headers>
响应报文首部

<entity-body>
报文主体

状态码有五类:
1xx:纯信息
2xx:“成功”类的信息(200-请求资源正常)
3xx:“重定向”类的信息,资源存在,但是资源已经被挪走了,需要重新发起请求,并给你请求的地址(301-永久重定向、302-临时重定向、304-没有发生任何改变,直接使用缓存内容)
4xx:客户端错误类的信息(404-请求了一个不存在的文件)
5xx:服务器端错误类的信息

例如:
请求报文
GET / HTTP/1.1
Host:www.qq.com
Connection:keep-alive

响应报文
HTTP/1.1 200 OK
X-Powered-By:PHP/5.2.17
Vary:Accept-Encoding,Cookie,User-Agent 额外标记的变化类的内容
Cache-Control:max-age=3,must-revalidate
Content-Encoding:gzip 内容编码机制
Content-Length:6931 内容长度

上面两个报文的第一行通常称为报文“起始行(start line)”,后面的标签格式的内容称作首部域(Header field),每个首部域都由名称(name)和值(value)组成,中间用逗号分隔,另外,响应报文通常还有一个称作Body的信息主体,即响应给用户端的内容

 


Web服务器的主要操作:
1、建立连接——接受或拒绝客户端连接请求
2、接收请求——通过网络读取HTTP请求报文
3、处理请求——解析请求报文并做出响应的动作
4、访问资源——访问请求报文中相关的资源
5、构建响应——使用正确的首部生成HTTP响应报文
6、发送相应——向客户端发送生成的响应报文
7、记录日志——将已经完成的HTTP事务记录进日志文件

 

用户请求的一个页面中可能存在着多个web资源,而这每个资源都是要单独的去请求的,并且HTTP协议是基于TCP协议工作的,每次建立连接都需要三次握手,断开连接时都需要四次断开,极其的浪费时间和带宽资源
因此,在HTTP/1.1中:
1、增强了缓存的功能
2、引入长连接——客户端和服务端在获取一个资源后不是直接断开,而是等待继续获取其他的资源

 

 

Web服务器处理并发连接请求的架构方式

1、单线程web服务器(Single-threaded web servers)

此种架构方式中,web服务器一次处理一个请求,结束后读取并处理下一个请求。在某请求处理过程中,其它所有的请求将被忽略,因此,在并发请求较多的场景中将会出现严重的必能问题。

 

2、多进程/多线程web服务器

此种架构方式中,web服务器生成多个进程或线程并行处理多个用户请求,进程或线程可以按需或事先生成。有的web服务器应用程序为每个用户请求生成一个单独的进程或线程来进行响应,不过,一旦并发请求数量达到成千上万时,多个同时运行的进程或线程将会消耗大量的系统资源。

 

3I/O多路复用web服务器

为了能够支持更多的并发用户请求,越来越多的web服务器正在采用多种复用的架构——同步监控所有的连接请求的活动状态,当一个连接的状态发生改变时(如数据准备完毕或发生某错误),将为其执行一系列特定操作;在操作完成后,此连接将重新变回暂时的稳定态并返回至打开的连接列表中,直到下一次的状态改变。由于其多路复用的特性,进程或线程不会被空闲的连接所占用,因而可以提供高效的工作模式。

 

4、多路复用多线程web服务器

将多进程和多路复用的功能结合起来形成的web服务器架构,其避免了让一个进程服务于过多的用户请求,并能充分利用多CPU主机所提供的计算能力。

 

代理

Web代理服务器工作于web客户端和web服务器之间,它负责接收来自于客户端的http请求,并将其转发至对应的服务;而后接收来自于服务端的响应,并将响应报文回送至客户端。


常见的客户端浏览器和服务器端web服务器
客户端浏览器:
1、IE
2、Firefox
3、Chrome
4、Opera
5、Safari

web服务器(www.netcraft.com):
1、Apache
2、IIS
3、nginx
4、lighttpd(德国)
5、thttpd(嵌入式平台)

应用程序服务器:不仅能够解析静态内容,还能够处理某种特定格式的动态内容
1、IIS
2、Tomcat(apache,Java的应用程序服务器,开源的)
3、Websphere(IBM,专门用来解析Java企业级应用程序的,商业产品)
4、Weblogic(Bea->Oracle,JSP的应用服务器,商业产品)
5、JBoss(RedHat)

 

你可能感兴趣的:(http协议)