当我尝试发出https请求时,我收到406响应错误(注意:当我只使用http时没有错误)

时间:2017-03-02 14:45:57

标签: php https http-headers file-transfer http-status-code-406

我正在使用cordova file-transfer插件,以便用户在我的应用中上传图片。

我的代码在我的服务器上的php页面发出正常的http请求时效果很好。 我想提出一个安全的请求,所以我尝试使用https但是我收到了406错误(请参阅屏幕截图了解错误详情)

enter image description here

我在应用程序中创建的所有其他ajax请求都使用https成功运行。

我目前在发出请求时没有发送任何标头,但是有一个选项可以使用文件传输插件来执行此操作。

我已经研究过如何解决这个错误(例如this question here)但是我仍然不确定在我的情况下我需要做什么。 我想知道你能帮我确定我需要的标题吗?

这是我的代码:

的Javascript

function uploadProfilePic(){
    var token = localStorage.getItem("usertoken");      
    var defs = [];
    var def = $.Deferred();
    function win(r) {   

        if($.trim(r.response) === "0") {
            alert("Sorry! We have encountered an error");
            def.resolve(0);
        }else{

            def.resolve(1);     
        }
    }       
    function fail(error) {

        //upload of pic failed.
        alert("Sorry! We have encountered an error: " + JSON.stringify(error));
        def.resolve(0);
    }
    var uri = encodeURI("https://www.example.com/update_profile_pic.php");

    var options = new FileUploadOptions();
    options.fileKey="profile_pic_image_file";
    options.mimeType="image/jpeg";

    var params = new Object();
    params.usertoken = token; 
    params.app_root_url = app_root_url;

    //not sure what headers to add here.
    //var headers={'headerParam':'headerValue'};
    //options.headers = headers;

    options.params = params;


    var ft = new FileTransfer();
    ft.onprogress = function(progressEvent){
        if(progressEvent.lengthComputable){
                loadingStatus.setPercentage(progressEvent.loaded / progressEvent.total);
            }else{
                loadingStatus.increment();
            }
    };

    ft.upload($ESAPI.encoder().encodeForURL(profileImage), uri, win, fail, options);
    defs.push(def.promise());

    $.when.apply($, defs).then(function() { 
        //pic uploaded fine

    }); 
}

PHP(upload_profile_pic.php)

header("Access-Control-Allow-Origin: *");   

if(isset($_FILES['profile_pic_image_file'])){
    $data['profile_image_is_set'] = true;


    //do stuff with profile image here

    echo json_encode($data);
}else{
    $data['profile_image_is_set'] = false;
        //image not set 
    echo json_encode($data);
}

0 个答案:

没有答案