鍍金池/ 問答/PHP  網(wǎng)絡(luò)安全  HTML/ 求教如何使用HTTP協(xié)議實(shí)現(xiàn)自己的HttpResponse,HttpReques

求教如何使用HTTP協(xié)議實(shí)現(xiàn)自己的HttpResponse,HttpRequest類?

本人是個(gè)PHPer, 工作幾年了, HTTP這塊一直是個(gè)過不去的坎兒, 像是 那一大堆狀態(tài)碼,一大堆的首部字段 等等很多細(xì)節(jié), 本人完全不知道怎么開始, 一直想研究如何使用HTTP協(xié)議實(shí)現(xiàn)自己的HttpResponse,HttpRequest類?

可看了Symfony等一些框架的源碼, 發(fā)現(xiàn)很細(xì), 每個(gè)狀態(tài)碼, 方法都有納入, 但我怎么才能知道每個(gè)狀態(tài)碼都是具體什么意思? 總感覺哪怕有一個(gè)狀態(tài)碼不知道是什么準(zhǔn)確意思也過不了自己這關(guān),況且面試也老問,(但好像看了HTTP權(quán)威,感覺書上也說的稀里糊涂), symfony也不會(huì)就那么稀里糊涂的納入代碼中吧, 肯定每個(gè)都有其具體用途的

求大家給指點(diǎn)該怎么去學(xué)這些東西

回答
編輯回答
祉小皓

request和response是http生命周期中的東西,相當(dāng)于輸入輸出,你可以這樣的思維去應(yīng)用,將php輸入變量到request,如常見的超全局變量_GET,_POST,_SERVER。

2017年11月11日 18:24
編輯回答
晚風(fēng)眠

哥們,既然你要寫自己的response和request類,何不參考一下psr7 http的規(guī)范呢.又可以了解psr規(guī)范,其實(shí)基本上各大框架的http響應(yīng)都是基于psr7規(guī)范來的.當(dāng)然,你如果不知道,我覺得你可以去看一下slim的request,response實(shí)現(xiàn),這個(gè)很簡單.然后基于這個(gè)你就可以寫自己的response,和request類
PSR-7 HTTP 消息接口規(guī)范
當(dāng)然,專業(yè)的phper一定會(huì)知道,以下的這些規(guī)范

psr-0    自動(dòng)加載規(guī)范   廢棄
psr-1    基礎(chǔ)編碼規(guī)范   通過
psr-2    編碼風(fēng)格規(guī)范   通過
psr-3    日志接口規(guī)范   通過
psr-4    自動(dòng)加載規(guī)范   通過
psr-5    PHPDoc 標(biāo)準(zhǔn)   拋棄
psr-6    緩存接口規(guī)范   通過
psr-7    HTTP 消息接口規(guī)范  通過
psr-8    Huggable 接口 拋棄
psr-9    項(xiàng)目安全問題公示  拋棄
psr-10    項(xiàng)目安全上報(bào)方法  拋棄
psr-11    服務(wù)容器接口  通過
psr-12    全量編碼風(fēng)格規(guī)范  審核中
psr-13    超媒體鏈接  通過
psr-14    事件管理  拋棄
psr-15    HTTP消息處理    起草
psr-16    簡單緩存    通過
psr-17    HTTP Factories    拋棄
psr-18    HTTP Client    起草

當(dāng)然,我們熟悉的composer就是遵循了psr-4自動(dòng)加載規(guī)范.作為一個(gè)專業(yè)的phper你不能不知道這些規(guī)范.
以下附上一些文檔資料

[psr規(guī)范中文網(wǎng)站](http://psr.phphub.org/)
[psr規(guī)范翻譯](https://github.com/summerblue/psr.phphub.org/tree/master/psrs)
[psr官方網(wǎng)站](http://www.php-fig.org/psr/)

中文可能不全,如果要全的,請查看英文網(wǎng)站

2017年2月11日 16:22
編輯回答
薄荷糖

被踩了,才發(fā)現(xiàn)題主已經(jīng)提到了這本書。

題主主要是想了解怎么自己寫 Request/Response 這些東西的話,其實(shí)主要就是在解析下面這個(gè)東西:

Method SP Request-URI SP HTTP-Version CRLF           
*(( general-header        
   | request-header         
   | entity-header ) CRLF) 
CRLF
[ message-body ]
來源: HTTP請求parse流程、RequestLineParser、HttpQueryParameterParser

狀態(tài)碼 這個(gè)東西,其實(shí)看看表對應(yīng)一下就可以了,因?yàn)檫@個(gè)是全世界大家一起遵守的。
但是 頭部 這個(gè)東西,就不是那么回事了,你可以選擇性得去支持一些頭部,因?yàn)?HTTP 允許你定義一個(gè)只有你自己的服務(wù)端才會(huì)解析的 頭部。
上面請求體結(jié)構(gòu)中 general-header 是大多數(shù)情況下都是比較常見的、大家都遵守的一些頭部信息。而 request-header、entity-header 這兩部分就屬于比較自由的地方了,你可以去解析并執(zhí)行相應(yīng)的處理,也可以忽略它。

具體到【服務(wù)端產(chǎn)出了什么樣的 response 應(yīng)該對應(yīng)哪個(gè) 狀態(tài)碼】、【客戶端傳輸了什么 header 要求服務(wù)端做什么事】、【服務(wù)端傳輸了什么header要求客戶端做什么事】這三個(gè)問題,常見的情況都可以在《HTTP權(quán)威指南》的附錄B、附錄C找到。


原答案:

強(qiáng)烈推薦 《HTTP 權(quán)威指南》 一書。

2017年10月24日 23:45
編輯回答
哚蕾咪

首先你需要知道各種約定 ,rfc那些,建議你看看《圖解HTTP》,這本書講的不錯(cuò),

再就看看源碼就大概知道怎么回事了,實(shí)現(xiàn)它也就是水到渠成。

2018年5月16日 05:50
編輯回答
溫衫
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"

前期可以處理一些常見的狀態(tài)碼

2018年8月21日 06:22