从javascript或JQuery执行服务器端cgi代码时遇到问题
Trouble executing server-side cgi code from javascript or JQuery
我正在尝试通过JavaScript或JQuery从Webclient向Debian Jessie上的Apache2网络服务器发送消息,以执行发送POSIX message_queue的编译C程序,但我无法使其工作。
我的 cgi 目录中有以下文件:root@asus:/var/www/cgi-bin# ls -l-rwxr-xr-x 1 www-data www-data 59008 Mar 20 17:47 mq_client.cgi-rwxr-xr-x 1 www-data www-data 115 三月 17 18:14 test.pl
mq_client.cgi 是生成 POSIX 消息的 C 编译可执行文件。如果我执行lachlan@asus:~$/var/www/cgi-bin/mq_client.cgi服务器发送和接收正确的消息。
Test.pl 是一个生成 html 代码的 perl scrpt 如果我执行lachlan@asus:~$/var/www/cgi-bin/test.pl这也工作正常并给出输出:内容类型:文本/html只是测试。
如果我按如下方式使用铬网络服务器:http://localhost/cgi-bin/test.pl我得到正确的结果:"只是测试"
但是,我无法从网络服务器获取要执行的mq_client.cgi代码。我已经搜索了许多网站并尝试了许多选项,如下所示。
这是我的"index.html"代码(请注意,错误仅在我按下按钮时发生)
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="js/jq_182.js"></script>
<script type="text/javascript">
function mapToggle(){
// different options as indicated below
}
</script>
</head>
<body>
<div id = "label"> </div>
<form action = "" class = "mapButton">
<p> <button type= "button" onclick = "mapToggle()" class = "button2property"> Map Toggle </button> </p>
</form>
</body>
</html>
我在上面指示的位置尝试过的不同选项(一个接一个)是:
选项 1.
var site = 22;
$.ajax({type: "PUT", url: "/cgi-bin/mq_client.cgi", async: false, data: site});
这在 Chromium 中给出了以下 2 个错误: 主线程上的同步 XMLHttpRequest 已被弃用,因为它会对最终用户的体验产生不利影响。如需更多帮助,请查看 https://xhr.spec.whatwg.org/。jq_182.js:2 PUT http://localhost/cgi-bin/mq_client.cgi 500(内部服务器错误)
选项 2.
var site = 22;
$.ajax({type: "GET", url: "/cgi-bin/mq_client.cgi", async: false, data: site});
这会产生以下 2 个错误:主线程上的同步 XMLHttpRequest 已被弃用,因为它会对最终用户的体验产生不利影响。如需更多帮助,请查看 https://xhr.spec.whatwg.org/。jq_182.js:2GET http://localhost/cgi-bin/mq_client.cgi 500(内部服务器错误)
选项 3.
var myRequest = new XMLHttpRequest();
myRequest.open("GET", "/cgi-bin/mq_client.cgi");
myRequest.send();
这给出了以下错误代码:index2.html:21 GET http://localhost/cgi-bin/mq_client.cgi 500(内部服务器错误)
选项 4.
src = "/cgi-bin/mq_client.cgi";
Chromium中没有指示任何错误,但也没有发送任何消息
选项 5.
var img = new Image();
img.src = "/cgi-bin/mq_client.cgi";
产生的错误:GET http://localhost/cgi-bin/mq_client.cgi 500(内部服务器错误)
选项 6.还将文件名更改为 index.shtml
<!--#exec cmd="/cgi-bin/mq_client.cgi" -->
Chromium 中没有指示任何错误,但没有发送任何消息
选项 7.
var client = new XMLHttpRequest();
client.open("post", "/cgi-bin/mq_client.cgi", true);
Chromium 中没有指示任何错误,但没有发送任何消息。
选项 8.
var client = new XMLHttpRequest();
var formx = new FormData();
formx.append("dummy","data");
client.open("post", "/cgi-bin/mq_client.cgi", true);
client.setRequestHeader("Content-Type", "multipart/form-data");
client.send(formx);
错误:index2.html:45 POST http://localhost/cgi-bin/mq_client.cgi 500(内部服务器错误)
我已经查看了许多参考资料并尝试了他们的建议,但尚未解决问题。
关于在哪里寻找问题的任何想法将不胜感激。拉克兰
服务器端代码生成 POSIX 消息队列:服务器代码向服务器发送 POSIX 消息。代码如下:
int main(void) {
char msg[5];
// Open queue already created
mqd_t mQueue = mq_open("q1", O_WRONLY, NULL);
if (mQueue == (mqd_t) -1){
puts("Queue Open Failed'n");
return EXIT_FAILURE;
}
puts("Queue Opened'n");
// Send Message
msg[0] = 22;
if ( mq_send(mQueue, msg, 5, 1) == -1){
puts("Queue Send Failure'n");
return EXIT_FAILURE;
}
puts("Message Sent'n");
mq_close(mQueue);
return EXIT_SUCCESS;
}
下面是接收消息队列的服务器代码:
int main(void) {
char msg[MAX_MSG_SIZE];
unsigned int prio;
ssize_t msgLength = 0;
// Create queue
struct mq_attr attr;
attr.mq_maxmsg = 4;
attr.mq_msgsize = 5;
mQueue = mq_open(“q1”, O_CREAT | O_RDWR, S_IRWXU | S_IRWXG | S_IRWXO, &attr);
if (mQueue == (mqd_t) -1){
puts("Queue Create Failed'n");
return EXIT_FAILURE;
}
puts("Queue Created'n");
// get message - This blocks
msgLength = mq_receive(mQueue, msg, MAX_MSG_SIZE, &prio);
if (msgLength == -1){
puts("Queue Read Failure'n");
return EXIT_FAILURE;
}
printf("Message Received: %i'n", (int)msg[0]);
mq_close(mQueue);
return EXIT_SUCCESS;
}
访问服务器队列的权限包括:S_IRWXU |S_IRWXG |S_IRWXO
执行 cgi 代码的权限是:-rwxr-xr-x 1 www-data www-data 59008 Mar 20 17:47 mq_client.cgi
如果这是一个权限问题,你能建议缺少哪些权限吗?
我终于找到了另一个有助于解决问题的帖子。是的,这是一个权限问题。程序权限将覆盖消息队列权限。一旦解决了这个问题,问题就解决了。问候拉克兰
- 从桌面读取python文件时高亮显示代码
- 将PHP变量传递给jQuery时遇到问题
- 我的jQuery插件参数没有正确启动,遇到了问题
- 如何将函数包装在函数中以避免代码重复
- 通过单击表单中的按钮,在代码生成中使用javascript生成字母数字代码
- 货币代码为欧元-金额的格式不应包含小数
- Regex代码只允许一个空格
- 如何将屏幕分辨率乘以 80%,然后在代码中使用
- 从var向代码隐藏函数传递值
- 如何动态插入jquery代码
- 如何在php变量中嵌入JQuery代码
- 代码不会验证
- 从javascript或JQuery执行服务器端cgi代码时遇到问题
- 我正在编写代码进行在线测试,在自动提交时遇到问题
- 我的X O游戏JQuery代码在处理innerhtml时遇到了一些问题
- 使用jQuery移动代码时遇到一些问题
- 理解AngularJS中的某些代码时遇到困难
- 遇到Jquery事件的麻烦.与其他jquery代码一起拖动
- gruntjs遇到失败代码后进行清理
- 在javascript代码中插入php变量时遇到问题