2010-02-12 49 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的工作方式是脚本只在客户端发送完整请求时才启动。