我们使用Ruby 2.1.2和Rails 3.2.14.在我们将网站移至SSL后,我们在浏览器控制台上收到了关于ajax请求的以下错误.
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://sitename.com/xxx/xx?id=xx. This can be fixed by moving the resource to the same domain or enabling CORS.
Run Code Online (Sandbox Code Playgroud)
我们尝试过添加
headers: { 'Access-Control-Allow-Origin': '*' },
crossDomain: true
Run Code Online (Sandbox Code Playgroud)
但没有效果.这是ajax代码:
$.ajax({
type: "GET",
data: {id: id},
url: path+id,
headers: { 'Access-Control-Allow-Origin': '*' },
crossDomain: true,
success: function(data) { }
});
Run Code Online (Sandbox Code Playgroud)
还有其他建议吗?
Go的新手。.显然仍在学习语法和基础知识..但是我确实有一个特定的目标。
我正在尝试在:8080上建立一个简单的服务器,该服务器可以响应HTTP和socket.io(通过/socket.io/
url),特别是使用CORS。
我的代码:
package main
import (
"log"
"net/http"
"github.com/rs/cors"
"github.com/googollee/go-socket.io"
)
func SayHelloWorld(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello, World!"))
}
func main() {
c := cors.New(cors.Options{
AllowedOrigins: []string{"*"},
AllowCredentials: true,
})
server, err := socketio.NewServer(nil)
if err != nil {
log.Fatal(err)
}
server.On("connection", func(so socketio.Socket) {
log.Println("on connection")
so.Join("chat")
so.On("chat message", func(msg string) {
log.Println("emit:", so.Emit("chat message", msg))
so.BroadcastTo("chat", "chat message", msg)
})
so.On("disconnection", func() {
log.Println("on disconnect")
})
})
server.On("error", func(so socketio.Socket, err error) {
log.Println("error:", …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用以下类为我的java servlet启用CORS:
package com.prosperity.mobile.core;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CORSFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
public void doFilter(ServletRequest servletRequest,
ServletResponse servletResponse, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
// System.out.println("Request: " + request.getMethod());
HttpServletResponse resp = (HttpServletResponse) servletResponse;
resp.addHeader("Access-Control-Allow-Origin", "*");
resp.addHeader("Access-Control-Allow-Methods", "GET,POST");
resp.addHeader("Access-Control-Allow-Headers",
"Origin, X-Requested-With, Content-Type, Accept");
// Just ACCEPT and REPLY OK if …
Run Code Online (Sandbox Code Playgroud) 为了在我的Web应用程序中获取Spotify API的访问令牌(由他们的Web授权流程指定),我了解到我必须提出POST
请求.但是,当我这样做时,我得到了XMLHttpRequest
500 Error
由于跨源问题.
我已经想出了如何允许CORS GET
请求,但我不知道如何对POST
请求执行相同的操作.此链接提供配置提示,但它保留实际路由GET
和POST
空白.
这是我的Express.js服务器的相关代码:
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
app.use(express.static(__dirname + '/public')); // looks in public directory, not root directory (protects files)
app.get('/', function(req, res) {
// res.header("Access-Control-Allow-Origin", "*");
// res.header("Access-Control-Allow-Headers", "X-Requested-With");
res.send(__dirname + '\\index.html')
});
app.post('/', function(req, res) {
res.send(req.body.spotify);
});
Run Code Online (Sandbox Code Playgroud)
(spotify
是spotify-web-api-js
节点模块).
我以前曾尝试将确切的代码复制app.get
到app.post
,但这导致服务器崩溃.
这是我程序的JavaScript文件中的一些代码,它打算POST
在用户单击一个按钮后发送请求,该按钮将它们带到Spotify的授权路径的开头并批准登录:
$('#spotify').on('click', …
Run Code Online (Sandbox Code Playgroud) 我面临与跨域PUT调用相关的问题,我已经允许来自服务器端的Access-Control-Allow-Origin仍然无法正常工作.
@PUT
@Path("/getresponse/{caller}")
@Produces({MediaType.APPLICATION_JSON})
public Response getResponseData(@PathParam("caller") String caller ,@QueryParam("ticket")String ticket ,@FormParam("formParam") String data){
ResponseBuilder resp;
System.out.println("name of caller is -> "+ caller);
System.out.println("query param ticket -> "+ ticket);
System.out.println("form param data->" + data);
Employee emp = new Employee();
emp.setAge(23);
emp.setName("data");
Gson gson = new Gson();
String responseJson = gson.toJson(emp);
resp=Response.ok(responseJson);//header("Access-Control-Allow-Origin", "*")
resp.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Methods", "GET, POST, PUT, OPTIONS");
return resp.build();
}
Run Code Online (Sandbox Code Playgroud)
每当我从jquery ajax方法调用它时,它表示 对预检请求的响应没有通过访问控制检查:请求的资源上没有'Access-Control-Allow-Origin'标头
我有相同的上述服务的副本,但有POST签名,当我调用该服务时,它调用服务没有任何问题邮政服务代码是
@POST
@Path("/getresponses/{caller}")
@Produces({MediaType.APPLICATION_JSON})
public Response getResponseData1(@PathParam("caller") String caller ,@QueryParam("ticket")String ticket …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Bootstrap 3.3.6提供的glyphicons,但Chrome阻止了对它们的访问,并显示以下错误消息:
来自" http:// [:: 1] "的字体已被跨源资源共享策略阻止加载:请求的资源上没有"Access-Control-Allow-Origin"标头.原产地" :HTTP //本地主机,因此"是不允许访问.
这是我的.htaccess
:
<IfModule authz_core_module>
Require all denied
</IfModule>
<IfModule !authz_core_module>
Deny from all
</IfModule>
<FilesMatch "\.(ttf|otf|eot|woff)$">
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
</IfModule>
</FilesMatch>
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?我编辑错了.htaccess
吗?
我也尝试header("Access-Control-Allow-Origin: *");
在我的header.php
文件开头添加,但这也不起作用.我没有想法.
文件夹结构如下:
application
controller
model
view
header.php
index.php
footer.php
.htaccess
system
assets
css
fonts
images
js
Run Code Online (Sandbox Code Playgroud) 我正在从localhost:8000提供Angular应用程序,并从localhost:3000提供节点后端。我有一个$ http.get在页面加载和前端日志上运行
Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource.
上面有多个SO帖子,但是它们都说“不要直接在浏览器中打开文件”,我将全部服务于他们,而不是打开它们。
我的后端已配置为使用CORS,并且在通过邮递员访问它们时,路由有效。
前端:
后端:
错误:
该host + '/'
仅仅是一个常数,引用“本地主机:3000”
在我的应用程序中,我包含了来自不同服务器/域的页面.为简单起见我将把我的主要应用Web应用的一种,另幅B.
某处我甲,用户已登录后,我将加载从页面乙通过使用CORS和JWT.在A中,我创建了一个传递给Ajax的编码令牌.Ajax在Header中添加了这个令牌("Authorization" = bearer + encoded token).
B然后使用此令牌解码并获取它所属的usersId和组,并确定用户是否有权访问该资源.此外,Web B中还有一个Access-Control-Allow-Origin = Web A设置,仅接受来自A的请求.
我的问题是关于CORS的安全部分和jwt的使用.在开发过程中,当使用Postman直接访问B中的资源时,我可以轻松绕过" Access-control-allow-origin ".只要我有正确的令牌,资源就会被送回来没有问题!我的意思是只需要一些潜在的黑客获取该编码的字符串,他们就可以轻松地使用Postman查看资源.
在涉及安全部分时,下一步是什么,因为我完全迷失了!
希望我能清楚地解释这个问题.所有帮助都非常感谢
我知道这个主题似乎已经很多次回答了,但我真的不明白.
我的服务器A是使用Express和Nodejs自动生成的:
app.use(function (req, res, next) {
res.setHeader('Access-Control-Allow-Origin', 'http://localhost:3000');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
res.setHeader('Access-Control-Allow-Credentials', false);
next();
});
Run Code Online (Sandbox Code Playgroud)
在我的应用B中,对我的服务器API的GET请求有效
$http.get('http://localhost:9000/api/shows')
Run Code Online (Sandbox Code Playgroud)
但是有了PUT请求:
$http.put('http://localhost:9000/api/shows/1', object)
Run Code Online (Sandbox Code Playgroud)
我有以下错误:
XMLHttpRequest无法加载http:// localhost:9000/api/shows/1.请求的资源上不存在"Access-Control-Allow-Origin"标头.因此不允许来源' http:// localhost:3000 '访问.响应具有HTTP状态代码403.
我试着用:
$http({
method: "PUT",
url:'http://localhost:9000/api/shows/1',
headers: {
'Content-type': 'application/json'
},
data:object
});
Run Code Online (Sandbox Code Playgroud)
不工作,
我试着用:
res.header('Access-Control-Allow-Origin', '*');
Run Code Online (Sandbox Code Playgroud)
不工作,
我已经为chrome安装了*ExtensionAllow-Control-Allow-Origin:**并且没有做任何事情(只返回所有代码但只返回错误403(禁止)
我真的不知道为什么当它与GET一起使用时它不适用于PUT.
你有这个问题吗?谢谢!
更新:1浏览器中的结果: 用于GET
General:
Request URL:http://localhost:9000/api/shows/1
Request Method:OPTIONS
Status Code:200 OK
Request header: …
Run Code Online (Sandbox Code Playgroud) 我有这个问题,当我尝试使用XHR通过Facebook登录我的网站上的用户时,我的请求被阻止了,但是,如果我复制XHR请求的URL并将其粘贴到浏览器中,就可以登录。
因此,这是一个简单的示意图:
为什么XHR被阻止在浏览器可以访问的相同URL上?