TCPIP: Web服务器和HTTP协议

时间:2022-09-13 18:39:32

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