dtwr2012
2018-03-22 21:28
浏览 161

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?

图片转代码服务由CSDN问答提供 功能建议

亲爱的,我的问题不重复。

代码:

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

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

  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 
 ... 
   
 
 

代码:

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

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

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

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

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

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服务器正常:

 &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 
   
 
 

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • du4629 2018-03-22 22:56
    已采纳

    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.

    点赞 打赏 评论

相关推荐 更多相似问题