本人是个PHPer, 工作几年了, HTTP这块一直是个过不去的坎儿, 像是 那一大堆状态码,一大堆的首部字段 等等很多细节, 本人完全不知道怎么开始, 一直想研究如何使用HTTP协议实现自己的HttpResponse,HttpRequest类?
可看了Symfony等一些框架的源码, 发现很细, 每个状态码, 方法都有纳入, 但我怎么才能知道每个状态码都是具体什么意思? 总感觉哪怕有一个状态码不知道是什么准确意思也过不了自己这关,况且面试也老问,(但好像看了HTTP权威,感觉书上也说的稀里糊涂), symfony也不会就那么稀里糊涂的纳入代码中吧, 肯定每个都有其具体用途的
求大家给指点该怎么去学这些东西
5 回答
繁星点点滴滴
TA贡献1803条经验 获得超3个赞
被踩了,才发现题主已经提到了这本书。
题主主要是想了解怎么自己写 Request/Response
这些东西的话,其实主要就是在解析下面这个东西:
Method SP Request-URI SP HTTP-Version CRLF
*(( general-header
| request-header
| entity-header ) CRLF)
CRLF
[ message-body ]
来源: HTTP请求parse流程、RequestLineParser、HttpQueryParameterParser
状态码
这个东西,其实看看表对应一下就可以了,因为这个是全世界大家一起遵守的。
但是 头部
这个东西,就不是那么回事了,你可以选择性得去支持一些头部,因为 HTTP
允许你定义一个只有你自己的服务端才会解析的 头部。
上面请求体结构中 general-header
是大多数情况下都是比较常见的、大家都遵守的一些头部信息。而 request-header
、entity-header
这两部分就属于比较自由的地方了,你可以去解析并执行相应的处理,也可以忽略它。
具体到【服务端产出了什么样的 response
应该对应哪个 状态码】、【客户端传输了什么 header
要求服务端做什么事】、【服务端传输了什么header
要求客户端做什么事】这三个问题,常见的情况都可以在《HTTP权威指南》的附录B、附录C找到。
原答案:
强烈推荐 《HTTP 权威指南》 一书。
茅侃侃
TA贡献1842条经验 获得超21个赞
request和response是http生命周期中的东西,相当于输入输出,你可以这样的思维去应用,将php输入变量到request,如常见的超全局变量_GET,_POST,_SERVER。
婷婷同学_
TA贡献1844条经验 获得超8个赞
100 => "HTTP/1.1 100 Continue",
101 => "HTTP/1.1 101 Switching Protocols",
200 => "HTTP/1.1 200 OK",
201 => "HTTP/1.1 201 Created",
202 => "HTTP/1.1 202 Accepted",
203 => "HTTP/1.1 203 Non-Authoritative Information",
204 => "HTTP/1.1 204 No Content",
205 => "HTTP/1.1 205 Reset Content",
206 => "HTTP/1.1 206 Partial Content",
300 => "HTTP/1.1 300 Multiple Choices",
301 => "HTTP/1.1 301 Moved Permanently",
302 => "HTTP/1.1 302 Found",
303 => "HTTP/1.1 303 See Other",
304 => "HTTP/1.1 304 Not Modified",
305 => "HTTP/1.1 305 Use Proxy",
307 => "HTTP/1.1 307 Temporary Redirect",
400 => "HTTP/1.1 400 Bad Request",
401 => "HTTP/1.1 401 Unauthorized",
402 => "HTTP/1.1 402 Payment Required",
403 => "HTTP/1.1 403 Forbidden",
404 => "HTTP/1.1 404 Not Found",
405 => "HTTP/1.1 405 Method Not Allowed",
406 => "HTTP/1.1 406 Not Acceptable",
407 => "HTTP/1.1 407 Proxy Authentication Required",
408 => "HTTP/1.1 408 Request Time-out",
409 => "HTTP/1.1 409 Conflict",
410 => "HTTP/1.1 410 Gone",
411 => "HTTP/1.1 411 Length Required",
412 => "HTTP/1.1 412 Precondition Failed",
413 => "HTTP/1.1 413 Request Entity Too Large",
414 => "HTTP/1.1 414 Request-URI Too Large",
415 => "HTTP/1.1 415 Unsupported Media Type",
416 => "HTTP/1.1 416 Requested range not satisfiable",
417 => "HTTP/1.1 417 Expectation Failed",
500 => "HTTP/1.1 500 Internal Server Error",
501 => "HTTP/1.1 501 Not Implemented",
502 => "HTTP/1.1 502 Bad Gateway",
503 => "HTTP/1.1 503 Service Unavailable",
504 => "HTTP/1.1 504 Gateway Time-out"
前期可以处理一些常见的状态码
- 5 回答
- 0 关注
- 493 浏览
添加回答
举报
0/150
提交
取消