He agregado el CORS en el encabezado pero todavía recibo el problema CORS en mi solicitud. ¿Cuál es la forma correcta de agregar y manejar CORS y otras solicitudes en los encabezados?
Aquí está el código del archivo de servicio:
import { HttpClient, HttpHeaders, HttpClientModule } from '@angular/common/http';
const httpOptions = {
headers: new HttpHeaders({
'Access-Control-Allow-Origin':'*',
'Authorization':'authkey',
'userid':'1'
})
};
public baseurl = 'http://localhost/XXXXXX';
userAPI(data): Observable<any> {
return this.http.post(this.baseurl, data, httpOptions)
.pipe(
tap((result) => console.log('result-->',result)),
catchError(this.handleError('error', []))
);
}
Error:
La respuesta a la solicitud de verificación previa no pasa la verificación de control de acceso: no hay un encabezado 'Access-Control-Allow-Origin' presente en el recurso solicitado. Por lo tanto, no se permite el acceso al origen ' http: // localhost: 4200 '
Error: respuesta de error de Http para (URL desconocida): 0 Error desconocido
En mi código del lado del servidor, agregué CORS en el archivo de índice.
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token');
Respuestas:
En mi experiencia, los complementos funcionaron con HTTP pero no con el último httpClient. Además, configurar los encabezados de respuesta CORS en el servidor no era realmente una opción. Entonces, creé un
proxy.conf.json
archivo para actuar como servidor proxy.Lea más sobre esto aquí .
proxy.conf.json
archivo:Coloqué el
proxy.conf.json
archivo justo al lado delpackage.json
archivo en el mismo directorio.Luego modifiqué el comando de inicio en el archivo package.json:
La llamada HTTP desde el componente de mi aplicación:
Por último, para ejecutar mi aplicación, tendría que usar
npm start
ong serve --proxy-config proxy.conf.json
fuente
target
como en el archivo proxy.config?HttpErrorResponse {headers: HttpHeaders, status: 200, statusText: "OK", url: "http://localhost:4200/", ok: false, …} error: SyntaxError: Unexpected token < in JSON at position 0 at JSON.parse (<anonymous>) message: "Unexpected token < in JSON at position 0" "
También puede probar la
fetch
función y elno-cors
modo. A veces me resulta más fácil configurarlo que el módulo http integrado de Angular. Puede hacer clic con el botón derecho en las solicitudes en la pestaña de red de herramientas de desarrollo de Chrome y copiarlas en la sintaxis de recuperación, lo cual es excelente.fuente
no-cors
bloquea eso. También bloquea la configuración del tipo de contenido enapplication/json
.Access to XMLHttpRequest at '..' from origin '..' has been blocked by CORS policy: Request header field x-timezone is not allowed by Access-Control-Allow-Headers in preflight response.
no se podía anular loAccess-Control-Request-Headers: cache-control,x-timezone
que se agregó de forma predeterminada :( y Github tiene esto en respuesta, laAccess-Control-Allow-Headers: Authorization, Content-Type, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since, Accept-Encoding, X-GitHub-OTP, X-Requested-With, User-Agent
búsqueda funcionóhttpclient
con una vuelta mucho tiempo interceptor :)Si es como yo y está utilizando un servidor de puerta de enlace SMS local y realiza una solicitud GET a una IP como 192.168.0.xx, obtendrá un error CORS seguro.
Desafortunadamente, no pude encontrar una solución Angular, pero con la ayuda de una repetición anterior obtuve mi solución y estoy publicando una versión actualizada para Angular 7 8 9
Simplemente .subscríbete como de costumbre.
fuente
Haga que el encabezado se vea así para HttpClient en NG5:
Podrás hacer una llamada api con tu url localhost, funciona para mí.
fuente
Una POST con httpClient en Angular 6 también estaba haciendo una solicitud de OPCIONES:
Encabezados generales:
Mi servidor REST de Perl implementa la solicitud OPTIONS con el código de retorno 200.
El siguiente encabezado de solicitud POST:
Observe los encabezados de solicitud de control de acceso: tipo de contenido.
Entonces, mi script perl backend usa los siguientes encabezados:
¡Con esta configuración, GET y POST funcionaron para mí!
fuente
por favor, importe las solicitudes de parada de angular cors
y agregue opciones de solicitud en su código como se indica a continuación
enviar la opción de solicitud en su solicitud de api
fragmento de código a continuación
y agregue CORS en su código PHP backend donde todas las solicitudes de API aterrizarán primero.
intente esto y avíseme si está funcionando o no.Tuve el mismo problema.Estaba agregando CORS de angular5 que no funcionaba, luego agregué CORS al backend y funcionó para mí
fuente
Lo siguiente funcionó para mí después de horas de intentarlo
Sin embargo, el siguiente código no funcionó, no tengo claro por qué, espero que alguien pueda mejorar esta respuesta.
fuente