webserver项目里面涉及到的http知识

HTTP 请求报文格式

分为请求行,请求头,请求数据三部分,具体形式如下
http请求报文格式

HTTP响应报文格式

包括状态行,响应头,响应正文三部分
http响应报文格式

HTTP请求方法

HTTP/1.1 协议中共定义了八种方法(也叫“动作”)来以不同方式操作指定的资源:

  1. GET:向指定的资源发出“显示”请求。使用 GET 方法应该只用在读取数据,而不应当被用于产生“副
    作用”的操作中,例如在 Web Application 中。其中一个原因是 GET 可能会被网络蜘蛛等随意访
    问。
  2. HEAD:与 GET 方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文
    部分。它的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中“关于该
    资源的信息”(元信息或称元数据)。
  3. POST:向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含
    在请求本文中。这个请求可能会创建新的资源或修改现有资源,或二者皆有。
  4. PUT:向指定资源位置上传其最新内容。
  5. DELETE:请求服务器删除 Request-URI 所标识的资源。
  6. TRACE:回显服务器收到的请求,主要用于测试或诊断。
  7. OPTIONS:这个方法可使服务器传回该资源所支持的所有 HTTP 请求方法。用’*'来代替资源名称,
    向 Web 服务器发送 OPTIONS 请求,可以测试服务器功能是否正常运作。
  8. CONNECT:HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服
    务器的链接(经由非加密的 HTTP 代理服务器)。

有限状态机

这是一种逻辑单元(所谓的逻辑单元就是处理业务逻辑的,比如对于一个webserver来说,就是解析http请求和写http响应,可以参考我的另外一篇文章:网络编程里面什么是逻辑单元?内部的一种高效编程方法

下面以解析http请求为例:
由于http请求有请求行,请求头,请求数据三部分,请求行,请求头是一行一行的,因此需要分别设置主状态机和从状态机,其中主状态机的状态有三种:

状态 含义
CHECK_STATE_REQUESTLINE 当前正在分析请求行
CHECK_STATE_HEADER 当前正在分析头部字段
CHECK_STATE_CONTENT 当前正在解析请求体

然后还应该设置从状态机,主要是解析每一行,从状态机的三种可能状态,即行的读取状态,分别表示
1.读取到一个完整的行 2.行出错 3.行数据尚且不完整,分别用LINE_OK, LINE_BAD, LINE_OPEN表示,如下表所示

状态 含义
LINE_OK 读取到一个完整的行
LINE_BAD 行出错
LINE_OPEN 行数据尚且不完整

可以采用枚举的方法实现:

enum LINE_STATUS {
    
     LINE_OK = 0, LINE_BAD, LINE_OPEN };

猜你喜欢

转载自blog.csdn.net/Sansipi/article/details/121955172