C语言Socket HTTP服务器解析带查询参数的GET请求的正确格式
标准GET请求的HTTP格式说明
特殊字符的排布规则
- 所有行(请求行、每一条请求头行)的行尾固定为
\r\n(回车+换行组合),制表符\t不会出现在行尾的结构分界位置,仅可作为请求头值内的空白分隔符使用 - 全部请求头结束后,会额外跟一个单独的
\r\n构成空行,用来标记请求头部分结束,GET请求没有请求体,到这个空行就结束了
带查询字符串的完整请求格式示例
你给出的截断示例对应的标准转义格式如下(补齐了完整的Accept头和结束空行):
GET /add?title=gedit&price=87 HTTP/1.1\r\n Host: localhost\r\n User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:92.0) Gecko/20100101 Firefox/92.0\r\n Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n \r\n
如果写成C语言里的字符串常量,格式为:
const char *sample_get_request = "GET /add?title=gedit&price=87 HTTP/1.1\r\nHost: localhost\r\nUser-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:92.0) Gecko/20100101 Firefox/92.0\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n\r\n";
解析注意事项
- 解析时优先以
\r\n作为行分隔符逐行拆分内容 - 第一行拆分出三个字段:请求方法、请求路径(路径中
?后面的部分就是查询字符串)、HTTP版本 - 后续每行按第一个
:拆分出请求头的键和值,遇到连续的\r\n(即空行)就终止头解析 - 遇到
\t时可以和普通空格同等处理,作为空白字符忽略或者用来分割值内的参数即可
内容的提问来源于stack exchange,提问作者user786
相关产品推荐
相关产品推荐

