为了账号安全,请及时绑定邮箱和手机立即绑定

求教如何使用HTTP协议实现自己的HttpResponse,HttpRequest类?

求教如何使用HTTP协议实现自己的HttpResponse,HttpRequest类?

PHP
守着星空守着你 2019-03-10 01:20:11
本人是个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-headerentity-header 这两部分就属于比较自由的地方了,你可以去解析并执行相应的处理,也可以忽略它。

具体到【服务端产出了什么样的 response 应该对应哪个 状态码】、【客户端传输了什么 header 要求服务端做什么事】、【服务端传输了什么header要求客户端做什么事】这三个问题,常见的情况都可以在《HTTP权威指南》的附录B、附录C找到。


原答案:

强烈推荐 《HTTP 权威指南》 一书。

查看完整回答
反对 回复 2019-03-18
?
茅侃侃

TA贡献1842条经验 获得超21个赞

request和response是http生命周期中的东西,相当于输入输出,你可以这样的思维去应用,将php输入变量到request,如常见的超全局变量_GET,_POST,_SERVER。

查看完整回答
反对 回复 2019-03-18
?
婷婷同学_

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"

前期可以处理一些常见的状态码

查看完整回答
反对 回复 2019-03-18
  • 5 回答
  • 0 关注
  • 468 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信