【发布时间】:2019-11-23 08:41:17
【问题描述】:
HTTP Request-Line 和 Status-Line 都有 3 个组件:
Request-Line= Method SP Request-URI SP HTTP-Version CRLF
Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF
状态行(服务器响应)很好:
- 它以 HTTP 版本(与任何协议一样)开头,因此解码器可以根据第一个字段对其进行解析
- 后跟一些协议定义的值(状态代码),即单个单词且不需要任何 SP/CR/LF 字符
- 以任何 TEXT 字符(CR/LF 除外)作为原因短语结尾。
我不明白为什么 Request-Line 如此不同:
- HTTP 版本在末尾li>
- 必须对 Request-URI 进行转义以避免出现 SP/CR/LF 字符(这里是著名的 %20)
为什么它不遵循与状态行相同(干净)的模式?
Request-Line= HTTP-Version SP Method SP Request-URI CRLF
这样,Request-URI 可以是任何 TEXT 字符(CR/LF 除外)
所以它看起来像这样:
HTTP/1.1 GET /user/with space
...
HTTP/1.1 404 NOT FOUND
...
见:
【问题讨论】:
-
就是这样。没有特别的原因。
-
即使更改了顺序,也不会更改 URI 中允许的字符集。
-
如果唯一有问题的地方 \r \n 可能会极大地影响授权字符集