当前位置: 首页 > 知识库问答 >
问题:

"cors头'Access-Control-容许-起源'丢失"拒绝请求,即使起源是允许的

程胤运
2023-03-14

我想从angular应用程序向服务器发送POST请求(用spring boot编写)。请求被拒绝,消息为“cors header'access control allow origin'missing”。

我启用了我的角度应用程序“http://localhost:4200”的起源,就像我为我的其他RestController(工作)所做的那样。据我所知,唯一的区别是我在我不工作的控制器中处理POST请求。

@RestController
@CrossOrigin(origins = "http://localhost:4200")
public class Controller {

    @Autowired
    private ReqRepository reqRepository;

    @PostMapping("/reqs")
    public Req saveReq (@Valid @RequestBody Req req) {
        return reqRepository.save(req);
    }
}
@Repository
public interface ReqRepository extends JpaRepository<Req, Long> {
}
@Injectable()
export class ReqService {

  private httpOptions = {
    headers: new HttpHeaders({
      'Access-Control-Allow-Origin': '*',
      'Content-Type': 'application/json'
    })
};

  constructor(private http: HttpClient) {}

  sendReq(req: Req): Observable<Req> {
    return this.http.post<Req>('http://localhost:8080/reqs', req, this.httpOptions);
  }
}

我以为允许来源就足够了,所以请求是可能的,但它被阻止了。似乎我缺少了一些支持POST请求的功能。

我进一步测试了控制器,它可以处理GET请求。我只是改变了方法,所以问题似乎在于POST请求。下面是带有GET测试endpoint而不是POSTendpoint的控制器

@RestController
@CrossOrigin(origins = "http://localhost:4200")
public class Controller {

    @Autowired
    private ReqRepository reqRepository;

    @GetMapping("/reqs")
    public Page<Req> testCall (Pageable pageable) {
        System.out.println("Geeting request");
        return reqRepository.findAll(pageable);
    }
}

共有2个答案

凌远
2023-03-14

问题是我的Spring Security配置。我不得不禁用csrf,因为它是默认启用的。我从这篇帖子中得到了解决方案:如何解决Spring Boot post请求中的403错误

我的解决方案如下所示:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    //Override basic security settings so no login page is needed to access the RestEndpoints
    @Override
    protected void configure(HttpSecurity security) throws Exception
    {
        security.httpBasic().disable();
        security.csrf().disable();
    }
}
韩楷
2023-03-14

很高兴您的请求现在正在工作。请注意'Access-Control-允许-起源': '*'是从服务器发送的标头。这里您试图将标头从角发送到服务器,这将不起作用

也请更改@CrossOrigin(origins=”http://localhost:4200“

@CrossOrigin(origins=”http://localhost:4200“,methods=“GET,POST,PUT,DELETE,ORIGIN”)并查看它是否有效

 类似资料:
  • 我进一步测试了控制器,它适用于GET请求。我只是更改了方法,所以问题似乎出在POST请求上。下面用GET测试endpoint而不是POSTendpointist控制器

  • 问题内容: XMLHttpRequest cannot load http://localhost:8080/api/test. Origin http://localhost:3000 is not allowed by Access-Control-Allow-Origin. 我阅读了有关跨域Ajax请求的信息,并了解了潜在的安全问题。就我而言,有2台服务器在本地运行,并且希望在测试期间启用跨

  • 问题内容: 我正在使用Sencha Touch 2应用程序(包装在PhoneGap中)到远程PHP服务器。 服务器的响应如下: XMLHttpRequest无法加载http://nqatalog.negroesquisso.pt/login.php。原产地不被访问控制允许来源允许的。 我该如何解决这个问题? 问题答案: 不久前,我写了一篇有关此问题的文章Cross Domain AJAX 。 如果

  • 问题内容: 我正在Ajax.request使用Sencha Touch 2应用程序(包装在PhoneGap中)到远程PHP服务器。 服务器的响应如下: XMLHttpRequest无法加载http://nqatalog.negroesquisso.pt/login.php。原产地不被访问控制允许来源允许的。 我该如何解决这个问题? 问题答案: 如果您控制响应服务器,最简单的方法是为以下项添加响应标

  • 我在http://localhost:3000/eData中有数据 当我运行应用程序时,在控制台中,我会收到错误交叉起源请求阻塞:同一起源策略不允许读取http://localhost:3000/edata上的远程资源。(原因:CORS标头“Access-Control-Allow-Origin”丢失)。 如何修复错误.以及如何从其他主机获取数据...请帮助我。

  • 我使用axios调用api和承载令牌的方式进行授权,我的代码: 在用户存储库中。js时,将导入存储库并通过以下方式调用api: 然后错误是"未授权",但当我更新头: 错误是:在'http://example.com/users“起源”http://localhost:8080'已被CORS策略阻止:飞行前响应中的访问控制允许标头不允许请求标头字段访问控制允许来源。