Diskuze: javascript GET httprequest s upravou hlavicky

JavaScript JavaScript javascript GET httprequest s upravou hlavicky

Avatar
lubomir.tomecek:

Ahoj, snazim se napsat stranku, ktera bude stahovat JSON objekty z aplikacnoho serveru, upravi je a data z JSON zobrazi v mape.
Server ale z historickych duvodu pozaduje, aby byla v GET dotazu obsazena hlavicka USER s hodnotou. Pokud dam URL do prohlizece, tak je odpoved: "Chybí hlavička USER." Jestlize pouziji doplnek do prohlizece Poster a nebo Modify Headers nastavim si, ze GET dotazy maji odchazet s USER = "<hodnota>" vrati se mi JSON bez problemu.
Muzete mi prosim nekdo poradit nebo nasmerovat jak by takovy dotaz sel napsat v Javascriptu? Snazim se to vyresit uz nekolik dni, google mi zatim moc nepomohl.

Diky,
Luba

 
Odpovědět 11.6.2015 9:12
Avatar
lubomir.tomecek:

html:
<HTML>
<HEAD>
<script type="text/ja­vascript">
function getHttp(theUrl)
{
var request = new XMLHttpRequest();
request.open( "GET", theUrl, true );
request.setRe­questHeader( "USER", "service" );
request.send( null );
return request.respon­seText;
}
</script>
</HEAD>
<BODY>
<button onclick="getHttp('http:/­/localhost:9000/u­ser/id/1')">Click me</button>
</BODY>
</HTML>

Chyba:
XMLHttpRequest cannot load http://localhost:9000/user/id/1. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://local­host:8000' is therefore not allowed access. The response had HTTP status code 401.

CORS bych mel mit zadany spravne, ale obcas se objevuje, kdyz chybi cil pozadavku. SKutecna chyba bude asi HTTP status code 401 -> Unauthorized

Editováno 11.6.2015 10:34
 
Nahoru Odpovědět 11.6.2015 10:34
Avatar
Drahomír Hanák
Tým ITnetwork
Avatar
Odpovídá na lubomir.tomecek
Drahomír Hanák:

Pokud vím, tak hodně prohlížečů na localhostu CORS blokuje. Musíš buďto v prohlížeči povolit tuhle možnost (například chrome jde spustit s flagou --disable-web-security), použít pro klienta i server stejný HTTP server nebo ty požadavky posílat přes nějakou proxy.

 
Nahoru Odpovědět 11.6.2015 13:36
Avatar
Odpovídá na Drahomír Hanák
lubomir.tomecek:

Diky za odpoved!
mam chrome Verze 43.0.2357.124 m pustil jsem ho chrome.exe --disable-web-security ale CORS zlobi porad:
XMLHttpRequest cannot load http://localhost:9000/user/id/1. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://local­host:8000' is therefore not allowed access. The response had HTTP status code 401.

Do hlavicky uz cpu i:
request.setRe­questHeader('Ac­cess-Control-Allow-Origin', '*');
request.setRe­questHeader('Ac­cess-Control-Allow-Methods', 'GET');

zkusim rozjet webovy server na IP adrese a do hosts zadat jmeno, aby to neslo pres localhost.

 
Nahoru Odpovědět 11.6.2015 14:36
Avatar
Drahomír Hanák
Tým ITnetwork
Avatar
Odpovídá na lubomir.tomecek
Drahomír Hanák:

Teď jsem to zkoušel ve stejné verzi chromu a jde to i bez té flagy. Podle té chyby vůbec v odpovědi serveru nemáš Access-Control-Allow-Origin. Na serveru přidej k odpovědi hlavičku Access-Control-Allow-Origin: *

 
Nahoru Odpovědět 11.6.2015 15:01
Avatar
Odpovídá na Drahomír Hanák
lubomir.tomecek:

Pouzivam Apache 2.2 na win 7, v httpd.conf mam oddil:
DocumentRoot "C:\Users\UI570221\In­stall\Apache22\htdoc­s\app"

<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Allow from all
Header set Access-Control-Allow-Origin "*"
</Directory>

<Directory "/Apache22/htdoc­s/app">
AllowOverride None
Order allow,deny
Allow from all
Header set Access-Control-Allow-Origin "*"
</Directory>

uz nevim kam bych tu deklaraci vecpal..

Muzu samozrejme zkusit jiny webserver..

 
Nahoru Odpovědět 11.6.2015 15:13
Avatar
Odpovídá na lubomir.tomecek
lubomir.tomecek:

Ale podle chyby bude problem v tom, ze tu deklaraci musim mit na tom cilovem serveru a ne na tom odkud jde pozadavek, ze? Coz by vysvetlovalo me marne snazeni :-)
XMLHttpRequest cannot load http://10.42.18.64:9000/user/id/1. No 'Access-Control-Allow-Origin' header is present on the requested resource.

 
Nahoru Odpovědět 11.6.2015 15:23
Avatar
Milan Gallas
Redaktor
Avatar
Odpovídá na Drahomír Hanák
Milan Gallas:

Ahoj. Mě to jede normálně, akorát mi to s daty pošle i celou šablonu webu(kód html). Nevíš jak se tomu dá zabránit, aby se to html neposílalo?

var app = angular.module('myApp', []);

app.controller('userCtrl', function($scope, $http){
    $scope.users =[];

    $http.get("http://projekt4.net/chat/get")
            .success(function (response) {$scope.users = response;})

            .error(function(){$scope.users= [];});
});

Odpověď vypadá takto:

{[{"name":"martin","id":12},{"name":"tomas","id":31},{"name":"nikola","id":34}]
<!DOCTYPE html....... hromada html, které nechci posílat.
 
Nahoru Odpovědět 10.11.2015 18:11
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.