服务器如何处理http请求,第1张

1需求

了解服务端如何处理http请求,了解基本的处理流程

2实战

处理http请求分为7个步骤

21 Tcp连接

建立一条tcp链接,(若之前不存在持久链接keep-alive),把客户端的ip和port,服务端的ip和port数据放到web服务器连接表中。服务器随时监听链接表中的链接,看有没有数据变化

22 接收http请求

一旦我们发送http请求了,这条tcp链接就开始工作了。因为web服务器链接表中有许多链接需要被处理,处理的方式有单线程,多线程这些(这些涉及操作系统的知识)。

23 处理http请求

处理的过程大致是把请求的信息解析出来,如下图

 

24 访问资源

访问资源可以是访问静态资源,这个就直接根据url地址去服务器里找就好了。

访问动态资源的话要经过一个叫cgi的东西,再用服务端脚本处理,再返回给前端。如下图所示

25 构建响应

要是找到资源,则构建响应信息,包括响应的对象类型,长度,状态码。

另一个情况是重定向响应,就是直接返回一个重定向,客户端看到之后,立刻再向重定向的地址发起请求。重定向的响应的状态码一般是3xx。

26 发送响应

把构建的响应发送给客户端

27 记录日志

服务端对这个请求响应过程进行记录。(另外专门再讲)

 

3总结

以上是服务端处理http请求的大致过程。能让大家有个大致轮廓,当然里面有很多细节的知识没讲到,要另外查询资料并学习

HTTP是无状态的

也就是说,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。如果客户端浏览器访问的某个HTML或其他类型的 Web页中包含有其他的Web资源,如JavaScript文件、图像文件、CSS文件等;当浏览器每遇到这样一个Web资源,就会建立一个HTTP会话

HTTP11和HTTP10相比较而言,最大的区别就是增加了持久连接支持(貌似最新的 http10 可以显示的指定 keep-alive),但还是无状态的,或者说是不可以信任的。

如果浏览器或者服务器在其头信息加入了这行代码

Connection:keep-alive

TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了带宽。

实现长连接要客户端和服务端都支持长连接。

所谓长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差,

所谓短连接指建立SOCKET连接后发送后接收完数据后马上断开连接,一般银行都使用短连接

短连接:比如

http

的,只是连接、请求、关闭,过程时间较短

,

服务器若是一段时间内没有收到请求即可关

闭连接。

长连接:有些服务需要长时间连接到服务器,比如

CMPP

,一般需要自己做在线维持。

最近在看

服务器推送技术

,在

B/S

结构中,通过某种

magic

使得客户端不需要通过轮询即可以得到服务

端的最新信息(比如股票价格)

,这样可

以节省大量的带宽。

传统的轮询技术对服务器的压力很大,

并且造成带宽的极大浪费。如果改用

ajax

轮询,可以降低带宽的负荷

(因为服务器返回的不是完整页面)

但是对服务器

的压力并不会有明显的减少。

而推技术(

push

)可以改善这种情况。但因为

HTTP

连接

的特性(短暂,必须由客户端发起)

,使得推技术的实现比较困难,常见的做法是通过延长

http

连接的寿

来实现

push

接下来自然该讨论如何延长

http

连接的寿命

最简单的自然是死循环法

servlet

public

void

doGet(Request

req,

Response

res)

{

PrintWriter

out

=

resgetWriter();

……

……

outflush();

while

(true)

{

outprint("

");

outflush();

Threadsleep(3000);

}

}

如果使用观察者模式则可以进一

步提高性能。

但是这种做法的缺点在于客户端请求了这个

servlet

后,

web

服务器会开启一个线程执行

servlet

的代码,而

servlet

由迟迟不肯结束,造成

该线程也无法被释放。于是乎,一个客户端一个线程,

当客户端数量增加时,服务器依然会承受很大的负担。

要从根本上改变这个现象比较复杂,目前的趋

势是从

web

服务器内部入手,用

nio

JDK

14

提出的

javanio

包)改写

request/response

的实现,再利

用线程池增强服务器的资源利用率,从而解决这个问题,目前支持这一非

J2EE

官方技术的服务器有

Glassfish

Jetty

(后者只是听说,没有用过)

网没问题 游戏问题 用以下方法可以登录点桌面开始-----运行 ---在打开里 输出 你游戏目录:如 D:\网络游戏\寻仙\QQLoginexe -g 602819011:3100

附赠IP

电信:

广东区:

11914716136:3100,葫芦山

11914716144:3100,沙子洲

11914720103:3100,锦绣林

119147438:3100,宁阳观

江苏区

2227377211:3100,钱宁河

2227377235:3100,天枢观

2227373180:3100,兰陵道

上海区

2227377227:3100,喇叭口

2021026067:3100,仙君阁

西南区

11812323458:3100,落雁坡

11812323470:3100,虎跳峡

浙江区

2227377231:3100,东坡林

2021026066:3100,混水洞

湖北区

11914716140:3100,黄石岗

福建区

11914716148:3100,盘陀岭

西北区

11812323466:3100,不周山

四川区

11812323462:3100,白龙湖

118123234123:3100,两界山

11812323517:3100,玉峰山

安徽区

2021026035:3100,紫岚山

湖南区

11914720132:3100,七星山

广西区

11914720141:3100,九曲湾

江西区

2227377215:3100,玉华山

华南区

119147442:3100,晓月庄

1191472099:3100,碧波潭

华中区

119147446:3100,观星台

华东区

2227373200:3100,东山岛

网通:

北京区

6028234169:3100,凌霄殿

602819041:3100,通天河

华北区

6028234230:3100,白云洞

602819025:3100,小君观

125395210:3100,五宁宫

602819017:3100,五丈坡

东北区

6028189250:3100,黎阳道

602819021:3100,摩云山

602818964:3100,黑风岭

602819037:3100,龙吟湾

河南区

602819013:3100,青濡口

山东区

602819029:3100,蓬莱岛

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 服务器如何处理http请求

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情