javascript - not - http status codes




Die Antwort auf die Preflight-Anforderung besteht die Zugriffskontrollprüfung nicht (14)

JavaScript XMLHttpRequest und Fetch folgen der gleichen Ursprungsrichtlinie. Eine Webanwendung, die XMLHttpRequest oder Fetch verwendet, kann also nur HTTP-Anforderungen an ihre eigene Domäne senden.

Quelle: https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS

Sie müssen den Access-Control-Allow-Origin: * HTTP-Header von Ihrer Serverseite senden.

Wenn Sie Apache als HTTP-Server verwenden, können Sie es wie folgt zu Ihrer Apache-Konfigurationsdatei hinzufügen:

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
</IfModule>

Mod_headers ist in Apache standardmäßig aktiviert. Sie können jedoch sicherstellen, dass es aktiviert ist, indem Sie Folgendes ausführen:

 a2enmod headers

Bei Verwendung von ngResource zum Aufrufen einer REST-API in Amazon Web Services tritt dieser Fehler auf:

XMLHttpRequest kann http://server.apiurl.com:8000/s/login?login=facebook nicht laden. Die Antwort auf die Preflight-Anforderung besteht die Zugriffskontrollprüfung nicht: In der angeforderten Ressource ist kein Header 'Zugriffskontrolle-Zulassen-Ursprung' vorhanden. Origin ' http: // localhost ' ist daher kein Zugriff gestattet. Fehler 405

Bedienung:

socialMarkt.factory('loginService', ['$resource', function($resource){    
    var apiAddress = "http://server.apiurl.com:8000/s/login/";
    return $resource(apiAddress, { login:"facebook", access_token: "@access_token" ,facebook_id: "@facebook_id" }, {
                getUser: {method:'POST'}
            });
}]);

Regler:

[...]
loginService.getUser(JSON.stringify(fbObj)),
                function(data){
                    console.log(data);
                },
                function(result) {
                    console.error('Error', result.status);
                }
[...]

Ich verwende Chrome und weiß nicht, was ich sonst tun soll, um dieses Problem zu beheben. Ich habe den Server sogar so konfiguriert, dass Header von origin localhost akzeptiert werden.


Wenn Sie eine Chrome-Erweiterung schreiben

Sie müssen in der manifest.json die Berechtigungen für Ihre Domain (s) hinzufügen.

"permissions": [
   "http://example.com/*",
   "https://example.com/*"
]

Die eigenständigen Distributionen von GeoServer enthalten den Jetty-Anwendungsserver. Aktivieren Sie Cross-Origin Resource Sharing (CORS), damit JavaScript-Anwendungen außerhalb Ihrer eigenen Domain GeoServer verwenden können.

Kommentieren Sie die folgenden <filter> und <filter-mapping> in webapps / geoserver / WEB-INF / web.xml aus:

 const s3 = new AWS.S3({
 accessKeyId: config.awsAccessKeyID,
 secretAccessKey: config.awsSecretAccessKey,
 region: 'eu-west-2'  // add region here });

Eine sehr häufige Ursache für diesen Fehler könnte sein, dass die Host-API die Anforderung einer http-Methode (z. B. PUT) zugeordnet hat und der API-Client die API mit einer anderen http-Methode aufruft (z. B. POST oder GET).


Etwas, das sehr leicht zu übersehen ist ...

Klicken Sie im Solution Explorer mit der rechten Maustaste auf ein API-Projekt. Setzen Sie im Eigenschaftenfenster 'Anonyme Authentifizierung' auf Aktiviert !!!



Ich benutze AWS sdk für Uploads, nachdem ich einige Zeit online gesucht habe, bin ich auf diesen Thread gestoßen. dank @lsimoneau 45581857 stellte sich heraus, dass genau dasselbe passierte. Ich habe einfach meine Anforderungs-URL auf die Region in meinem Bucket gerichtet, indem ich die Regionsoption angefügt habe, und es hat funktioniert.

<web-app>
  <filter>
      <filter-name>cross-origin</filter-name>
      <filter-class>org.eclipse.jetty.servlets.CrossOriginFilter</filter-class>
  </filter>
  <filter-mapping>
      <filter-name>cross-origin</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

Ich denke, die Deaktivierung von CORS in Chrome ist kein guter Weg , denn wenn Sie es in Ionic verwenden, wird das Problem in Mobile Build mit Sicherheit erneut auftreten.

Also besser in deinem Backend reparieren.

Zunächst müssen Sie in der Kopfzeile

  • Header ('Zugriffskontrolle-Zulassen-Ursprung: *');
  • header ('Header set Access-Control-Allow-Headers: "Ursprung, X-Requested-With, Inhaltstyp, Akzeptieren"');

Und wenn sich die API wie GET und POST verhält, dann setzen Sie auch

if ($ _SERVER ['REQUEST_METHOD'] == 'OPTIONS') {if (isset ($ _ SERVER ['HTTP_ACCESS_CONTROL_REQUEST_METHOD'])) Header ("Zugriffskontroll-Zulassungsmethoden: GET, POST, OPTIONS");
if (isset ($ _ SERVER ['HTTP_ACCESS_CONTROL_REQUEST_HEADERS'])) header ("Access-Control-Allow-Headers:
{$ _SERVER ['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']} "); exit (0);}


In PHP können Sie die Header hinzufügen:

<?php
header ("Access-Control-Allow-Origin: *");
header ("Access-Control-Expose-Headers: Content-Length, X-JSON");
header ("Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS");
header ("Access-Control-Allow-Headers: *");
...

In der AspNetCore-Web-API wurde dieses Problem behoben, indem "Microsoft.AspNetCore.Cors" (Version 1.1.1) hinzugefügt und die folgenden Änderungen in "Startup.cs" hinzugefügt wurden.

public void ConfigureServices(IServiceCollection services)
{ 
    services.AddCors(options =>
    {
          options.AddPolicy("AllowAllHeaders",
                builder =>
            {
                    builder.AllowAnyOrigin()
                           .AllowAnyHeader()
                           .AllowAnyMethod();
                });
    });
    .
    .
    .
}

und

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{


    // Shows UseCors with named policy.
    app.UseCors("AllowAllHeaders");
    .
    .
    .
}

und setzen Sie [EnableCors("AllowAllHeaders")] auf den Controller.


Mein "API-Server" ist eine PHP-Anwendung. Um dieses Problem zu lösen, habe ich die folgende Lösung gefunden:

Platziere die Zeilen in index.php

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');

Sie stoßen auf CORS-Probleme.

Es gibt verschiedene Möglichkeiten, dies zu beheben / zu umgehen.

  1. CORS ausschalten. Zum Beispiel: wie man cors in chrome ausschaltet
  2. Verwenden Sie ein Plugin für Ihren Browser
  3. Verwenden Sie einen Proxy wie Nginx. Beispiel für die Einrichtung

Genauer gesagt versuchen Sie, von localhost aus auf api.serverurl.com zuzugreifen. Dies ist die genaue Definition der domänenübergreifenden Anforderung.

Wenn Sie diese Option entweder ausschalten, um Ihre Arbeit zu erledigen (OK, wenn Sie andere Websites besuchen und nur die Kanne runterwerfen), können Sie einen Proxy verwenden, der Ihren Browser veranlasst, zu denken, dass alle Anforderungen vom lokalen Host kommen, wenn Sie haben wirklich einen lokalen Server, der dann den Remote-Server aufruft.

Aus api.serverurl.com kann daher localhost werden: 8000 / api und Ihr lokaler Nginx- oder anderer Proxy sendet an das richtige Ziel.

Jetzt, auf vielfachen Wunsch, 100% mehr CORS-Infos ... der gleiche großartige Geschmack!

Und für die Abwähler ... CORS zu umgehen ist genau das, was für diejenigen gezeigt wird, die einfach das Front-End lernen. https://codecraft.tv/courses/angular/http/http-with-promises/


Unser Team sieht dies gelegentlich mit Vue, Axios und einem C # WebApi. Das Hinzufügen eines Routenattributs auf dem Endpunkt, auf den Sie zugreifen möchten, behebt dies für uns.

[Route("ControllerName/Endpoint")]
[HttpOptions, HttpPost]
public IHttpActionResult Endpoint() { }

Wenn Sie zufällig einen IIS-Server verwenden. Sie können in der Option HTTP-Anforderungsheader die folgenden Header festlegen.

Access-Control-Allow-Origin:*
Access-Control-Allow-Methods: 'HEAD, GET, POST, PUT, PATCH, DELETE'
Access-Control-Allow-Headers: 'Origin, Content-Type, X-Auth-Token';

mit diesem ganzen posten, bekommen usw. wird gut funktionieren.





http-status-code-405