You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Postman可正常运行的GET请求,生成的AJAX代码本地遭跨域拦截

解决AJAX跨域请求被拦截(Postman正常但浏览器报错)

我来帮你拆解这个问题,以及对应的解决思路:

为什么Postman能正常运行,浏览器却报错?

核心原因是**浏览器的同源策略(Same Origin Policy)**限制:浏览器会阻止前端脚本发起跨域HTTP请求,只有当目标服务器返回了符合要求的CORS(跨域资源共享)响应头时,才会允许页面读取响应内容。

而Postman是独立的API测试工具,它不受浏览器同源策略的约束,所以可以直接发送请求并获取结果,不需要服务器返回CORS相关头信息。你看到的错误提示 Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource... (Reason: CORS header 'Access-Control-Allow-Origin' missing) 已经明确指出问题:bibsonomy.org 服务器没有返回 Access-Control-Allow-Origin 响应头,导致浏览器拦截了请求响应。

可行的解决方案

根据你的场景,有几种不同的解决路径:

方案1:让目标服务器配置CORS(若你有权限操作)

如果你能控制 bibsonomy.org 的服务器配置,需要在API响应中添加以下关键头信息:

  • Access-Control-Allow-Origin: 你的本地页面域名(比如 http://localhost:8080,更安全)或者 *(允许所有域名,生产环境不建议,尤其是你的请求带了Authorization认证头)
  • 由于你的请求包含 Authorization 头,浏览器会先发送一次OPTIONS预检请求,服务器还需要处理这个请求并返回:
    Access-Control-Allow-Headers: Authorization
    Access-Control-Allow-Methods: GET

方案2:搭建本地代理服务器(无法修改目标服务器时)

你可以在本地搭建一个简单的代理服务器,让前端页面请求这个本地代理,再由代理转发请求到 bibsonomy.org。这样前端和代理是同源的,就不会触发跨域限制。

举个Node.js代理的简单例子:

  1. 新建 proxy.js 文件:
const express = require('express');
const { createProxyMiddleware } = require('http-proxy-middleware');

const app = express();

app.use('/api', createProxyMiddleware({
  target: 'http://www.bibsonomy.org',
  changeOrigin: true,
  headers: {
    'Authorization': 'Basic key', // 把你的认证信息放在这里
    'Cache-Control': 'no-cache'
  }
}));

app.listen(3000, () => {
  console.log('代理服务器运行在 http://localhost:3000');
});
  1. 安装依赖:
npm install express http-proxy-middleware
  1. 启动代理服务器:
node proxy.js
  1. 修改前端AJAX代码,请求本地代理:
var settings = {
  "async": true,
  "crossDomain": true,
  "url": "http://localhost:3000/api/posts?resourcetype=bookmark&group=ukp&format=json",
  "method": "GET",
  "headers": {
    "Cache-Control": "no-cache"
    // 认证信息已在代理中配置,这里无需重复添加
  }
}

$.ajax(settings).done(function (response) {
  console.log(response);
});

方案3:检查请求协议一致性

注意到你的代码里URL用的是 http://www.bibsonomy.org,但控制台错误显示的是 https://www.bibsonomy.org,可能存在协议跳转问题。可以尝试把代码里的URL改成HTTPS协议,看看是否能辅助解决部分问题(不过核心矛盾还是CORS)。


内容的提问来源于stack exchange,提问作者Andy Schneider

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:08:01