如何在Apache和Nginx中启用CORS?

本文概述

使用CORS标头限制或允许站点之间的资源共享。

所有现代浏览器均支持CORS(跨源资源共享)标头。

我可以使用cors吗?来自caniuse.com的跨主要浏览器的cors功能支持数据。

默认情况下, 浏览器通过脚本限制跨域HTTP请求。而且, CORS可以方便地在其他Web应用程序上重用公共应用程序资源。正确添加后, 它会指示浏览器从其他来源加载应用程序。

服务器可以发送六种流行的CORS标头。让我们来探索它们。

访问控制允许来源

它是最流行的一种, 它告诉浏览器在允许的来源上加载资源。它支持通配符(*), 因此任何域都可以加载资源。但是, 它确实具有允许特定来源的选项。

阿帕奇

在httpd.conf或任何其他正在使用的配置文件中添加以下内容。

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

重新启动Apache进行测试。你应该在响应标题中看到它们。

如何在Apache和Nginx中启用CORS?2

并且, 要允许来自特定来源(例如:https://gf.dev), 可以使用以下内容。

Header set Access-Control-Allow-Origin "https://gf.dev"

Nginx的

这是允许来源https://geekflare.dev的示例。在nginx.conf或使用中的配置文件的服务器块中添加以下内容。

add_header Access-Control-Allow-Origin "https://geekflare.dev";

访问控制允许方法

浏览器可以启动一个或多个HTTP方法来访问资源。例如:– GET, PUT, OPTIONS, PUT, DELETE, POST

阿帕奇

只允许GET和POST。

Header add Access-Control-Allow-Methods "GET, POST"

Nginx的

假设你需要添加DELETE和OPTIONS方法, 然后可以如下添加。

add_header Access-Control-Allow-Methods "DELETE, OPTIONS";

重新启动后, 你应该在响应标题中看到它们。

如何在Apache和Nginx中启用CORS?4

访问控制允许标题

以下标头位于安全列表中, 意味着你无需添加一个。默认情况下, 它应该工作。

  • 内容类型
  • 接受
  • 内容语言
  • 接受语言

但是, 如果你需要添加自定义标签, 则可以这样做。它支持一个或多个标头。

阿帕奇

假设你要允许X-Custom-Header和X-Powered-By标头。

Header always set Access-Control-Allow-Headers "X-Custom-Header, X-Powered-By"

重新启动后, 你应该在响应标题中看到结果。

如何在Apache和Nginx中启用CORS?6

Nginx的

添加X-Customer-Software和X-My-Custom标头的示例。

add_header Access-Control-Allow-Headers "X-Custom-Software, X-My-Custom";

访问控制公开标头

以下标头已经是安全列表。意味着, 如果要公开它们, 则无需添加。

  • 过期
  • 语用
  • 缓存控制
  • 上一次更改
  • 内容语言
  • 内容类型

但是, 如果你需要除安全列表以外的其他内容, 则可以按照以下说明进行操作。

阿帕奇

使用通配符公开所有标头。

Header always set Access-Control-Expose-Headers "*"

注意:通配符仍不会公开Authorization标头, 如果需要, 则需要明确提及。

Header always set Access-Control-Expose-Headers "Authorization, *"

结果应如下所示。

如何在Apache和Nginx中启用CORS?8

Nginx的

如果要公开Origin标头。

add_header Access-Control-Expose-Headers "Origin";

访问控制最大时间

你是否知道可以缓存Access-Control-Allow-Header和Access-Control-Allow-Methods头中的数据?在Firefox中最多可以缓存24小时, 在Chrome(76+)中最多可以缓存2小时。

要禁用缓存, 你可以将值保持为-1

阿帕奇

缓存15分钟。

Header always set Access-Control-Max-Age "900"

如你所见, 该值以秒为单位。

Nginx的

要缓存一小时。

add_header Access-Control-Max-Age "3600";

添加后, 重新启动Nginx以查看结果。

如何在Apache和Nginx中启用CORS?10

访问控制允许凭证

在这里只能设置一个选项-正确。这是为了允许你公开凭据, 例如Cookie, TLS证书, 授权。

阿帕奇

Header always set Access-Control-Allow-Credentials "true"

Nginx的

add_header Access-Control-Allow-Credentials "true";

和结果。

如何在Apache和Nginx中启用CORS?12

验证结果

添加必要的标头后, 你可以使用浏览器内置的开发人员工具或在线HTTP标头检查器。

如何在Apache和Nginx中启用CORS?14

总结

我希望以上内容可以帮助你在Apache HTTP和Nginx Web服务器中实现CORS标头, 以提高安全性。你可能还对应用OWASP建议的安全标头感兴趣。

微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?