javascript - part - youtube api php
¿Por qué veo un error de "origen no está permitido por Access-Control-Allow-Origin" aquí? (11)
Agregue un global.asax en su solución.
Añadir
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
en
protected void Application_BeginRequest(object sender, EventArgs e)
{
}
Esta pregunta ya tiene una respuesta aquí:
Estoy viendo el siguiente error:
Origin http://localhost:8080 is not allowed by Access-Control-Allow-Origin
con este código:
var http = new getXMLHttpRequestObject();
var url = "http://gdata.youtube.com/action/GetUploadToken";
var sendXML = ''<?xml version="1.0"?><entry xmlns="http://www.w3.org/2005/Atom"''+
''xmlns:media="http://search.yahoo.com/mrss/''+
''xmlns:yt="http://gdata.youtube.com/schemas/2007">''+
''<media:group><media:title type="plain">My First API</media:title>''+
''<media:description type="plain">First API</media:description>''+
''<media:category scheme="http://gdata.youtube.com/schemas/2007/categories.cat">People</media:category>''+
''<media:keywords>first, api</media:keywords></media:group></entry>'';
http.open("POST", url, true);
http.setRequestHeader("Authorization", "AuthSub token=" + AccessToken);
http.setRequestHeader("X-GData-Key", "key="+ dev_key);
http.setRequestHeader("Content-Type", "application/atom+xml; charset=UTF-8");
http.onreadystatechange = function() {
if(http.readyState == 4) {
alert(http.responseXML);
}
}
http.send(sendXML);
¿Qué puede causar esto, y cómo lo resuelvo?
Aquí, tenemos que hacer dos cosas para Apache Http
1) En el archivo httpd.config, elimine el comentario de este archivo
LoadModule headers_module modules/mod_headers.so
2) Añadir esta línea en la parte inferior.
Header set Access-Control-Allow-Origin "*"
Javascript está limitado al realizar solicitudes de ajax fuera del dominio actual.
- Ejemplo 1: su dominio es example.com y desea realizar una solicitud a test.com => no puede.
- Ej 2: su dominio es example.com y desea realizar una solicitud a inner.example.com => no puede.
- Ej 3: su dominio es example.com:80 y desea realizar una solicitud a example.com:81 => no puede
- EX 4: su dominio es example.com y desea realizar una solicitud a example.com => puede.
Javascript está limitado por la "misma política de origen" por razones de seguridad, por lo que un script malicioso no puede ponerse en contacto con un servidor remoto y enviar datos confidenciales.
jsonp es una forma diferente de usar javascript. Realiza una solicitud y los resultados se encapsulan en una función de devolución de llamada que se ejecuta en el cliente. Es lo mismo que vincular una nueva etiqueta de secuencia de comandos en la parte principal de su html (usted sabe que puede cargar secuencias de comandos de dominios diferentes a los suyos aquí).
Sin embargo, para usar jsonp el servidor debe estar configurado correctamente. Si este no es el caso, no puede usar jsonp y DEBE confiar en un proxy del lado del servidor (PHP, ASP, etc.). Hay muchas guías relacionadas con este tema, ¡simplemente buscalo en Google!
Me encuentro con el mismo mensaje de error, cuando uso ajax para acceder a una página php (los archivos javascript y php están ubicados en el mismo servidor).
El motivo fue que especifiqué la dirección IP como el dominio en mi JavaScript. Esto hizo que el navegador creyera que la llamada al archivo php está en otro servidor.
Así que una solución fácil para deshacerse de este mensaje de error. a) verifique que javascript y el archivo php estén en el mismo servidor b) asegúrese de que la url (en particular el dominio) en su JavaScript (por ejemplo, http://www.smartana.co.uk/myJavaScript.js ) ajax refleja la url de su servidor (por ejemplo, http://www.smartana.co.uk/myServer.php ).
No relacionado con esta pregunta en particular, pero para cualquiera en esta situación utilizando jQuery ... Este error también se produce si intenta realizar una solicitud JSONP utilizando jQuery y omite el parámetro de devolución de llamada mágica: callback=?
Para el desarrollo local, puede utilizar una herramienta para modificar los encabezados de respuesta HTTP. Por ejemplo, Charles puede hacer esto con la herramienta de reescritura incluida: Herramienta de reescritura
Solo agregue una nueva regla para el dominio / ubicación de destino con:
Type: Add Header
Where: Response
Replace
Name: Access-Control-Allow-Origin
Value: *
Replace All
Si está utilizando Chrome, una solución alternativa simple (solo para fines de desarrollo) es usar la opción --disable-web-security
.
Si está utilizando Google Chrome como navegador, puede agregar la extensión CORS y activarla, resolverá el problema del agujero sin tener que cambiar nada en su código.
Si se encuentra en un entorno Java, una posible solución podría ser crear un servlet que llame a los servicios web para su javascript. algo como el siguiente código en el método GET (Your-choice) ...
JsonElement jelement;
JsonArray jarray;
try {
URL url = new URL("http://rest."YOUR URL"#ba0482");
URLConnection connection = url.openConnection();
connection.setDoInput(true);
InputStream inStream = connection.getInputStream();
BufferedReader input = new BufferedReader(new InputStreamReader(inStream));
jelement = new JsonParser().parse(input);
jarray = jelement.getAsJsonArray();
response.setContentType("application/json");
PrintWriter out = response.getWriter();
out.print(jarray);
out.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
¡Ahora en el javascript simplemente especifique la url como el nombre del servlet!
Si usa Apache, esto funciona: ponga esto en / cree un archivo .htaccess en su raíz pública, y agregue cualquier otra extensión de archivo que pueda necesitar.
<FilesMatch "/.(ttf|otf|eot|woff|jpg|png|jpeg|gif|js|json|html|css)$">
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
</IfModule>
</FilesMatch>
XMLHttpRequest no le permitirá acceder a localhost:8080
debido a la "misma política de origen".
Puede permitir solicitudes de navegadores modernos agregando un encabezado a su respuesta en localhost:8080
:
Access-Control-Allow-Origin: *
Puede hacerlo agregando directivas a su servidor HTTP o agregando encabezados a través del código del lado del servidor (PHP, Ruby, ...).
Lea más sobre las solicitudes de Ajax de origen cruzado en https://developer.mozilla.org/en/http_access_control