I want to access request headers (NOT response headers) after a request to the server, how do I do it?
I'm currently using angular, but open to Javascript solutions. The response only gives response headers.
Related
I'm using HttpClient to request a json file. I want the file can be cached with ETag. But it not works. I think that The If-None-Match not send to the server is the reason. So I want to get The 'ETag' from response headers. But the response header not has the item in Angular, But It's truly in the HTTP response in chrome network tool. All of showing in follow images.
How can I get the ETag from response Header
I think it's similar to this : HttpClient dont return all headers.
You need to setup your backend to return Access-Control-Expose-Headers:ETag.
As the MDN shows the cors hide lots of headers, So I can't get the ETag in angular.
Add Access-Control-Expose-Headers:ETag to response header can solve this issue.
I am attempting to make a Fetch request with Javascript using:
credentials: 'same-origin'
method: 'GET'
But in the fetch request I am unable to pass a client (browser) cookie in the request headers. I know that the issue is not a cors issue as that was corrected on both the client and server.
In the Header it looks like all other values are correct except that there is no cookie in the fetch request.
Since you had to correct a CORS issue, you must be making a cross-origin request.
That means it isn't a same-origin request and you need to use include not same-origin.
Note that the cookies sent will be the ones associated with the origin you are making the request to, not from.
I have a simple cross domain service designed to handle the Simple CORS request. I am able to call it through plain xmlHTTP call or jQuery($.ajax) but its throwing Access-Control-Allow-Origin error with AngularJS $http
var url = 'http://some-cross-domain-url/some-path';
$http.get(url); //preflight OPTION verb issued by browser and
//since server is not expecting it, it failed
$.ajax(url, {type: 'GET'}); //working fine as no preflight request sent
CORS request called via Angular $http was triggering preflight (OPTIONS verb) but with plain Ajax call or jQuery Ajax its sent as non-preflighted CORS request as confirmed by debugger network tab in chrome.
As the service designed to handle the Simple CORS request call we need to ensure that Angular also prepare request in a way so that browser issue simple CORS request (See Simple vs Not so simple CORS request at MDN).
Solution: Remove the headers added by Angular by referring Access-Control-Request-Headers
GET request without any headers is treated as simple request
If you have configured Angular $http defaults, it will add these headers into request which makes it not so simple CORS as shown in below image.
All custom HTTP headers sent as Access-Control-Request-Headers when preflighted. Once server allows the communication as per CORS rule, browser sends the actual request(with original Method and Headers etc)
//remove custom headers by looking at Access-Control-Request-Headers
var headers = {
'Authorization': undefined,//undefined tells angular to not to add this header
'pragma': undefined,
'cache-control': undefined,
'if-modified-since': undefined
};
$http.get(url, {
headers: headers
});
I am trying to get all the request headers that I have set after an ajax call is made. My authorization and a few other headers vary for each call and it is a pain to keep track of all of them. In the $( document ).ajaxComplete(), the xhr and the settings do not seem to have the request headers. There are the whole response headers though. Is there a way wherein I can get all the request headers after I pass the request (in the ajaxcomplete)?
Here's my situation: I make an ajax post to a server endpoint, and it sends me back some JSON data in response. This JSON response also includes the Set-cookie header.
Does the cookie get set automatically when it's in a response to an ajax request, or do I have to read it out of the headers and do it manually?
(As opposed to the headers being present on the response to a form submit, where I know the browser will be handling the response and its headers on its own, no JS necessarily involved.)
Yes, it gets set automatically. An AJAX request is just an HTTP request. You can send Cookie headers, and receive Set-Cookie Headers normally.