所以,长话短说,我有一个使用MVC Web API作为后端的AJAX应用程序.然而,客户端从不同的域调用并使用PHP代理文件来解决跨域请求问题.
但是,使用PHP代理,Web API会使用100 Continue
HTTP标头响应某些请求,并且任何获取此请求的请求都需要花费过多的时间才能完成(我们说的最多2分钟左右)并且还可以返回无效的响应.
这似乎是cURL的一个已知问题,解决方法通常被引用为插入以下行以删除cURL请求中的expect:100标头
不幸的是,解决方案对我来说似乎难以捉摸:
$headers = getallheaders();
$headers_new = "";
foreach($headers as $title => $body) {
$headers_new[] = $title.": ".$body;
}
//$headers_new[] = 'Expect:';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers_new);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:') );
Run Code Online (Sandbox Code Playgroud)
此代码有效,但删除了所有其他标头(这对我来说是不可行的,因为我使用HTTP基本身份验证头来通过API进行身份验证).您可能还会注意到我尝试将其添加Expect:
到现有标头中,但这对我也没有帮助.
如何维护现有标头,还可以防止cURL期望100继续?
将大文件(> 100M)上传到服务器时,PHP始终首先从浏览器接受整个数据POST.我们无法注入上传过程.
例如,在我的PHP代码中将token
整个数据发送到服务器之前检查" " 的值是不可能的:
<form enctype="multipart/form-data" action="upload.php?token=XXXXXX" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="3000000" />
Send this file: <input name="userfile" type="file" />
<input type="submit" value="Send File" />
</form>
Run Code Online (Sandbox Code Playgroud)
所以我试着这样使用mod_rewrite
:
RewriteEngine On
RewriteMap mymap prg:/tmp/map.php
RewriteCond %{QUERY_STRING} ^token=(.*)$ [NC]
RewriteRule ^/upload/fake.php$ ${mymap:%1} [L]
Run Code Online (Sandbox Code Playgroud)
map.php
#!/usr/bin/php
<?php
define("REAL_TARGET", "/upload/real.php\n");
define("FORBIDDEN", "/upload/forbidden.html\n");
$handle = fopen ("php://stdin","r");
while($token = trim(fgets($handle))) {
file_put_contents("/tmp/map.log", $token."\n", FILE_APPEND);
if (check_token($token)) {
echo REAL_TARGET;
} else {
echo FORBIDDEN;
}
}
function check_token ($token) …
Run Code Online (Sandbox Code Playgroud) pI正在使用plupload(plupload.com)jQuery插件将图像文件AJAX到Java Spring服务器。我尝试了服务器端RESTful Controller端点的不同实现。我已经附上了处理文件上传网址的特定方法。任何帮助将不胜感激。谢谢。
@RequestMapping(value = "/pictureUpload", method = RequestMethod.POST )
public @ResponseBody
String productPictureUploadPost(@RequestBody MultipartFile multipartFile) {
HomeController.logger.info("In method productPictureUploadPost in SettingsPanelController. : Entering");
String orgName = multipartFile.getOriginalFilename();
String filePath = "/my_uploads/" + orgName;
File dest = new File(filePath);
try {
multipartFile.transferTo(dest);
} catch (IllegalStateException e) {
e.printStackTrace();
return "File uploaded failed:" + orgName;
} catch (IOException e) {
e.printStackTrace();
return "File uploaded failed:" + orgName;
}
HomeController.logger.info("In method productPictureUploadPost in SettingsPanelController. Exiting : " + "File uploaded:" + orgName); …
Run Code Online (Sandbox Code Playgroud) http ×2
jquery ×2
php ×2
curl ×1
file-upload ×1
java ×1
mod-rewrite ×1
node.js ×1
proxy ×1
spring ×1