Hi,
das hier ist kein js Problem, sondern cgi. Ich hoffe Ihr könnt mir trotzdem helfen, das cgi Forum, das ich gefunden habe, hatte den letzen Eintrag 2014 ...
Wenn ich was anderes habt, um Daten cross-domain ohne iframe zu übertragen, wäre mir auch geholfen. Das hier war die einzige Lösung, die ich vor Jahren gefunden habe (es geht um eine Lösung, die ganz einfach in bestehende Webseiten ins CMS eingepflegt werden kann).
Es hätte aber seine Vorteile, wenn ich dieses script wieder ans Laufen kriege.
Ich verwende das Script seit Jahren, um Termindaten, die auf meiner Webseite verwaltet werden, auf anderen Webseiten (billige Pakete oft) darstellen zu können. Das script hat vor kurzem einfach so seinen Geist aufgegeben, ohne dass ich irgendwas angefasst hätte. Mein Provider hilft mir nicht weiter, könnt ihr mir einen Tipp geben?
Auf den Client-Webseiten ist dieses Script eingebunden:
In der Konsole der Client-Webseite findet sich:
Failed to load resource: the server responded with a status of 500 (Internal Server Error)
Und auf meinem Server in den Logs:
[Tue Oct 09 15:54:45.801824 2018] [mime:warn] [pid 1802672:tid 140515424892672] AH01599: Cannot get media type from 'cgi-script'
[Tue Oct 09 15:54:45.805348 2018] [mime:warn] [pid 1802605:tid 140515886491392] AH01599: Cannot get media type from 'cgi-script'
[Tue Oct 09 15:54:45.818648 2018] [cgid:error] [pid 1802672:tid 140515424892672] [client 79.218.156.6:58420] End of script output before headers: ACD.js, referer: http://www.andere-domain.de/TERMINE-1.html
[Tue Oct 09 15:54:45.824320 2018] [cgid:error] [pid 1802605:tid 140515886491392] [client 79.218.156.6:58421] End of script output before headers: ACD.js, referer: http://www.andere-domain.de/TERMINE-1.html
Das ist das cgi-script:
das hier ist kein js Problem, sondern cgi. Ich hoffe Ihr könnt mir trotzdem helfen, das cgi Forum, das ich gefunden habe, hatte den letzen Eintrag 2014 ...
Wenn ich was anderes habt, um Daten cross-domain ohne iframe zu übertragen, wäre mir auch geholfen. Das hier war die einzige Lösung, die ich vor Jahren gefunden habe (es geht um eine Lösung, die ganz einfach in bestehende Webseiten ins CMS eingepflegt werden kann).
Es hätte aber seine Vorteile, wenn ich dieses script wieder ans Laufen kriege.
Ich verwende das Script seit Jahren, um Termindaten, die auf meiner Webseite verwaltet werden, auf anderen Webseiten (billige Pakete oft) darstellen zu können. Das script hat vor kurzem einfach so seinen Geist aufgegeben, ohne dass ich irgendwas angefasst hätte. Mein Provider hilft mir nicht weiter, könnt ihr mir einen Tipp geben?
Auf den Client-Webseiten ist dieses Script eingebunden:
HTML-Code:
<div id='terminePeriodisch'><script type='text/javascript' src='http://domain.de/cgi-bin/ACD/ACD.js?uri=(http://domain.de/extern/Termine/Termine.php?id=295&periodisch$varMobil)'></script><script type='text/javascript'> document.write(ACD.responseText); </script></div>
Failed to load resource: the server responded with a status of 500 (Internal Server Error)
Und auf meinem Server in den Logs:
[Tue Oct 09 15:54:45.801824 2018] [mime:warn] [pid 1802672:tid 140515424892672] AH01599: Cannot get media type from 'cgi-script'
[Tue Oct 09 15:54:45.805348 2018] [mime:warn] [pid 1802605:tid 140515886491392] AH01599: Cannot get media type from 'cgi-script'
[Tue Oct 09 15:54:45.818648 2018] [cgid:error] [pid 1802672:tid 140515424892672] [client 79.218.156.6:58420] End of script output before headers: ACD.js, referer: http://www.andere-domain.de/TERMINE-1.html
[Tue Oct 09 15:54:45.824320 2018] [cgid:error] [pid 1802605:tid 140515886491392] [client 79.218.156.6:58421] End of script output before headers: ACD.js, referer: http://www.andere-domain.de/TERMINE-1.html
Das ist das cgi-script:
PHP-Code:
#!/usr/bin/perl
##########################################################################################
# #
# AJAX Cross Domain - ACD #
# ---------------------------------------------------------------------------------------#
# Full documentation and license: see http://www.ajax-cross-domain.com/ #
# Author: Bart Van der Donck http://www.dotinternet.be/ #
# ---------------------------------------------------------------------------------------#
# For installation procedure, see http://www.ajax-cross-domain.com/#Installation #
# ---------------------------------------------------------------------------------------#
# This software is provided "as is" without any express or implied warranty. #
# #
##########################################################################################
##########################################################################################
# Configuration area #
##########################################################################################
# which query-strings are allowed to call this script ?
my @allowed_uris = (
'uri=(http://doamin.de/extern/Termine/Termine.php?)'
);
# which timeout to use for the remote request (in seconds) ?
my $timeout = 30;
# which is the default request method when not specified (case sensitive) ?
my $method = 'GET';
# what is the maximum size of the response in KB ?
my $maxsize = 1000;
# as which content-type should ACD.js be served ?
my $js_content_type = 'application/x-javascript';
# In which character set should ACD.js be served ? e.g. 'UTF-8', 'ISO-8859-1', ...
# Set " my $charset = undef; " if you want to keep the character set of the remote
# resource
my $charset = undef;
# What is the default User-Agent header that is offered to the remote resource ?
my $useragent = 'AJAX Cross Domain';
##########################################################################################
# Load needed modules, those should be present in default Perl 5.6+ installations #
##########################################################################################
use strict;
use warnings;
use CGI::Carp qw(fatalsToBrowser);
use LWP::UserAgent;
use HTTP::Request;
use HTTP::Headers;
use MIME::Base64;
use subs 'format_output';
##########################################################################################
# Decide which remote resources we allow #
##########################################################################################
my $OKflag = 0;
my $auth_failed = 'AJAX Cross Domain discovered that you cannot perform the remote '
. 'request. The query-string after ACD.js must be set as an allowed '
. 'query-string in the configuration area of ACD.js.';
# Check '&' versus '&' versions
my $amp = $ENV{'QUERY_STRING'};
$amp =~s/&/&/ig;
my $amp2 = $ENV{'QUERY_STRING'};
$amp2 =~s/&/&/ig;
for (@allowed_uris) {
$OKflag = 1 if (index($ENV{'QUERY_STRING'}, $_)>=0 || index($amp, $_)>=0 || index($amp2, $_)>=0);
}
$OKflag = 1;
if ($OKflag != 1) {
format_output($auth_failed, $auth_failed, $auth_failed, $auth_failed, $auth_failed);
}
##########################################################################################
# Parse the query-string #
##########################################################################################
# Parse the bracket-separated parts
# ---------------------------------
my $uri = $ENV{'QUERY_STRING'};
$uri =~ s/(.*)(uri=\()(.*?)(\))(.*)/$3/ig;
my $postdata = $ENV{'QUERY_STRING'};
$postdata =~ s/(.*)(postdata=\()(.*?)(\))(.*)/$3/ig;
$postdata = '' if $postdata eq $ENV{'QUERY_STRING'};
my $headers = $ENV{'QUERY_STRING'};
$headers =~ s/(.*)(headers=\()(.*?)(\))(.*)/$3/ig;
$headers = '' if $headers eq $ENV{'QUERY_STRING'};
for ($headers) {
tr/+/ /;
s/%([A-Fa-f\d]{2})/chr hex $1/eg;
}
# Parse the remaining parts
# -------------------------
my %param;
my $rest = $ENV{'QUERY_STRING'};
for ($postdata, $uri, $headers) {
$rest =~ s/\Q$_//g if $_ ne '';
}
for (split/&/, $rest) {
my @t_s = split /=/, $_;
my $name = $t_s[0];
s/^\Q$t_s[0]=//i;
my $value = $_;
for ($name, $value) {
tr/+/ /;
s/%([A-Fa-f\d]{2})/chr hex $1/eg;
}
$param{$name} = $value;
}
$method = uc $param{method} if defined $param{method};
$method = 'POST' if $postdata ne '';
##########################################################################################
# Escapes for left and right brackets inside $uri, $headers and $postdata #
##########################################################################################
for ($uri, $headers, $postdata) {
s/%28/(/g;
s/%29/)/g;
s/%2528/%28/g;
s/%2529/%29/g;
}
###########################################################################################
# Split headers in name/value pairs #
###########################################################################################
my %add_header;
$add_header{'User-Agent'} = $useragent;
for (split /&/, $headers) {
my @t_s = split /=/, $_;
my $name = $t_s[0];
s/^\Q$t_s[0]=//i;
my $value = $_;
for ($name, $value) {
tr/+/ /;
s/%([A-Fa-f\d]{2})/chr hex $1/eg;
}
$add_header{$name} = $value;
}
###########################################################################################
# Fire off the request #
###########################################################################################
# General parameters of the request
# ---------------------------------
my $ua = new LWP::UserAgent;
$ua->max_size($maxsize * 1024);
$ua->timeout($timeout);
$ua->parse_head(undef);
# Perform request
# ---------------
my $req = HTTP::Request->new($method, $uri);
if ($method eq 'POST') {
$req->content_type('application/x-www-form-urlencoded');
$req->header('Content-Length' => length($postdata));
}
$req->header(%add_header);
$req->content($postdata);
# Receive response
# ----------------
my $res = $ua->request($req);
if ($res->is_success) {
format_output(
$res->content,
$res->as_string,
$res->status_line,
'',
$req->as_string
);
}
else {
format_output(
$res->content,
$res->as_string,
$res->status_line,
'Request failed',
$req->as_string
);
}
###########################################################################################
# Last possibility: if no content has been outputted yet, show error #
###########################################################################################
format_output(
$res->content,
$res->as_string,
$res->status_line,
'Unexpected error',
$req->as_string
);
###########################################################################################
# Output formatter #
###########################################################################################
sub format_output {
# General regexes and headers
# ---------------------------
my @inp = @_;
for (@inp) {
s/\\/\\\\/g;
s/'/\\'/g;
s/\//\\\//g;
s/(\r\n|\r)/\n/g;
}
my ($responseText, $getAllResponseHeaders, $status, $error, $fullrequest) = @inp;
$responseText = encode_base64($responseText)
if ( defined $param{'base64'} && $param{'base64'} eq '1' );
my $output = "Content-Type: $js_content_type\r\n\r\n";
$output.=qq{// ----------------------------------------------------------------\r\n};
$output.=qq{// INITIALIZATION\r\n};
$output.=qq{// ----------------------------------------------------------------\r\n};
$output.=qq{var ACD = new Object();\r\n\r\n\r\n};
# What was the sent request ?
# ---------------------------
$output.=qq{// ----------------------------------------------------------------\r\n};
$output.=qq{// ACD.request - FULL REQUEST THAT WAS SENT\r\n};
$output.=qq{// ----------------------------------------------------------------\r\n};
$output.=qq{ACD.request = '';\r\n};
if (defined $fullrequest) {
for (split /\n/, $fullrequest) {
$output.=qq{ACD.request += '$_\\r\\n';\r\n};
}
}
$output.=qq{\r\n\r\n};
# What was the HTTP status code of the response ?
# -----------------------------------------------
$output.=qq{// ----------------------------------------------------------------\r\n};
$output.=qq{// ACD.status - HTTP RESPONSE STATUS CODE\r\n};
$output.=qq{// ----------------------------------------------------------------\r\n};
$output.=qq{ACD.status = '$status';\r\n};
$output.=qq{\r\n\r\n};
# What are the headers of the response ?
# --------------------------------------
$output.=qq{// ----------------------------------------------------------------\r\n};
$output.=qq{// ACD.getAllResponseHeaders - FULL HEADERS OF RESPONSE\r\n};
$output.=qq{// ----------------------------------------------------------------\r\n};
$output.=qq{ACD.getAllResponseHeaders = '';\r\n};
my %getResponseHeader;
my $spaces = 0;
if (defined $getAllResponseHeaders) {
$getAllResponseHeaders = (split /\n\n/, $getAllResponseHeaders)[0];
for (split /\n/, $getAllResponseHeaders) {
$output.=qq{ACD.getAllResponseHeaders += '$_\\r\\n';\r\n};
my @key_property = split /: /, $_;
if (defined $key_property[1] && $key_property[1] ne '') {
$getResponseHeader{$key_property[0]} = $key_property[1];
$spaces = length($key_property[0]) if $spaces < length($key_property[0]);
}
}
$output.=qq{\r\n\r\n};
$output.=qq{// ----------------------------------------------------------------\r\n};
$output.=qq{// ACD.getResponseHeader - METHOD WITH EVERY KEY/VALUE HEADER\r\n};
$output.=qq{// ----------------------------------------------------------------\r\n};
$output.=qq{ACD.getResponseHeader = {};\r\n};
while ( my ($key, $val) = each %getResponseHeader) {
$output.=qq{ACD.getResponseHeader['$key'] } . ' '
x ($spaces - length($key)) . qq{= '$val';\r\n};
if (uc $key eq 'CONTENT-TYPE' && $val =~ /charset=/i && not defined $charset) {
$charset = $val;
$charset =~ s/(.*)(charset=)(.+)/$3/i;
}
}
}
$output.=qq{\r\n\r\n};
$output =~ s/\Q$js_content_type/$js_content_type; charset=$charset/ if defined $charset;
# What was the body of the response ?
# -----------------------------------
$output.=qq{// ----------------------------------------------------------------\r\n};
$output.=qq{// ACD.responseText - BODY OF RESPONSE\r\n};
$output.=qq{// ----------------------------------------------------------------\r\n};
$output.=qq{ACD.responseText = '';\r\n};
if (defined $responseText) {
for (split /\n/, $responseText) {
$output.=qq{ACD.responseText += '$_\\r\\n';\r\n};
}
}
$output.=qq{\r\n\r\n};
# Were there any errors ?
# -----------------------
$output.=qq{// ----------------------------------------------------------------\r\n};
$output.=qq{// ACD.error - ERRORS\r\n};
$output.=qq{// ----------------------------------------------------------------\r\n};
$output.=qq{ACD.error = '$error';\r\n};
$output.=qq{\r\n\r\n};
# Output & end
# ------------
print $output;
exit;
}
__END__
Kommentar