2010-02-12 67 views
10

我正在開發一個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-繼續。我不知道這是否可能,所以我有兩個問題:

  1. 是否有可能讓PHP在Expect之後立即開始處理:100-continue?
  2. 如果不是,什麼是好的選擇?

我目前正在考慮模擬100繼續指定客戶端首先發送HEAD請求與POST相同的頭。然後webapp可以返回響應以繼續POST或錯誤代碼。歡迎其他建議!

+0

我意識到這是一個非常古老的問題,但是最終是否使用HEAD請求,然後是POST?如果是這樣,它實施起來有多舒服?我目前發現自己因無法在PHP/Apache堆棧上正確實現100個繼續期望而感到沮喪。 – Marvin 2016-02-17 10:18:40

+0

100繼續是不可能在PHP中正確控制(至少它是,我已經轉向更好的語言)。如果你能控制客戶端,那麼是的,發送HEAD(或任何其他類型的請求)來預檢主要的POST是方法。如果您無法控制客戶端,唯一的選擇是設置一個代理/中間件,可以攔截100並進行適當的響應。 – 2016-02-19 04:39:07

+0

我確實擁有客戶端的控制權,所以它是一個很好的回退。我目前正在考慮試圖在Apache中提供一個鉤子來實現對標題進行正確的pre-100-繼續檢查。不知道它是否會導致任何有用的。 http://stackoverflow.com/questions/35456122/apache-modules-implementing-100-continue?lq=1 – Marvin 2016-02-19 11:07:01

回答

-5

嘗試在HTTP級別執行此操作似乎太困難了。作爲開發人員,不要掛上特定的解決方案是非常重要的。問題是你想在處理上傳之前進行一系列檢查。所有你需要做的就是在上傳之前放置一個合格的頁面。如果他們通過了一系列檢查並符合條件,此資格頁面將僅向他們顯示上傳表單。這正是你想要做的,只有你可以在代碼PHP中做到這一點。如果可能的話,HTTP 100的東西總是會需要大量額外的配置,因此稍後會引起頭痛的問題。如果你在代碼中實現了這些(或者你自己在幾年後),那麼他們將能夠清楚地理解應用程序在做什麼。

+0

@丹尼爾:反饋 - 你的答案似乎爲時過早 - 沒有了解OP的需要,你建議他放棄處理「HTTP 100的事情」 – 2010-12-22 14:51:59

0

不幸的是我不認爲這是可能的。如果這是一個真正的要求,我認爲最好只看其他語言。我認爲今天異構環境比編寫這個問題時更爲常見,所以爲什麼不創建一些用其他語言編寫的小服務來處理上傳。

但是,是的,PHP的工作方式是腳本只在客戶端發送完整請求時才啓動。