12

我正在开发一个 PHP webapp,它接受来自特定客户端的大型 POST 文件上传,并希望在使用 HTTP/1.1 100 上传文件之前接受或拒绝这些上传(基于各种标头和其他因素,而不仅仅是大小)继续。

HTTP/1.1 规范 8.2.3的一些快速背景知识:

100(继续)状态(参见第 10.1.1 节)的目的是允许正在发送带有请求正文的请求消息的客户端确定源服务器是否愿意接受请求(基于请求标头)在客户端发送请求正文之前。在某些情况下,如果服务器在不查看正文的情况下拒绝消息,则客户端发送正文可能不合适或效率极低。

问题是Apache从客户端看到Expect:100-continue,返回100 Continue并在PHP开始处理之前接受所有文件上传......但是我需要PHP在Expect:100-continue之后立即开始处理。我不确定这是否可能,所以我有两个问题:

  1. 是否可以让 PHP 在 Expect: 100-continue 之后立即开始处理?
  2. 如果没有,有什么好的选择?

我目前正在考虑通过指定客户端首先发送与 POST 具有相同标头的 HEAD 请求来模拟 100 continue。然后,webapp 可以返回响应以继续 POST 或错误代码。欢迎其他建议!

4

2 回答 2

1

不幸的是,我认为这是不可能的。如果这是一个真正的要求,我认为最好简单地看看其他语言。我认为今天异构环境比写这个问题时更常见,所以为什么不创建一个用其他语言编写的小服务,只处理上传。

但是,是的,PHP 的工作方式是脚本仅在客户端发送整个请求时启动。

于 2016-12-11T06:34:05.043 回答
-6

尝试在 HTTP 级别上执行此操作似乎太困难了。作为开发人员,不要拘泥于特定的解决方案,这一点很重要。问题是您想在处理上传之前进行一系列检查。您需要做的就是在上传之前放置一个合格页面。如果他们通过一系列检查并符合条件,此合格页面只会向他们显示上传表格。这正是您想要做的,只有您可以在 PHP 代码中做到这一点。如果可能的话,HTTP 100 总是需要大量额外的配置,从而为以后的支持带来麻烦。如果您在代码中执行此操作,那么那些落后于您(或您自己几年后)将能够清楚地了解应用程序在做什么。

于 2010-02-13T15:27:25.340 回答