美文网首页
理解web服务器端处理流程基本原理

理解web服务器端处理流程基本原理

作者: LucasHao | 来源:发表于2020-03-03 12:09 被阅读0次

理解web服务器端处理流程基本原理

为了简单理解web的运行流程,看了不少博客特此总结。 首先是最简单的一个web服务器是如何工作的;上完计算机网络课程之后我们应该学会了操作简单的socket;包括基本的服务器端绑定端口监听,接收最基本的字符串消息做出响应以及客户端请求连接,发送字符串;

ServerSocketserver=newServerSocket(port);
Socketsocket=server.accept();
InputStreaminputStream=socket.getInputStream();

那么这些基础操作怎么变成我们所了解的庞大服务器的呢?参考《How Tomcat Work》的第一份代码我们可以实现通过浏览器打开第一个静态页面的服务器;

原理就在于浏览器请求会发送一系列协议内容的socket字符串,这些字符串的意义暂时没需要的话就不用管,但是我们的服务器需要对这些进行解析; 浏览器发送的socket字符串如下(就是纯socket接收的字符串,没有什么高级的东西)

image

我们唯一关注的就是GET后面的“/”(GET / HTTP/1.1)表示请求的路径为 /root路径,服务器可以默认返回index.html。

详细步骤:从接收这些请求字符串这个过程大致有两步:(代码来自《how tomcat work》)

1. 解析请求,搞清浏览器要请求什么

对于请求index.html,我们在浏览器输入localhost:port/index.html后,我们的简易版服务器直接通过parse()函数解析,逻辑如下:

public void parse() {
    // 初始化一个stringbuffer
    StringBuffer request = new StringBuffer(2048);
    int i;
    byte[] buffer = new byte[2048];
    try {
      i = input.read(buffer);
    }
    catch (IOException e) {
      e.printStackTrace();
      i = -1;
    }
    //将请求放入buffer
    for (int j=0; j<i; j++) {
      request.append((char) buffer[j]);
    }
    System.out.print(request.toString());
    //真正的解析逻辑
    uri = parseUri(request.toString());
  }
private String parseUri(String requestString) {
    int index1, index2;
    //重点就是找到第一行第一个空格所在地方  如GET /index.html HTTP/1.1
    index1 = requestString.indexOf(' ');
    if (index1 != -1) {
      //找到第二个空格;那么两个空格中间就是我们要请求的资源名
      index2 = requestString.indexOf(' ', index1 + 1);
      if (index2 > index1)
        //解析返回 “index.html”
        return requestString.substring(index1 + 1, index2);
    }
    return null;
  }

这么一来服务器就用我们初学者都会的字符串解析获取了浏览器的请求内容标题:index.html

2.找到对应资源并写入输出流

接下来就去找文件“index.html”,没啥好说的,把一个文件打开读取内容到输出流这类操作随时都可以搜索到,直接加一堆http中我们暂时用不着的头,发送给浏览器;

image

大功告成:

image

相关文章

网友评论

      本文标题:理解web服务器端处理流程基本原理

      本文链接:https://www.haomeiwen.com/subject/kzwqlhtx.html