如何在 Apache 和 Nginx 中启用 CORS?
使用 CORS 标头限制或允许站点之间的资源共享。
所有现代浏览器都支持跨域资源共享 (CORS) 标头。
可以用 corns 吗 ?有关主要浏览器对 cors 功能的支持的数据,取自 caniuse.com。
默认情况下,浏览器通过脚本限制跨域HTTP请求。而且……,CORS可以方便地在其他 Web 应用程序中重用通用应用程序资源。一旦正确添加,它就会告诉浏览器从不同的源加载应用程序。
服务器可以发送六种类型的 CORS 标头。让我们来探索一下它们。
访问控制 – 授权来源
最流行的是告诉浏览器从授权来源加载资源的方法。它支持通配符(*),允许任何域加载资源。但是,可以选择允许特定来源。
阿帕奇
添加以下内容httpd.conf或使用的任何其他配置文件。
Header set Access-Control-Allow-Origin "*"
重启Apache进行测试。您应该在响应标头中看到它们。
并且,要授权特定来源(例如:https://gf.dev),您可以使用以下命令。
Header set Access-Control-Allow-Origin "https://gf.dev"
nginx
以下是允许来源 https: //geekflare . dev 的示例。将以下内容添加到正在使用的serveur块文件nginx.conf或配置文件中。
add_header Access-Control-Allow-Origin "https://geekflare.dev" ;
访问控制允许方法
浏览器可以启动一种或多种HTTP方法来访问资源。例如:- 获取、放置、选项、放置、删除、发布
阿帕奇
仅允许 GET 和 POST。
En-tête ajouter Access-Control-Allow-Methods "GET, POST"
nginx
假设您需要添加DELETE和OPTIONS方法,那么您可以添加以下内容。
add_header Access-Control-Allow-Methods "DELETE, OPTIONS" ;
重新启动后,您应该在响应标头中看到它们。
访问控制 – 允许标头
以下标头位于安全列表中,这意味着您无需添加。它们应该默认工作。
内容类型
接受
内容语言
语言接受
但是,如果您需要添加自定义的,您可以这样做。它支持一个或多个标头。
阿帕奇
假设您想要允许X-Custom-Header和X-Powered-By标头。
En-tête toujours défini Access-Control-Allow-Headers "X-Custom-Header, X-Powered-By"
重新启动后,您应该在响应标头中看到结果。
nginx
添加 X-Customer-Software 和 X-My-Custom 标头的示例。
add_header Access-Control-Allow-Headers "X-Custom-Software, X-My-Custom" ;
访问控制暴露标头
以下标头已经是安全列表的一部分。所以如果你想显示它们就不需要添加它们。
到期日
杂注
缓存控制
最后修改
内容语言
内容类型
但如果您需要安全列表中的项目之外的其他项目,您可以按如下方式允许它们。
阿帕奇
使用通配符公开所有标头。
En-tête toujours défini Access-Control-Expose-Headers "*"
注意:通配符不一定公开Autorisation,如果您需要它,则必须明确提及它。
En-tête toujours défini Access-Control-Expose-Headers "Authorization, *"
结果应该是这样的。
nginx
如果你想暴露Origine标题。
add_header Access-Control-Expose-Headers "Origin" ;
访问控制最大年龄
您知道什么数据 访问控制 – 允许标头 可以访问控制允许方法被缓存吗?它们在 Firefox 中最多可缓存 24 小时,在 Chrome (76+) 中最多可缓存 2 小时。
要禁用缓存,您可以保留以下值-1
阿帕奇
缓存15分钟。
L'en-tête définit toujours Access-Control-Max-Age "900".
如您所见,该值以秒为单位表示。
nginx
缓存一小时。
add_header Access-Control-Max-Age "3600" ;
添加完成后,重启Nginx即可看到结果。
访问控制 – 允许凭证
这里只能设置一个选项:true。Le présent如果您想公开 cookie、TLS 证书、权限等凭据,则允许。
阿帕奇
L'en-tête définit toujours Access-Control-Allow-Credentials "true" (contrôle d'accès-autorisation des informations d'identification)
或者
The header always sets Access-Control-Allow-Credentials "true"
nginx
add_header Access-Control-Allow-Credentials "true" ;
和结果。
检查结果
添加必要的标头后,您可以使用浏览器的内置开发人员工具或在线 HTTP 标头检查器开发人员工具。
结论
我希望上述信息可以帮助您在 Apache HTTP 和 Nginx Web 服务器中实现 CORS 标头,以获得更好的安全性。您可能还对OWASP 推荐的安全标头应用程序感兴趣。