XMLHttpRequest和jQuery AJAX方法之间的响应头差异

XMLHttpRequest和jQuery AJAX方法之间的响应头差异

问题描述:

Dears my problem is not duplicate.

code:

var data = {'userId': window.cookie.get('userId'),
    'sessionId': window.cookie.get('sessionId')}

$.post(window.DbUrl + '/test', data, function (e) {
    console.log(e);
});

I try to send ajax with jquery post and response is:

Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:Origin, Content-Type, X-Auth-Token, Authorization
Access-Control-Allow-Methods:GET, POST, PATCH, PUT, DELETE, OPTIONS
Access-Control-Allow-Origin:https://localhost:8080
Connection:keep-alive
Content-Length:1011
... 

code:

var formdata = new FormData();
formdata.append('sessionId', window.cookie.get('sessionId'));
formdata.append('userId', window.cookie.get('userId'));
var ajax = new XMLHttpRequest();
ajax.upload.addEventListener("progress", selff.myProgressHandler, false);
ajax.addEventListener("load", myCompleteHandler, false);
ajax.addEventListener("error", myErrorHandler, false);
ajax.addEventListener("abort", myAbortHandler, false);
ajax.open("POST", window.DbUrl + '/test',true);
ajax.send(formdata);

I try with XMLHttpRequest in same URL response is:

Allow:POST
Connection:keep-alive
Content-Length:4
Content-Type:text/html; charset=utf-8

In the nodejs express server, missing Access-Control-Allow-* headers.

But when ajax with XMLHttpRequest to php server every thing is Ok.

nodejs server:

app.post('/test', function (req, res) {
    res.setHeader('Access-Control-Allow-Origin', 'https://localhost:8080');
    res.setHeader('Access-Control-Allow-Credentials', 'true');
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PATCH, PUT, DELETE, OPTIONS');
    res.setHeader('Access-Control-Allow-Headers', 'Origin, Content-Type, X-Auth-Token, Authorization');
    res.end('welcome');
});

php server is ok:

<?php
header('Access-Control-Allow-Origin: https://localhost:8080');
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token, Authorization');

?>wellcome

What is the problem? why php server is ok both nodojs is not, why jquery ok in any server?

亲爱的,我的问题不重复。 strong> p>

代码: p>

  var data = {'userId':window.cookie.get('userId'),
'sessionId':window.cookie.get('sessionId  ')} 
 
 $ .post(window.DbUrl +'/ test',data,function(e){
 console.log(e); 
}); 
  code>  pre  > 
 
 

我尝试使用jquery post发送ajax,响应为: p>

  Access-Control-Allow-Credentials:true 
Access-Control-Allow- 标题:Origin,Content-Type,X-Auth-Token,Authorization 
Access-Control-Allow-Methods:GET,POST,PATCH,PUT,DELETE,OPTIONS 
Access-Control-Allow-Origin:https:// localhost:  8080 
连接:keep-alive 
Content-Length:1011 
 ... 
  code>  pre> 
 
 

代码: p>

  var formdata = new FormData(); 
formdata.append('sessionId',window.cookie.get('sessionId')); 
formdata.append('userId',window.cookie.get('userId'))  ; 
var ajax = new XMLHttpRequest(); 
ajax.upload.addEventListener(“progress”,selff.myProgressHandler,fals  e); 
ajax.addEventListener(“load”,myCompleteHandler,false); 
ajax.addEventListener(“error”,myErrorHandler,false); 
ajax.addEventListener(“abort”,myAbortHandler,false); 
ajax.open(  “POST”,window.DbUrl +'/ test',true ;;
jjax.send(formdata); 
  code> 
nn

我在同一网址响应中尝试使用XMLHttpRequest是 : p>

 允许:POST 
Connection:保活
Content-长度:4 
Content类型:文本/ HTML;  charset = utf-8 
  code>  pre> 
 
 

在nodejs express服务器中,缺少 Access-Control-Allow - * code>标题。 p> \ n

但是当带有XMLHttpRequest的ajax到php服务器时,每件事都没问题。 p>

nodejs server: p>

  app.post  ('/ test',function(req,res){
 res.setHeader('Access-Control-Allow-Origin','https:// localhost:8080'); 
 res.setHeader('Access-Control  -Allow-Credentials','true'); 
 res.setHeader('Access-Control-Allow-Methods','GET,POST,PATCH,PUT,DELETE,OPTIONS'); 
 res.setHeader('Access  -Control-Allow-Headers','Origin,Content-Type,X-Auth-Token,Authorization'); 
 res.end('welcome'); 
}); 
  code>  pre  > 
 
 

php服务器正常: p>

 &lt;?php 
header('Access-Control-Allow-Origin:https:// localhost:8080  '); 
header('Access-Control-Allow-Credentials:true'); 
header('Access-Control-Allow-Methods:GET,POST,PATCH,PUT,DELETE,OPTIONS'); 
header('Access  -Control-Allow-Headers:Origin,Content-Type,X-Auth-Token,Authorization'  ); 
 
?&gt; wellcome 
  code>  pre> 
 
 

有什么问题? 为什么php服务器还可以,nodojs都不行,为什么jquery ok在任何服务器上? p> div>

I don't know the reason but use the cors package if you want to fix it. Because the package has trigger on express request, send header before you send manual.