Я создал приложение с angular 5, которое подключается к REST API, разработанному с помощью golang и размещенному на экземпляре aws ec2, работающем на порту 8080. Мой код углового веб-интерфейса создает запрос POST, и перед выполнением этого запроса браузер сначалаотправляет предварительный запрос COR, который завершается неудачно со следующим сообщением об ошибке:
Блокирован перекрестный запрос: одна и та же политика происхождения запрещает чтение удаленного ресурса на https://signup.mysite.com:8080/api/v1/merchant/signup
.(Причина: отсутствует токен 'access-control-allow-credentials' в заголовке CORS 'Access-Control-Allow-Headers' из канала предварительной проверки CORS).
Следующие заголовки отправляются браузером взапрос ОПЦИИ к серверу API REST:
Access-Control-Request-Headers : access-control-allow-credentia…rol-allow-origin,content-type
Access-Control-Request-Method : POST
Cors включены на golang, но не уверены, что они работают.Как я могу решить проблему
РЕДАКТИРОВАТЬ Используя следующий код, чтобы добавить заголовок в запросе поста в угловых 5
import { HttpClient, HttpParams, HttpHeaders } from '@angular/common/http';
let headers = new HttpHeaders();
headers = headers.append('Access-Control-Allow-Origin', '*');
headers = headers.append('Access-Control-Allow-Credentials', 'true');
return this.http.post<Response>(this.apiUrl+'merchant/signup', JSON.stringify(formValues),{headers: headers}).map(response => response.response);'true');
Следующий код в файле go
func CORSMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
// host := strings.Split(c.Request.Host, ":8080")
c.Writer.Header().Set("Content-Type", "application/json")
// c.Writer.Header().Set("Access-Control-Allow-Origin", "http://"+host[0])
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
c.Writer.Header().Set("Access-Control-Allow-Credentials", "true")
c.Writer.Header().Set("Access-Control-Allow-Methods", "GET, POST, OPTIONS, PUT, DELETE")
// c.Writer.Header().Set("Access-Control-Allow-Headers", "Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, Ip, X-Requested-With, access-control-allow-credentials ")
c.Writer.Header().Set("Access-Control-Allow-Headers", "Accept, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization")
}
}
такжепакет с ядрами
router.Use(cors.Default())