2011-08-10 5 views
18

He estado leyendo acerca de Access-Control-Allow-Origin porque parece efectivo para permitir solicitudes de dominios cruzados, ya que tengo acceso al sitio externo. Mi pregunta es cómo uso Access-Control-Allow-Origin para permitir solicitudes de dominios cruzados. He intentado esto (no se rían) (por cierto todo lo que quiero es un solo número, 1 o 0 a devolver)¿Cómo uso Access-Control-Allow-Origin? ¿Simplemente va entre las etiquetas de cabeza html?

<html> 
<head> 
Access-Control-Allow-Origin: * 
</head> 
<body> 
1 
</body> 
</html> 

Estoy cerca? Gracias por tu ayuda. Si hay una manera más fácil de hacer una solicitud simple entre dominios, házmelo saber.

Respuesta

8

Eso es un encabezado HTTP. Debería configurar su servidor web o aplicación web para enviar este encabezado de manera ideal. Quizás en htaccess o PHP.

Alternativamente, usted podría ser capaz de utilizar

<head>...<meta http-equiv="Access-Control-Allow-Origin" content="*">...</head> 

No sé si eso fuera a trabajar. No todos los encabezados HTTP se pueden configurar directamente en el HTML.

Esto funciona como una alternativa a muchos encabezados HTTP, pero vea el comentario de @EricLaw a continuación. Este encabezado particular es diferente.

Advertencia

Esta respuesta es estrictamente acerca de cómo establecer cabeceras. No sé nada acerca de permitir solicitudes de dominios cruzados.

sobre los encabezados HTTP

Cada petición y la respuesta tiene encabezados. El navegador envía esto al servidor web

GET /index.htm HTTP/1.1 

A continuación, las cabeceras

Host: www.example.com 
User-Agent: (Browser/OS name and version information) 
.. Additional headers indicating supported compression types and content types and other info 

A continuación, el servidor envía una respuesta

Content-type: text/html 
Content-length: (number of bytes in file (optional)) 
Date: (server clock) 
Server: (Webserver name and version information) 

cabeceras adicionales se pueden configurar por ejemplo Cache-Control, todo depende de su idioma (PHP, CGI, Java, htaccess) y servidor web (Apache, etc.).

+6

* Debe * estar en el encabezado HTTP. Respaldarlo en el cuerpo sería un error de seguridad. – EricLaw

+0

Me alegra que lo haya mencionado. Realmente no sé cómo funciona este tema entre dominios. Editaré mi respuesta. –

+0

Gracias por la respuesta. Ahora solo estoy tratando de encontrar un servidor web que nos permita cambiar los encabezados http. – davis

15

Hay 3 maneras de permitir origen dominios (excluyendo jsonp):

1) Coloque el encabezado de la página directamente usando un lenguaje de plantillas como PHP. Tenga en cuenta que no puede haber HTML antes de su encabezado o fallará.

<?php header("Access-Control-Allow-Origin: http://example.com"); ?> 

2) Modificar el archivo de configuración del servidor (apache.conf) y añadir esta línea. Tenga en cuenta que "*" representa permitir todo. Algunos sistemas también pueden necesitar el conjunto de credenciales.En general permite todo el acceso es un riesgo para la seguridad y se debe evitar:

Header set Access-Control-Allow-Origin "*" 
Header set Access-Control-Allow-Credentials true 

3) para permitir que varios dominios en servidores web Apache añadir lo siguiente a su archivo de configuración

<IfModule mod_headers.c> 
    SetEnvIf Origin "http(s)?://(www\.)?(example.org|example.com)$" AccessControlAllowOrigin=$0$1 
    Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin 
    Header set Access-Control-Allow-Credentials true 
</IfModule> 

4) Para el uso de desarrollo solo piratear su navegador y permitir CORS ilimitados usando el Allow-Control-Allow-Origin extension de Chrome

+0

La forma más fácil para el desarrollo local es simplemente agregar la extensión cors – kelevra88

+13

La forma más fácil de crear inadvertidamente el código que funciona en la prueba pero falla misteriosamente en la producción es agregar la extensión. ;) – dannysauer

+0

¿Podría proporcionar un ejemplo sobre cómo usar esta extensión? No lo hago funcionar y no parece haber ningún documento. Aunque configuré la dirección remota en la configuración de "URL interceptadas o patrones de URL", sigo viendo mensajes a través de Dev Tools que explican que el acceso se ha bloqueado debido a CORS. Y hay una configuración de "Access-Control-Expose-Headers" para la que no sé para qué sirve. No sé si es mi culpa o si las extensiones ya no funcionan. – Pere

Cuestiones relacionadas