I\'m trying to send some HTTP requests from my angular.js application to my server, but I need to solve some CORS errors.
The HTTP request is made using the followin
The OPTIONS request is so called pre-flight request, which is part of Cross-origin resource sharing (CORS). Browsers use it to check if a request is allowed from a particular domain as follows:
POST request with the application/json content typeOPTIONS requestHTTP 200 OK response to the pre-flight request, it sends the actual request, POST in your caseBrowsers are not sending the pre-flight requests in some cases, those are so-called simple requests and are used in the following conditions:
- One of the allowed methods:
GETHEADPOST- Apart from the headers automatically set by the user agent (for example, Connection, User-Agent, etc.), the only headers which are allowed to be manually set are the following:
AcceptAccept-LanguageContent-LanguageContent-Type(but note the additional requirements below)DPRDownlinkSave-DataViewport-WidthWidth- The only allowed values for the Content-Type header are:
application/x-www-form-urlencodedmultipart/form-datatext/plain- No event listeners are registered on any
XMLHttpRequestUploadobject used in the request; these are accessed using theXMLHttpRequest.uploadproperty.- No
ReadableStreamobject is used in the request.
Such requests are sent directly and the server simply successfully processes the request or replies with an error in case it didn't match the CORS rules. In any case, the response will contain the CORS headers Access-Control-Allow-*.
Browsers are sending the pre-flight requests if the actual request doesn't meet the simple request conditions, the most usually:
application/xml or application/json, etc., are usedGET, HEAD or POSTPOST method is of an another content type than application/x-www-form-urlencoded, multipart/form-data or text/plainYou need to make sure that the response to the pre-flight request has the following attributes:
200 OKAccess-Control-Allow-Origin: * (a wildcard * allows a request from any domain, you can use any specific domain to restrict the access here of course)From the other side, the server may refuse the CORS request simply by sending a response to the pre-flight request with the following attributes:
2XX)200 OK), but without any CORS header (i.e. Access-Control-Allow-*)See the documentation on Mozilla Developer Network or for example HTML5Rocks' CORS tutorial for details.
So, in your case, the proper header is present, you just have to make sure the pre-flight response's HTTP status code is 200 OK or some other successful one (2XX).