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

ReactJS中使用Fetch请求API遭遇CORB跨域拦截问题求助

Fixing Cross-Origin Read Blocking (CORB) for Your React Fetch Request

Hey there, let's work through this CORB issue you're hitting. First, let's clear up a common mistake you made, then break down the actual fixes.

First: You're Using the Wrong Header!

The Access-Control-Allow-Origin header is a response header — it needs to be sent by the API server, not included in your frontend request. Adding it to your fetch headers does nothing, because the browser ignores this header when it's sent from the client. That's why your request still gets blocked.

Why CORB Is Blocking Your Response

CORB is a browser security feature that blocks cross-origin responses even if they return a 200 OK status. This happens when:

  1. The response has a MIME type the browser considers "sensitive" (like application/json here)
  2. The API server doesn't send the required CORS response headers to allow your frontend domain to access the data

How to Fix It

1. Configure the API Server to Send CORS Headers (Best Solution)

This is the root fix. You need to update the backend of your API to include CORS response headers. Here are examples for common backend stacks:

Node.js/Express Example

Use the cors middleware, or manually set headers:

// Using cors middleware (simpler)
const cors = require('cors');
const express = require('express');
const app = express();

// Allow your frontend domain (replace with your actual frontend URL, e.g., http://localhost:3000)
app.use(cors({ origin: 'http://your-frontend-domain.com' }));

// OR manually set headers if you don't want to use the middleware
app.use((req, res, next) => {
  res.setHeader('Access-Control-Allow-Origin', 'http://your-frontend-domain.com');
  res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE');
  res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
  next();
});

Other Backends

  • Java Spring: Use the @CrossOrigin annotation on your controller or configure global CORS settings.
  • Python Django: Install the django-cors-headers package and add it to your middleware.
  • PHP: Add headers at the top of your API script:
    header("Access-Control-Allow-Origin: http://your-frontend-domain.com");
    header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE");
    

⚠️ Note: In production, avoid using * as the origin (which allows all domains) — specify your exact frontend domain for security.

2. Use a Proxy Server (If You Can't Modify the API)

If you don't have access to the API backend, set up a proxy in your React project to forward requests. This makes the browser think it's making a same-origin request.

Step 1: Install the proxy middleware

npm install http-proxy-middleware --save-dev

Step 2: Create src/setupProxy.js

const { createProxyMiddleware } = require('http-proxy-middleware');

module.exports = function(app) {
  app.use(
    '/api',
    createProxyMiddleware({
      target: 'http://xxx.xxx.xxx.xxx:8081', // Your API URL
      changeOrigin: true,
    })
  );
};

Step 3: Update Your Fetch Request

Now you can request the proxy endpoint instead of the direct API URL:

fetch('/api/category/popular')
  .then(res => {
    if (!res.ok) throw new Error(`HTTP error! Status: ${res.status}`);
    return res.json();
  })
  .then(data => console.log('Fetched data:', data))
  .catch(err => console.error('Fetch error:', err));

3. Verify the Fix

After making these changes, check your browser's Network tab:

  • Look for the Access-Control-Allow-Origin header in the API response.
  • If it's present and matches your frontend domain, CORB should no longer block the response.

内容的提问来源于stack exchange,提问作者Sagar Kodte

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:54:40