http协议解析

http协议报文

这是一个典型的http请求的报文样例,可以看出是一个websocket升级前的http请求。该字符报文完全基于tcp协议,协议报文内容为tcp数据包,也就是tcp进行recv调用获取的数据内容。如下报文表示已经接受完http报文数据。

解析http报文的源码为application/http/request.go

1
2
3
4
5
6
7
8
9
http 协议报文
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: http://example.com
Sec-WebSocket-Protcol: chat, superchat
Sec-WebSocket-Version: 13

@请求方法

解析tcp数据包第一行数据,遇到空格就拆分,则获取到请求方法

@uri

解析tcp数据包第一行数据,遇到空格就拆分,则获取到uri路径

@header头部

接下来都是一些头部信息的keyvalue,每次读取一行,然后根据:分隔符进行拆分,获取header头部请求键值对