【问题标题】:XMLHttpRequest return 403 on new serverXMLHttpRequest 在新服务器上返回 403
【发布时间】:2021-07-22 00:31:29
【问题描述】:

我使用库 (orakupload) 来上传照片。这通过 XMLHttpRequest 对来自同一库的 php 文件进行查询,该文件保存图像。 在旧服务器上它可以正常工作,但是我们更改了服务器并且它已经停止工作。 调用 php 文件我得到 403 Forbidden。该文件与调用它的 Js 位于完全相同的文件夹中(逻辑上,也是同一台服务器)。 我已经搜索并尝试了所有方法,但我无法让它不返回错误,让我们看看你是否可以帮助我。

XMLHttpRequest:

var xhr = new XMLHttpRequest();
        xhr.open("POST", settings.orakuploader_path+"orakuploader.php?filename="+encodeURIComponent(file.name)+"&path="+settings.orakuploader_path+"&resize_to="+settings.orakuploader_resize_to+"&thumbnail_size="+settings.orakuploader_thumbnail_size+"&main_path="+settings.orakuploader_main_path+"&thumbnail_path="+settings.orakuploader_thumbnail_path+"&watermark="+settings.orakuploader_watermark+"&orakuploader_crop_to_width="+settings.orakuploader_crop_to_width+"&orakuploader_crop_to_height="+settings.orakuploader_crop_to_height+"&orakuploader_crop_thumb_to_width="+settings.orakuploader_crop_thumb_to_width+"&orakuploader_crop_thumb_to_height="+settings.orakuploader_crop_thumb_to_height, true);
        xhr.send(file);
        xhr.onreadystatechange = function() 
        {
...

如果我打开创建的路径,并直接在 chrome 中打开,它会毫无问题地执行 php 文件。

所以我认为这一定不是 htaccess 的问题。 我认为由于某种原因可能是 CORS 问题,但我将标头添加到 php 文件中,并且问题继续存在:

header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');

最后,我将查询中的标头信息留在这里,以防对您有所帮助:

General
Request URL: https://www.XXXXXX.com/intranet/orakuploader/orakuploader.php?filename=aaaa.png&path=/intranet/orakuploader/&resize_to=0&thumbnail_size=0&main_path=/intranet/files&thumbnail_path=/intranet/files/tn&watermark=&orakuploader_crop_to_width=1920&orakuploader_crop_to_height=1420&orakuploader_crop_thumb_to_width=200&orakuploader_crop_thumb_to_height=200
Request Method: POST
Status Code: 403 Forbidden
Remote Address: 52.121.xx.xx:xxx
Referrer Policy: strict-origin-when-cross-origin


Response Header
Connection: Keep-Alive
Content-Length: 318
Content-Type: text/html; charset=iso-8859-1
Date: Wed, 21 Jul 2021 12:33:40 GMT
Keep-Alive: timeout=5, max=53
Server: Apache
X-Frame-Options: SAMEORIGIN, SAMEORIGIN


Request Header
Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: es,ca;q=0.9
Connection: keep-alive
Content-Length: 200316
Content-Type: image/png
Cookie: xxxxxxx
Host: www.XXXXXX.com
Origin: https://www.XXXXXX.com
Referer: https://www.XXXXXX.com/intranet/prop/1193
sec-ch-ua: " Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"
sec-ch-ua-mobile: ?0
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36

编辑

如果我断开ssl证书,它不会保存图像,但我没有收到403错误,可能是这里的原因吗?

【问题讨论】:

  • 在这里摆弄任何 CORS 设置都是没有意义的(根据您所说,您正在向 same 源发出请求),而且这不可能是 HTTPS 问题或者(如果是的话,那么客户端和服务器会在他们开始相互通信 HTTP 之前中断整个事情,所以你甚至无法获得 403。)服务器上的日志文件必须说什么?
  • 我知道这不可能是 CORS 问题,但我不知道还能尝试什么。 SSL 部分对此进行了评论,因为它可能有助于解决问题。这似乎是一个服务器配置,因为在之前的配置中它可以工作。
  • 我只能访问读取php日志文件。并且没有针对此问题的任何线路。 ://

标签: javascript php ajax


【解决方案1】:

我发现了问题,我把它留在这里以防它帮助别人:

完成对 apache“mod_security”模块的查找。我发现其中一条规则阻止了请求。

【讨论】:

    猜你喜欢
    • 2017-07-23
    • 2011-08-05
    • 1970-01-01
    • 1970-01-01
    • 2011-11-08
    • 1970-01-01
    • 2022-06-25
    • 2017-08-11
    • 1970-01-01
    相关资源
    最近更新 更多