这是我的第一篇文章。
我刚刚开始学习围棋和Angular,我正试图将角应用程序连接到围棋api。这两篇文章我都写过了,我一直在寻找问题的根源。我认为这是一个CORS问题,但是如果我不在角超文本传输协议请求中包含标题代码行,它就可以正常工作。在这一点上,我只是想添加标题。授权代码尚未实现。
这两个应用程序都在本地运行,Go应用程序位于端口5000,Angular应用程序位于端口4200
不起作用的角超文本传输协议请求:
this.http.get<ProjectedBalance>(requestUrl, {headers: new HttpHeaders().set('Authorization', 'my-auth-token')})
.subscribe(data => {
this.projBalance = data.projBalance;
}
有效的角度http请求:
this.http.get<ProjectedBalance>(requestUrl)
.subscribe(data => {
this.projBalance = data.projBalance;
}
我得到了这个错误:
对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“访问控制允许来源”标头。起源'http://localhost:4200因此,不允许访问。响应的HTTP状态代码为403
我在我的围棋代码中使用了大猩猩/mux和大猩猩/处理程序
router := mux.NewRouter()
router.HandleFunc("/home/{endDate}", GetProjBalance).Methods("GET", "OPTIONS")
headersOk := handlers.AllowedHeaders([]string{"X-Requested-With, Content-Type, Authorization"})
originsOk := handlers.AllowedOrigins([]string{"*"})
methodsOk := handlers.AllowedMethods([]string{"GET", "HEAD", "POST", "PUT", "OPTIONS"})
//start server on port
log.Fatal(http.ListenAndServe(":5000", handlers.CORS(originsOk, headersOk, methodsOk)(router)))
Chrome开发工具的标题
Request URL:http://localhost:5000/home/2020-12-21
Request Method:OPTIONS
Status Code:403 Forbidden
Remote Address:[::1]:5000
Referrer Policy:no-referrer-when-downgrade
Response Headers
view source
Content-Length:0
Content-Type:text/plain; charset=utf-8
Date:Mon, 20 Nov 2017 21:39:43 GMT
Request Headers
view source
Accept:*/*
Accept-Encoding:gzip, deflate, br
Accept-Language:en-US,en;q=0.9,uz;q=0.8
Access-Control-Request-Headers:authorization
Access-Control-Request-Method:GET
Connection:keep-alive
Host:localhost:5000
Origin:http://localhost:4200
角6==
public IsClientCreditCardExits(companyId: string, token: any) {
let header = new Headers({ 'Authorization': `Bearer ${token}` });
const options = new RequestOptions({
headers: header,
});
return this._http.get(this.ApiURL + "api/Subscriptions/IsClientCreditCardExits/" + companyId + "/", options);
}
如果你不想添加拦截器,这对我有用:
var header = {
headers: new HttpHeaders()
.set('Authorization', `Basic ${btoa(AuthService.getToken())}`)
}
this.http.get(url, header)
对于持票人,
set('Authorization', `Bearer ${AuthService.getToken()}`)
关于在Angular中处理身份验证头的最佳方法
下面是我在应用程序中使用的AuthInterceptor
的完整示例:
auth.interceptor.ts
import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { AuthService } from './auth.service';
@Injectable()
export class AuthInterceptor implements HttpInterceptor {
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
req = req.clone({
setHeaders: {
'Content-Type' : 'application/json; charset=utf-8',
'Accept' : 'application/json',
'Authorization': `Bearer ${AuthService.getToken()}`,
},
});
return next.handle(req);
}
}
您需要在应用程序中注册拦截器。模块
作为提供程序:
应用程序。单元ts
import { HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http';
import { AuthInterceptor } from '../auth/auth.interceptor';
...
imports: [
HttpClientModule,
...
],
providers: [
{
provide : HTTP_INTERCEPTORS,
useClass: AuthInterceptor,
multi : true,
},
...
],
...
您可以在这篇文章中进一步了解这种方法。
关于Go方面的事情,这很可能是您发送的请求标头和CORS允许的标头之间不匹配的情况。
你应该尝试的第一件事是允许所有它们:
headersOk := handlers.AllowedHeaders([]string{"*"})
originsOk := handlers.AllowedOrigins([]string{"*"})
methodsOk := handlers.AllowedMethods([]string{"GET", "HEAD", "POST", "PUT", "OPTIONS"})
如果问题消失了,试着仔细地按照客户发送的内容一个接一个地构建COR。
问题内容: 这是我的第一篇文章。 我刚刚开始学习Go和Angular,并且尝试将angular应用程序连接到go api。我已经写了这两本书,并且一直坚持找出问题的根源。我以为这是一个CORS问题,但是如果我在Angular http请求中不包含代码的标题行,它就可以正常工作。在这一点上,我只是想添加标题。授权代码尚未实现。 这两个应用程序都在本地运行,端口5000上的Go应用程序和4200端口上
我正在为我的应用程序构建身份验证,并使用访问和刷新令牌。 用户登录时,API会发布3个问题 刷新令牌 具有标头和有效负载的访问令牌字符串 带签名的访问令牌字符串 这些令牌都是令牌。 本文讨论了为什么应该拆分访问令牌。 使用express,我将令牌发送回控制器中的浏览器,如下所示: auth.constants.ts 在ui(react)中,我进入Chrome开发工具- 现在,当我想向我的应用编程接
我正在使用GWT和Spring controller来管理http流量。有些请求可能需要很长时间,但我希望在超过给定时间时终止请求。 我如何配置超时Spring。我也使用Apache Tomcat 7.0。我试图在tomcat上inrease最大线程,但有一段时间tomcat工作缓慢,因为请求线程不会死。
我写客户端REST GET调用使用Spring RestTem板。我需要将超文本传输协议头传递给GET调用。 请查找代码段: 在这个REST get调用中,我需要传递上面的头,比如Accept和username。为了在RestTemplate中传递头,需要对相同的代码进行哪些更改。
我必须向一些没有任何参数的API发送GET请求,所以我编写了代码: 当API url是HTTP时,它可以工作,但不适用于HTTPS。它说: 太阳安全验证器。ValidatorException:PKIX路径生成失败:sun。安全供应商。certpath。SunCertPathBuilderException:找不到请求目标的有效证书路径;嵌套的异常是javax。网ssl。例外:太阳。安全验证器。V
使用vertx http代理(https://github.com/eclipse-vertx/vertx-http-proxy),添加/插入自定义身份验证机制(例如基于客户端证书的LDAP身份验证和为后端目标填充授权基本标头)的最佳方式是什么?