HTTP: HyperText Transfer Protocal: 超文本传输协议
带超链接
Web:
http/0.9:仅支持纯文本(超链接),ASCII
html: HyperTextMark Language,编写超文本的语言
如:<h2>Title</h2>
Browser: 客户端
1.1.1.1: web, a.html
2.2.2.2: web,a.html
URI: Uniform Resource Indentifer, 全局范围(包括但不仅仅限于
)统一资源标识符。
统一的原因:路径格式上的统一
URL: UniformResource Locator,统一资源定位符,用于描述互联网资源的统一表示
URL是URI的子对象
Protocol://host:port/path/to/file
http://www.magedu.com/download/linux.tar.gz
WEB资源:http://www.gagedu.com/logo.gif
多个资源很可能被整合为一个html文档
Web对象:如果logo.gif
HTTP方法:
GET:最安全
http/1.0: put,post,delete
MIME: Mutipurpose Internet Mail Extension, 多用途互联网邮件扩展
将非文本数据在传输前重新编码为文本格式
接受方能够用相反的方式重新返回原来的格式,还能调用相应的格式
打开文件
SMTP: Simple Mail Transmission Protocol, 纯文本
Http参照邮件引进MIME,所以可以引用多种资源。
MIME以调用插件的形式
动态效果
Java,Applet, jre
动态网页:服务器段存储的文档非HTML格式,而是编程语言
开发的脚本,脚本接受参数之后在服务的执行一下,运行完成
后会生成HTML格式文档,并把临时生成的这个文档发给客户端
WEB: index.php
Web ---> protocol--->php(运行脚本)-->生成html文档
动态网页: 包含静态内容和动态内容
动态内容部分才行运行
WEB服务器怎么知道请求过来呢?
(1) 阻塞
(2) 非阻塞(轮询)
以上2种方式都可以归为监听。
必须到内核注册,声明要使用这个端口,而web服务器就
在这个端口等待。
IP:
SourceIP
Destination IP
TCP
Source Port
DestinationPort
Http
GET/2.html
Host:www.magedu.com(为虚拟主机准备的)
请求报文语法;
<method><request-URL><version>
<headers>
<entity-body>
相应报文语法:
<method><request-URL><version>
<headers>
<entity-body>
请求报文:
GET / HTTP/1.1
Host: www.magedu.com
Conection: keep-alive
相应报文:
HTTP:/1.1 200 OK
X-powered-By: PHP/5.2.17
Vary:Accept-Encodeing,Cookie, User-Agent
Cache-Contrl: max-age=3, must-revaliate
Content-Encoding: gzip
Content-Length:6931
Web服务器的主要操作:
1.建立连接-接受或者拒接客户端的连接请求
2.接收请求-通过网络读取HTTP请求报文
3.处理请求-解析请求报文并作出相应的动作
4.访问资源-访问请求报文中相关的资源
5.构建响应-使用正确的首部生成HTTP响应报文
6.发送相应-向客户端发送生成的报文
7.记录日志-当已经完成的HTTP事务记录进日志文件
所以,写一个web访问器要实现以上7个操作。
为了让标明请求的结果,有一个状态码
1xx: 纯粹的信息,用得很少
2xx: “成功”类的信息(200:正常相应)
解释status
3xx: 重定向类的信息,资源挪作了,给你一个新的地址
301:永久重定向,302:临时重定向,304:没有任何改变
4xx: 客服端错误信息(400:请求的文件找不到)
5xx: 服务器段错误的信息
如客户端情况一个动态页面,服务器段启动不了,就是服务
器端错误
Ss : 10个image, 3css, shtml
每个资源都要单独请求
浏览器启用多个线性请求每个资源
http, tcp, 三次握手,四次段凯
优化:将图片缓存在本地,刷新页面会重新请求资源,
Http/1.1:
(1)增强了缓存功能
(2)引入长连接的机制:客户端获取服务器段的一个资源后不马上断开
直接获取下面的资源。但并发量大的时候,会使部分请求连接
不上。1)超时断开;2)超过请求数断开,重新等待。
WEB服务器怎么响应多个用户的请求?
(1)单线程服务器模型,一次处理一个,一次处理
(2)多线程服务器模型,有一个主线程,每一次来一个
请求的时候,就生成一个子线程处理;在线程非常多的时候
,开销太大,性能下降。早期并发量少,用得较多。
(3)只有一个进程,基于事件的驱动机制+状态转换通知,
一次把多个请求放进来, 一个线程负责多个请求,第一请求获取
文件,主线程让其切入内核获取文件了,但怎么知道它好没好呢?
轮询效率不高。每个请求加一个状态,只要状态改变了,主线程
就认为要处理,这种是事件驱动的方式,但效率还是比较低,结合
请求好了还可以给主进程发通知,2种方式结合效率更高。
(2)把第二种和第三种整合起来。有一个叫master进程,
另外再启固定的线程,每个线程处理多个请求。
总结:
C/S
C: client Agenta(browser,spider)
S: server
HTP Method:
Get,head,post,put,delete,trace,options,connection
Server操作
Server模型
Client:
Ie,Firefox,chrome,opera,safari
Server:
Apache-httpd,iis,tomcat,weblogic,jboss,nginx,lighttpd,thttpd,jetty