http源码分析
服务管理
- HTTPServer继承socketserver.TCPServer,建立实例后serve_forever监听客户端请求
请求头校验
- http请求完整请求HTTP-message = start-line *( header-field CRLF ) CRLF [ message-body ]
- http请求头行格式request-start-line = method SP request-target SP HTTP-version CRLF(SP空格 CRLF \r\n)
- http请求头格式header-field = field-name “:” OWS field-value OWS(OWS空格或制表符)
- SimpleHTTPRequestHandler请求入口handle,handle_one_request处理具体请求
- handle_one_request先检测第一行长度,调用parse_request详细解析第一行
- 请求方法不能忽略不传,调用请求方法处理请求内容
- parse_request中做的校验
- 版本大于HTTP/1.1才支持多次请求,否则解析完本次请求后结束
- 不支持HTTP/2.0及以上版本
- 客户端不传版本默认HTTP/0.9,只支持GET请求
- 请求头Connection代表客户端要求一次请求或多次请求
- http.client.parse_headers处理请求头
- 独行’\r\n’, ‘\n’, ''代表请求头结束
请求方法处理请求返回(GET流程)
-
http请求返回格式HTTP-message = start-line *( header-field CRLF ) CRLF [ message-body ]
-
http请求返回头行格式status-line = HTTP-version SP status-code SP reason-phrase CRLF(SP空格 CRLF \r\n)
-
http请求头格式header-field = field-name “:” OWS field-value OWS(OWS空格或制表符)
-
s