我正在開發一個PHP webapp,它接受來自特定客戶端的大量POST文件上傳,並且希望在這之前接受或拒絕這些上傳(基於各種標題和其他因素,而不僅僅是大小)文件使用HTTP/1.1 100繼續上傳。支持HTTP 100繼續使用PHP
從HTTP/1.1 spec 8.2.3一些快速背景:
的目的的100(繼續)狀態(見10.1.1節)是允許客戶機,其發送請求消息與請求體,以確定是否在客戶端發送請求體之前,原始服務器願意接受請求(基於請求頭)。在某些情況下,如果服務器在不查看主體的情況下拒絕該消息,則客戶端可能不適合或非常低效地發送主體。
的問題是,阿帕奇看到了期待:從客戶端100繼續,返回100繼續並接受文件上傳所有PHP開始處理之前......不過,我需要PHP後,立即想到開始處理:100-繼續。我不知道這是否可能,所以我有兩個問題:
- 是否有可能讓PHP在Expect之後立即開始處理:100-continue?
- 如果不是,什麼是好的選擇?
我目前正在考慮模擬100繼續指定客戶端首先發送HEAD請求與POST相同的頭。然後webapp可以返回響應以繼續POST或錯誤代碼。歡迎其他建議!
我意識到這是一個非常古老的問題,但是最終是否使用HEAD請求,然後是POST?如果是這樣,它實施起來有多舒服?我目前發現自己因無法在PHP/Apache堆棧上正確實現100個繼續期望而感到沮喪。 – Marvin 2016-02-17 10:18:40
100繼續是不可能在PHP中正確控制(至少它是,我已經轉向更好的語言)。如果你能控制客戶端,那麼是的,發送HEAD(或任何其他類型的請求)來預檢主要的POST是方法。如果您無法控制客戶端,唯一的選擇是設置一個代理/中間件,可以攔截100並進行適當的響應。 – 2016-02-19 04:39:07
我確實擁有客戶端的控制權,所以它是一個很好的回退。我目前正在考慮試圖在Apache中提供一個鉤子來實現對標題進行正確的pre-100-繼續檢查。不知道它是否會導致任何有用的。 http://stackoverflow.com/questions/35456122/apache-modules-implementing-100-continue?lq=1 – Marvin 2016-02-19 11:07:01