zoukankan      html  css  js  c++  java
  • 服务器处理步骤

      实现一个简单的Web服务器myhttpd,当浏览器向服务器请求文件时,服务器就从服务目录(例如/var/www)中找出相应的文件,加上HTTP协议头一起发给浏览器。服务器不发送完整的HTTP协议头。
           一、基本HTTP协议

              打开浏览器,输入服务器IP,例如 http://127.0.1.1 ,如果端口号不是80,例如是8000,则输入 http://127.0.1.1:8000 。这时浏览器向服务器发送的HTTP协议头如下:

           GET /favicon.ico HTTP/1.1
           Host: 127.0.1.1:8000
           User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:54.0) Gecko/20100101 Firefox/54.0
           Accept: */*
           Accept-Language: en-US,en;q=0.5
           Accept-Encoding: gzip, deflate
           Connection: keep-alive

             注意,其中每一行的末尾都是回车加换行(C语言的" "),第一行是GET请求和协议版本,其余几行选项字段我们不讨论,HTTP协议头的最后有一个空行,也是回车加换行。我们实现的Web服务器只要能正确解析第一行就行了,这是一个GET请求,请求的是服务目录的根目录,Web服务器应该把该目录下的索引页(默认是index.html)发给浏览器,也就是把/var/www/index.html发给浏览器。假如该文件的内容如下(HTML文件没必要以" "换行,以" "换行就可以了):

            <html>
            <head><title>Test Page</title></head>
            <body>
            <p>Test OK</p>
            <img src='mypic.jpg'>
            </body>
            </html>

            显示一行字和一幅图片,图片的相对路径(相对当前的index.html文件的路径)是mypic.jpg,也就是/var/www/mypic.jpg,如果用绝对路径表示应该是:

            <img src='/mypic.jpg'>

            服务器应按如下格式应答浏览器:

            HTTP/1.1 200 OK
            Content-Type: text/html

            <html>
            <head><title>Test Page</title></head>
            <body>
            <p>Test OK</p>
            <img src='/mypic.jpg'>
            </body>
            </html>

            服务器应答的HTTP头也是每行末尾以回车加换行结束,最后跟一个空行的回车加换行。

            HTTP头的第一行是协议版本和应答码,200表示成功,后面的消息OK其实可以随意写,浏览器是不关心的,主要是为了调试时给开发人员看的。HTTP头的第二行表示即将发送的文件的类型(称为MIME类型),这里是text/html,纯文本文件是text/plain,图片则是image/jpg、image/png等,这个简单的服务器则只发送jpg图片。然后就发送文件的内容,发送完毕之后主动关闭连接,这样浏览器就知道文件发送完了。这一点比较特殊:通常网络通信都是客户端主动发起连接,主动发起请求,主动关闭连接,服务器只是被动地处理各种情况,而HTTP协议规定服务器主动关闭连接.

            浏览器收到index.html之后,发现其中有一个图片文件,就会再发一个GET请求。服务器收到这个请求应该把图片发过去然后关闭连接。

            总结一下服务器的处理步骤:

             1、  解析浏览器的请求,在服务目录中查找相应的文件,如果找不到该文件就返回404错误页面 。

             2、  发送HTTP/1.1 200 OK给客户端
             3、  如果是一个图片文件,根据图片的扩展名发送相应的Content-Type给客户端
             4、  如果不是图片文件,这里我们简化处理,都当作Content-Type: text/html
             5、  简单的HTTP协议头有这两行就足够了,再发一个空行表示结束
             6、  读取文件的内容发送到客户端
             7、  关闭连接

  • 相关阅读:
    【HDOJ】2774 Shuffle
    【POJ】2170 Lattice Animals
    【POJ】1084 Square Destroyer
    【POJ】3523 The Morning after Halloween
    【POJ】3134 Power Calculus
    【Latex】如何在Latex中插入伪代码 —— clrscode3e
    【HDOJ】4801 Pocket Cube 的几种解法和优化
    【HDOJ】4080 Stammering Aliens
    【HDOJ】1800 Flying to the Mars
    SQL语法
  • 原文地址:https://www.cnblogs.com/liuzhenbo/p/11040463.html
Copyright © 2011-2022 走看看