Apache 和 Headers 存在以响应 Ajax 请求

Posted

技术标签:

【中文标题】Apache 和 Headers 存在以响应 Ajax 请求【英文标题】:Apache and Headers presence in response for Ajax requests 【发布时间】:2014-08-27 22:02:38 【问题描述】:

我试图找出一个跨域 API 问题。 我有一个使用 Sencha Touch 2.3.1 创建的应用程序,它使用 Ajax 从远程服务器获取数据。 我面临的问题是针对本地服务器的所有 Ajax 请求都不包含响应的所有标头。 在远程服务器上,一切正常,标头也正常。

这里有两个打印件,分别显示每个服务器发送和接收的标头

1 - 从 localhost (http://local.api - vhost) 发送和接收的标头

收到的标头:

Connection      Keep-Alive
Content-Length  274
Content-Type    text/html; charset=iso-8859-1
Date            Mon, 07 Jul 2014 10:58:54 GMT
Keep-Alive      timeout=5, max=100
Location        http://local.api/fa/?ref.agent/lista-clienti&_dc=1404730734262
Server          Apache/2.2.17 (Win32) php/5.3.3

发送的标头:

Accept          text/html,application/xhtml+xml,
                application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language ro-ro,ro;q=0.8,en-us;q=0.6,en-gb;q=0.4,en;q=0.2
Content-Length  33
Content-Type    application/x-www-form-urlencoded; charset=UTF-8
Host            local.api
Origin          http://sencha.local
Referer         http://sencha.local/fisa-agenti/index.html
User-Agent      Mozilla/5.0 (Windows NT 6.1; WOW64; rv:30.0) Gecko/20100101 
                Firefox/30.0

2 - 从远程服务器发送和接收的标头 (http://adgarage.ro)

收到的标头

Accept-Ranges                   bytes
Access-Control-Allow-Cred...    true
Access-Control-Allow-Orig...    *
Age                             0
Connection                      keep-alive
Content-Length                  375
Content-Type                    application/json
Date                            Mon, 07 Jul 2014 10:58:52 GMT
Server                          Apache/2.2.22 (Unix) mod_ssl/2.2.22 
                                OpenSSL/0.9.8e-fips-rhel5
Via                             1.1 varnish
X-Powered-By                    PHP/5.3.13
X-Varnish                       562862498

已发送标题

Accept          text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language ro-ro,ro;q=0.8,en-us;q=0.6,en-gb;q=0.4,en;q=0.2
Host            adgarage.ro
Origin          http://sencha.local
Referer         http://sencha.local/fisa-agenti/index.html
User-Agent      Mozilla/5.0 (Windows NT 6.1; WOW64; rv:30.0) Gecko/20100101 
                Firefox/30.0

注意Access-Controll-Allow 标头。 从localhost收到的标头容器中缺少它

这是我的.htaccess 文件:

Header set Access-Control-Allow-Origin *
Header set Access-Control-Allow-Credentials: true 

此文件在两台服务器上相同。 我在本地机器上有 headers_module 活动。

我注意到的另一件事是来自本地的响应状态是301 moved Permanently,而从远程服务器收到的响应状态是200 Ok

我错过了什么?

谢谢!

【问题讨论】:

【参考方案1】:

我已经确定了问题所在。 正如this topic 中所讨论的,由于301 Moved Permanently 状态,未发送标头。

我的本​​地请求是发给http://local.api/fa?ref.agent/... 而不是http://local.api/fa/?ref.agent/... - 请注意第一个链接中/fa 后面缺少的斜杠。

现在一切正常。

【讨论】:

以上是关于Apache 和 Headers 存在以响应 Ajax 请求的主要内容,如果未能解决你的问题,请参考以下文章

python+requests——检查响应头是否存在

aiohttp 异步http请求-11.ClientResponse 获取响应headers 和cookies

如何设计一种分治算法来检查数组中是不是存在一对ai,aj使得ai-aj = M?

Fiddler实战之请求头(request headers)和响应头(response headers)

headers哪个是响应时间

django-cors-headers 和 nginx 配置:预检响应缺少 CORS 标头