如何克服 Windows 2012 R2 服务器上的 405 后错误

     2023-03-03     106

关键词:

【中文标题】如何克服 Windows 2012 R2 服务器上的 405 后错误【英文标题】:How to overcome a post 405 error on windows 2012 R2 server 【发布时间】:2021-02-22 07:17:55 【问题描述】:

我有一个小型测试应用程序来记录相机并将文件发送到我服务器上的目录。 主要文件如下:

<!DOCTYPE html>
<html>
    <head>
        <script src="https://cdn.WebRTC-Experiment.com/RecordRTC.js"></script>
        <style>
            video 
              max-width: 100%;
              border: 5px solid yellow;
              border-radius: 9px;
            
            body 
              background: black;
            
            h1 
              color: yellow;
            
        </style>
    </head>

    <body>
        <h1 id="header">RecordRTC Upload to PHP</h1>
        <video id="your-video-id" controls="" autoplay=""></video>

        <script type="text/javascript">
            // capture camera and/or microphone
            navigator.mediaDevices.getUserMedia( video: true, audio: true ).then(function(camera) 

                // preview camera during recording
                document.getElementById('your-video-id').muted = true;
                document.getElementById('your-video-id').srcObject = camera;

                // recording configuration/hints/parameters
                var recordingHints = 
                    type: 'video'
                ;

                // initiating the recorder
                var recorder = RecordRTC(camera, recordingHints);

                // starting recording here
                recorder.startRecording();

                // auto stop recording after 5 seconds
                var milliSeconds = 5 * 1000;
                setTimeout(function() 

                    // stop recording
                    recorder.stopRecording(function() 
                        
                        // get recorded blob
                        var blob = recorder.getBlob();

                        // generating a random file name
                        var fileName = getFileName('webm');

                        // we need to upload "File" --- not "Blob"
                        var fileObject = new File([blob], fileName, 
                            type: 'video/webm'
                        );

                        uploadToPHPServer(fileObject, function(response, fileDownloadURL) 
                            if(response !== 'ended') 
                                document.getElementById('header').innerHTML = response; // upload progress
                                return;
                            

                            document.getElementById('header').innerHTML = '<a href="' + fileDownloadURL + '" target="_blank">' + fileDownloadURL + '</a>';

                            alert('Successfully uploaded recorded blob.');

                            // preview uploaded file
                            document.getElementById('your-video-id').src = fileDownloadURL;

                            // open uploaded file in a new tab
                            window.open(fileDownloadURL);
                        );

                        // release camera
                        document.getElementById('your-video-id').srcObject = null;
                        camera.getTracks().forEach(function(track) 
                            track.stop();
                        );

                    );

                , milliSeconds);
            );

            function uploadToPHPServer(blob, callback) 
                // create FormData
                var formData = new FormData();
                formData.append('video-filename', blob.name);
                console.log("blob.name:");
                console.log(blob.name);
                formData.append('video-blob', blob);
                callback('Uploading recorded-file to server.');
                makeXMLHttpRequest('https://xxx/yyy/', formData, function(progress) 
                    if (progress !== 'upload-ended') 
                        callback(progress);
                        return;
                    
                    var initialURL = 'https://xxx/yyy/' + blob.name;
                    callback('ended', initialURL);
                );
            

            function makeXMLHttpRequest(url, data, callback) 
                var request = new XMLHttpRequest();
                request.onreadystatechange = function() 
                    if (request.readyState == 4 && request.status == 200) 
                        if (request.responseText === 'success') 
                            callback('upload-ended');
                            return;
                        
                        alert(request.responseText);
                        return;
                    
                ;
                request.upload.onloadstart = function() 
                    callback('PHP upload started...');
                ;
                request.upload.onprogress = function(event) 
                    callback('PHP upload Progress ' + Math.round(event.loaded / event.total * 100) + "%");
                ;
                request.upload.onload = function() 
                    callback('progress-about-to-end');
                ;
                request.upload.onload = function() 
                    callback('PHP upload ended. Getting file URL.');
                ;
                request.upload.onerror = function(error) 
                    callback('PHP upload failed.');
                ;
                request.upload.onabort = function(error) 
                    callback('PHP upload aborted.');
                ;
                request.open('POST', url);
                request.send(data);
            

            // this function is used to generate random file name
            function getFileName(fileExtension) 
                var d = new Date();
                var year = d.getUTCFullYear();
                var month = d.getUTCMonth();
                var date = d.getUTCDate();
                return 'RecordRTC-' + year + month + date + '-' + getRandomString() + '.' + fileExtension;
            

            function getRandomString() 
                if (window.crypto && window.crypto.getRandomValues && navigator.userAgent.indexOf('Safari') === -1) 
                    var a = window.crypto.getRandomValues(new Uint32Array(3)),
                        token = '';
                    for (var i = 0, l = a.length; i < l; i++) 
                        token += a[i].toString(36);
                    
                    return token;
                 else 
                    return (Math.random() * new Date().getTime()).toString(36).replace(/\./g, '');
                
            
        </script>
    </body>
</html>

在存储文件的位置我有以下文件

<?php


// path to ~/tmp directory
$tempName = $_FILES['video-blob']['tmp_name'];


// move file from ~/tmp to "uploads" directory
if (!move_uploaded_file($tempName, $filePath)) 
    // failure report
    echo getcwd();
    echo " | ";
    echo 'Problem saving file: '.$tempName .' to ' .$filePath .' Not uploaded because of error #'.$_FILES['video-blob']['error'];
    
    if (!is_writable($filePath)) 
        echo " | ";
        echo "dir not writable or existing";
      
    
    die();


// success report
echo 'success';
?>

当我在本地服务器上运行它时,它工作正常。但是当我将它上传到我的 windows 2012 R2 服务器时,我得到了错误

POST https://xxx/yyy/ 405(方法不允许)

我尝试在 ISS 中使用处理程序映射并禁用 WebDAV,但没有运气。 由于它适用于 localhost 但不适用于 windows 服务器,我认为它一定与 IIS 设置有关,但无法找出是什么。

感谢任何帮助。

【问题讨论】:

您确定是脚本故障而不是服务器故障吗?您是否尝试过运行像 echo 'Hello World!'; 这样的简单脚本? 为什么您的请求会发送到https://xxx/yyy/,而不是可能驻留在该文件夹中的实际 PHP 文件? https://xxx/yyy/yourscript.php 【参考方案1】:

最后我自己发现了错误。

web.config 文件中的设置对于 FastCgiModule/StaticFileModules 不正确。

【讨论】:

WS 客户端在 Windows Server 2012 R2 上获得“连接重置”

】WS客户端在WindowsServer2012R2上获得“连接重置”【英文标题】:WSclientget"Connectionreset"onaWindowsServer2012R2【发布时间】:2015-08-3105:58:23【问题描述】:我正在尝试使用我的Java客户端访问Web服务,但我卡住了。我在WindowsServer2... 查看详情

错误:在 Azure 服务器上监听 EACCES 0.0.0.0:80 节点(Windows 服务器 2012 r2)

】错误:在Azure服务器上监听EACCES0.0.0.0:80节点(Windows服务器2012r2)【英文标题】:Error:listenEACCES0.0.0.0:80Nodeonazureserver(Windowsserver2012r2)【发布时间】:2016-07-1712:55:26【问题描述】:我停止了万维网发布服务并将启动类型更改为已... 查看详情

在 windows server 2012 R2 上发送 http/2 请求

】在windowsserver2012R2上发送http/2请求【英文标题】:sendhttp/2requestonwindowsserver2012R2【发布时间】:2018-01-0105:39:55【问题描述】:我想在我的应用程序中使用APNs推送服务,所以我使用以下代码:varresponseString=string.Empty;using(varrequest=ne... 查看详情

Windows 2012 R2 中的 Powershell 5.1

...】:2017-11-1409:42:41【问题描述】:我想在我的Windows2012R2服务器上安装/升级powershell。默认w2k12有4.0powershell,所以我下载了WindowsManagementFramework5.1作为文件:W2K12-KB3191565-x64.msu当 查看详情

如何在windows2012r2x64上运行jenkinsslave?(代码片段)

我们希望使用jenkins在Windows2012R2x64上构建一些特定的软件。但是当我尝试运行它时,主节点失败了这个错误:Connectingto192.168.1.27CheckingifJavaexistsC:ProgramFilesJavajdk1.6.0_30injava.exe-versionreturned1.6.0.InstallingtheJenkinsslaveserviceERROR:Messagenotfou... 查看详情

授予 Windows 2012 R2 上某些计算机的管理员访问权限

】授予Windows2012R2上某些计算机的管理员访问权限【英文标题】:GrantadminaccessforsomemachinesonWindows2012R2【发布时间】:2016-07-2913:47:21【问题描述】:我需要向某些计算机上的某些用户授予完全管理员访问权限。我知道实现这一目标... 查看详情

在 windows server 2008 r2 上停止端口 80

...】:2012-05-2502:32:49【问题描述】:我有一个监听80端口的服务器应用程序。但是当我开始监听时,我遇到了这个错误:在端口80上启动侦听器时出错:地址已在使用中:绑定如何停止使用80端口?注意:我已停止“万维网发布服务... 查看详情

无法在 Windows Server 2012 R2 上安装 phpmyadmin

】无法在WindowsServer2012R2上安装phpmyadmin【英文标题】:UnabletoinstallphpmyadminonWindowsServer2012R2【发布时间】:2016-08-0104:03:21【问题描述】:我正在开发一个使用PHP和谷歌图表的数据可视化门户网站。我在windowsserver2012r2上安装了Apache... 查看详情

windowsserver2012r2版本区别

...012R2EnterpriseWindowsServer2012R2DatacenterWindowsServer2012R2是最新的服务器版本Windows,于2013年10月18日发布。这是Windows8.1的服务器版本,在2013年6月3日的TechEd北美公布。WindowsServer2012,Datacenter和Standard版功能相同,变化只有授权(特别是虚... 查看详情

安装windowsserver2008r2/2012r2时提示:无法在此驱动器上安装windows

因为服务器出厂一般默认都是bios引导,当你合并vd(虚拟磁盘)后,改用UEFI引导安装windows时会出现此错误,此时你可以使用“shift+F10”快捷键打开命令行窗口,执行以下命令清除之前BIOS引导时磁盘分区残留信息,命令如下:1:diskp... 查看详情

登录失败:Windows Server 2012 R2 上用于远程 PS 脚本执行的未知用户名或密码错误

...4:43【问题描述】:我正在尝试从TeamCityWindowsSlave向另一台服务器运行powers 查看详情

管理员或 GCP 中的用户登录时出现 Windows 2012 R2 RDS 黑屏

...:我是一名Windows系统管理员,在GCP上运行一组Windows2012R2服务器,这些服务器是通过Itopia部署的,Itopia是GoogleCloud的合作伙伴,负责协 查看详情

Windows 2012 R2 32 位 SNMP 扩展代理

】Windows2012R232位SNMP扩展代理【英文标题】:Windows2012R232-bitSNMPextensionagent【发布时间】:2015-11-0313:10:11【问题描述】:我需要将应用程序从Windows2003迁移到Windows2012R2。有一个SNMP扩展代理DLL(32位),也需要迁移。我已安装SNMP服务... 查看详情

如何在 Microsoft Azure windows server 2012 R2 中启用 Microsoft Access Driver (*.mdb, *.accdb)?

】如何在MicrosoftAzurewindowsserver2012R2中启用MicrosoftAccessDriver(*.mdb,*.accdb)?【英文标题】:HowtoenableMicrosoftAccessDriver(*.mdb,*.accdb)inMicrosoftAzurewindowsserver2012R2?【发布时间】:2015-06-0908:51:00【问题描述】:我在Azure服务器中有虚拟机(Windo 查看详情

.netcore部署到windows2012r2服务器发请求慢

...在部署的时候就遇到了一个非常难以解决的问题。部署到服务器上的时候发现(windows2012r2),网站登录特别慢,要好几秒,排查了一番,发现是在发送请求的时候响应非常慢,比如a站点请求b站点的接口。测试本机发现,在本机... 查看详情

在 Windows Server 2012 R2 上安装 ODBC 驱动程序 11 时遇到问题

】在WindowsServer2012R2上安装ODBC驱动程序11时遇到问题【英文标题】:TroubleinstallingODBCDriver11onWindowsServer2012R2【发布时间】:2016-02-1215:41:44【问题描述】:我正在尝试在WindowsServer2012R2VM上安装php应用程序(TestRail),但在使用SQL驱动程... 查看详情

在 Windows Server 2012 R2 上安装 XAMPP 时出现 UAC“缺少写入权限”错误

】在WindowsServer2012R2上安装XAMPP时出现UAC“缺少写入权限”错误【英文标题】:UAC"missingwritepermissions"errorwhileinstallingXAMPPonWindowsServer2012R2【发布时间】:2018-02-0701:41:25【问题描述】:在Windows上通过PowerShell脚本安装XAMPP时遇... 查看详情

Windows Server 2012 R2 上的 Windows 服务 PlatformNotSupportedException 上的 WCF

】WindowsServer2012R2上的Windows服务PlatformNotSupportedException上的WCF【英文标题】:WCFonWindowsServicePlatformNotSupportedExceptionOnWindowsServer2012R2【发布时间】:2019-04-3017:03:20【问题描述】:我在Windows服务中托管WCF服务。它适用于多个版本的Wind... 查看详情