用户必须启用CORS如何防止这种情况。

时间:2017-04-22 23:30:31

标签: http elasticsearch cors

我创建了一个单页Web应用程序,它利用了elasticsearch并要求用户启用了CORS,我想知道如何使Web应用程序不要求用户启用了CORS。

1 个答案:

答案 0 :(得分:0)

每个当前浏览器强制进行CORS验证,并且不能在单个网站的级别上禁用它们。

您需要添加require(dplyr) data1 <- as.tbl(iris) data2 <- iris %>% filter(!(Sepal.Width >= 2 * Petal.Length)) write.table(data2, file='newData.txt',row.names=FALSE) data3 <- read.table('newData.txt',header=TRUE, sep=' ') identical(data2,data3) data3 %>% summarize(nobs=n(), speciesversicolor=n_distinct(Species)) 标题,通知您的浏览器可以建立安全连接。

<强> 1。如果您直接与ElasticSearch建立联系:

您需要修改Access-Control-*文件。将以下密钥添加到配置文件中并重新启动服务器:

elasticsearch.yml

这些密钥可以向客户端发送正确的标头,并允许浏览器建立连接。如果您在localhost之外运行服务器,请记住将http.cors.enabled: true http.cors.allow-origin: /https?:\/\/localhost(:[0-9]+)?/ 正则表达式更改为对您的域有效。

您可以在ElasticSearch documentation

中找到更多详细信息和其他设置

<强> 2。如果您使用反向代理(例如Nginx)

您还可以在反向代理级别添加所需的标头。与以前的方法不同,在这种情况下,您需要自己设置所有必需的标头以实现连接。

用作反向代理的Nginx服务器的基本配置:

http.cors.allow-origin

如果您需要(例如用于开发目的)在浏览器上禁用CORS验证,您也可以执行此操作。但是,在您这样做之前,请注意所有风险。

在Google Chrome中禁用CORS检查:

您需要使用以下参数运行Google Chrome:server { listen 80; server_name elasticsearch.example.com; location / { proxy_pass http://127.0.0.1:9200; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; proxy_hide_header 'Access-Control-Allow-Origin'; proxy_add_header 'Access-Control-Allow-Origin' 'http://example.com'; proxy_add_header 'Access-Control-Allow-Methods' 'OPTIONS, HEAD, GET, POST, PUT, DELETE'; proxy_add_header 'Access-Control-Allow-Headers' 'X-Requested-With, Content-Type, Content-Length'; if ($request_method = 'OPTIONS') { return 200; } } }

Windows和Linux用户

--disable-web-security --user-data-dir

Mac OS用户

$ [Chrome executable path] --disable-web-security --user-data-dir

在Safari中禁用CORS检查:

  1. 启用Safari开发人员菜单

    转到 Safari - &gt; 偏好设置 - &gt; 高级并在菜单栏中选择显示开发人员菜单

  2. 在菜单栏中打开“开发人员”菜单

  3. 选择禁用跨源限制

  4. 在Firefox中禁用CORS检查

    检查this answer on Stack Overflow