2011-08-10 14 views
18

我一直在阅读关于Access-Control-Allow-Origin,因为它似乎有效地允许跨域请求,因为我可以访问外部网站。我的问题是如何使用Access-Control-Allow-Origin来允许跨域请求。我想这(不笑)(顺便说一下我想要的是一个单一的数字,1或0退还)如何使用Access-Control-Allow-Origin?它只是进入html头标签之间?

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

我是关闭?谢谢你的帮助。如果有更简单的方法来做一个简单的跨域请求,请告诉我。

回答

8

这是一个HTTP标头。您可以配置您的Web服务器或Web应用程序来理想地发送此标题。也许在htaccess或PHP。

或者您可能能够使用

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

我不知道这是否会工作。并非所有HTTP标头都可以直接在HTML中配置。

这可以作为许多HTTP头的替代,但请参阅下面的@EricLaw的评论。这个特殊的标题是不同的。

买者

这个答案是严格有关如何设置标头。我不知道任何有关允许跨域请求的信息。

关于HTTP头

每个请求和响应了头。浏览器将其发送到web服务器

GET /index.htm HTTP/1.1 

然后,报头

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

然后,服务器发送一个响应

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

附加报头可以被配置成例如Cache-Control,这完全取决于你的语言(PHP,CGI,Java,htaccess)和web服务器(Apache等)。

+6

它*必须*在HTTP头砍你的浏览器,并允许无限制CORS。在体内支持它将是一个安全漏洞。 – EricLaw

+0

很高兴你提到它。我真的不知道这个跨域的东西是如何工作的。我会编辑我的答案。 –

+0

感谢您的回答。现在我只是想找到一个让我更改http头的网络主机。 – davis

15

有3种方法,以允许交叉域原点(不含jsonp):

1)直接使用诸如PHP一个模板语言设置在页标头。请记住,在标题之前不能有HTML,否则它会失败。

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

2)修改服务器配置文件(apache.conf)并添加此行。请注意,"*"代表全部允许。某些系统可能还需要凭证集。一般来说允许所有的访问是一个安全隐患,应该避免:

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

3)允许在Apache Web服务器的多个域以下内容添加到您的配置文件

<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)开发利用只有使用Chrome Allow-Control-Allow-Origin extension

+0

地方发展的最简单方法是只需添加CORS扩展 – kelevra88

+13

不经意间创建测试运行的代码最简单的方法,但在生产中添加扩展名神秘失败。 ;) – dannysauer

+0

你能提供,请有关如何使用这个扩展的例子吗?我没有得到它的工作,似乎没有任何文档。虽然我已经设置了在“截获网址或网址格式”的远程地址设置,我仍然可以通过开发工具解释说,访问看到的消息已被封锁,由于CORS。还有一个“Access-Control-Expose-Headers”设置,我不知道是什么原因。我不知道这是我的错,还是扩展程序不再工作。 – Pere

相关问题