Angular,HTTP Get正常运行,Post收到CORS错误

时间:2019-07-10 06:10:04

标签: javascript angular rest cors csrf

设置

我有一个Angular应用程序在JSP应用程序的iframe中运行。 JSP应用程序是旧的,需要保留。 JSP和Angular都调用相同的REST服务。 JSP应用程序执行登录并接收会话cookie。由于Angular应用程序嵌入在SAME tomcat服务器上的JSP应用程序中,因此将传输cookie(至少我理解的是)。

tomcat
├── webapps
│   ├── jspapp
│   │   ├── ...
│   ├── angularapp
│   │   ├── ...

获取代码

... build params ...
return http.get(url,
  { params: params }).pipe(
    map(
      (response: Response) => {
        ... handle response ...
        return data;
      },
      (error: any) => {
        console.log(error);
      }
    )
  );

获取标题

GET http://severname:8080/jsprest/url/to/rest/service?param=value HTTP/1.1
Host: severname:8080
Connection: keep-alive
Accept: application/json, text/plain, */*
User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36
Referer: http://severname:8080/angular/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Cookie: JSESSIONID=UNIQUEID; xcp-locale=en_US; x-csrf-token=SOMETOKEN

POST代码

... build body ...
return http.post(url, body, 
  { headers: { 'Accept': ['application/json', 'text/plain', '*/*'], 'Content-Type': 'application/json' } });

POST标头

POST  http://severname:8080/jsprest/url/to/rest/service HTTP/1.1
Host: severname:8080
Connection: keep-alive
Content-Length: 158
Accept: application/json,text/plain,*/*
Origin: http://severname:8080
User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36
Content-Type: application/json
Referer: http://severname:8080/angular/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Cookie: JSESSIONID=UNIQUEID; xcp-locale=en_US; x-csrf-token=SOMETOKEN

{"body":"data","foo":"bar"}

错误

浏览器控制台中,我收到以下错误消息,

  

403:禁止访问指定资源的错误。

Tomcat 中,出现以下错误,

  

cookies /请求标头中的CSRF令牌为空或值不匹配

问题

我已验证GET和POST之间的jessionid和csrf令牌相同。我在这里误解了一些基本知识吗?如果我要尝试的方法不是解决此问题的最佳方法。什么是? JSP应用程序必须存在,因为它提供了所需的功能。Angular能够以JSP应用程序无法提供的方式来显示/交互数据。

1 个答案:

答案 0 :(得分:0)

  • 产生CORS错误的原因-

    1. 浏览器无法理解应该使用哪个服务器发送请求 从网络到后端。因为它们是为 相同的应用,首先是您的本地角度服务器,即本地主机& 其他是您的后端服务器,它是tomcat或其他,因此由于服务器浏览器中的冲突而无法理解 服务器打该请求,因此发生CORS错误。

    2. 您的URL中的拼写错误或URL的任何部分缺失。

  • 预防或解决方案-

    1. 允许所有请求(例如GET,POST,DELETE, PUT等。例如在春天,您可以使用@Crossorigin(“ *”)。代替* 您可以使用自己的偏好设置在CrossOrigin中允许使用。
    2. 避免拼写错误和网址的一部分
  

403表示禁止请求-(服务器限制您点击请求)

     

401表示未经授权的请求-(通常在没有登录数据或令牌过期或请求中没有令牌的情况下)