我正在用html数据类型制作跨域ajax请求.他们工作正常
Access-Control-Allow-Origin
在服务器的响应中.问题是我需要从服务器的响应中获取某些标头,无论我做什么,除"内容类型"之外的响应标头返回null.
jQuery执行请求,检索包含标题的响应(我可以从流量中看到它),但它不会解析它.
我试过用
crossDomain: true
它没有帮助.以下是来自服务器的示例响应.
Access-Control-Allow-Origin:*
Cache-Control:private
Content-Encoding:gzip
Content-Length:514
Content-Type:text/html; charset=utf-8 
X-MYRESPONSEHEADER:1
如果请求和响应文档在同一服务器上
 success: function (data, status, xhr) {
        totalRows = xhr.getResponseHeader("X-MYRESPONSEHEADER");
工作良好.我也尝试将$ .ajax分配给变量之类的
var jQxhr = $.ajax(.....
我不明白为什么它不会被解析,因为jQuery实际上发出请求并获得响应
有任何想法吗?我错过了什么吗?
标题已发送到请求
HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
Vary: Accept-Encoding
Server: Microsoft-IIS/7.5
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: X-MYRESPONSEHEADER
Access-Control-Allow-Methods: POST
Access-Control-Allow-Methods: GET
X-MYRESPONSEHEADER: 24
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Wed, 29 Feb 2012 11:34:21 GMT
内容长度:514
通过添加以下内容,我可以设置请求标头以显示Content-Disposition:“ Access-Control-Expose-Headers”:“ Content-Disposition”
我可以看到响应,但是响应对象不包含Content-Disposition。 点击此处查看详细屏幕截图
我有什么办法可以获取该价值?
axios版本:0.15.2环境:节点v6.9.4,chrome 54,Windows 7
我在应用程序中从URL收集json值时遇到了麻烦.当我尝试获取它们时,控制台中会显示错误日志,说access-control-allow-origin不允许来源.
我研究了一下,发现响应头必须设置为Access-Control-Allow-Origin:*
我怎么能用纯javascript做到这一点?没有jquery或任何其他库.
这是我目前的代码:
<script type="text/javascript">
    var xmlHttp = null;
    xmlHttp = new XMLHttpRequest();
    xmlHttp.open( "GET", "http://example.com/id=69", false );
    xmlHttp.send( null );
    console.log("JSON values from URL: ");
    console.log(xmlHttp.responseText);
</script>
在以下情况下是否可以进行 HTTP 响应拆分:
String requestFilename = request.getParameter("name");
response.addHeader("content-disposition", "attachment; filename=" + requestFilename);
我直接将未经处理的请求参数附加到响应标头。
我的问题是,通过使用 CRLF 字符,我们可以将自己的标头插入响应中。
到目前为止,我已经尝试过\r\n,%0D%0A但它们不起作用。
是response.addHeader()不受此类攻击?
有人可以向我解释如何执行这种攻击吗?
我的代码是使用.apsx页面和以下代码在选项卡/新窗口中打开PDF:
            string fileName = GetFileName(so);
            Response.Clear();
            Response.Buffer = true;
            Response.ContentType = "application/pdf";
            Response.AddHeader("content-disposition", "inline; filename=" + fileName);
            Response.BinaryWrite(pdfStream);
在浏览器中为PDF选择保存选项时,保存对话框中的文件名未在IE(11)中正确填充; 它仍在使用页面名称.Chrome和FF的工作方式与我期望的一样(使用提供的文件名作为建议的名称).
此外,当我将内容处置更改为附件而不是内联时,IE与Chrome和FF的工作方式相同.它们都使用文件名作为建议的保存名称.
我是否遗漏了如何使用内联功能的内容?
这是来自较大应用程序的示例脚本,但显示了我正在尝试执行的操作的一般过程。如果我有以下脚本:
<?php
ob_start();
setcookie('test1', 'first');
setcookie('test1', 'second');
setcookie('test1', 'third');
setcookie('test2', 'keep');
//TODO remove duplicate test1 from headers
ob_end_clean();
die('end test');
我得到以下响应(通过 Fiddler 查看):
HTTP/1.1 200 OK
Date: Tue, 25 Apr 2017 21:54:45 GMT
Server: Apache/2.4.17 (Win32) OpenSSL/1.0.2d PHP/5.5.30
X-Powered-By: PHP/5.5.30
Set-Cookie: test1=first
Set-Cookie: test1=second
Set-Cookie: test1=third
Set-Cookie: test2=keep
Content-Length: 8
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html
end test
问题是Set-Cookie: test1......存在3次不同的时间,因此不必要地增加了标题大小。(同样,这是一个简化的示例 - 实际上,我正在处理 ~800 字节范围内的 ~10 个重复 cookie。)
有什么我可以写的东西来代替TODO完全摆脱标题的东西,或者它只显示一次?即以下是我的最终目标:
HTTP/1.1 200 OK
Date: Tue, 25 …我正在使用一些API,我注意到在响应中我有这个:
我需要阅读"x-dl-units-left",但我得到null:
$.ajax(ajaxConfig).done(function(response, textStatus, xhr){
  var left = xhr.getResponseHeader("x-dl-units-left"); //null
  var all = xhr.getAllResponseHeaders(); // "content-type: application/json;charset=UTF-8"
});
谁可能知道为什么?:(
谢谢
我在几个 Flask 应用程序前面将 NGINX 作为反向代理运行。
我想为注销的用户实现缓存。
Flask-loginSet-Cookie为每个响应添加一个标头,即使对于匿名用户也是如此,因为它包含一个带有 CSRF 令牌的会话 cookie。这意味着我正在使用proxy_ignore_headers Set-Cookie;以确保 NGINX 实际缓存了这些内容(它不会缓存并使用Set-Cookie标头进行响应)。
我在应用程序中设置了一个单独的 cookie 来指示用户的登录/退出状态,并使用它来确定是否使用缓存。这很好用。
问题是注销用户的缓存响应包含Set-Cookie设置会话 cookie的标头。这个会话 cookie 被提供给任何命中缓存的请求,最终导致不同的用户收到相同的 CSRF 令牌。
我想阻止将Set-Cookie标头存储在缓存中,或者在从缓存发送到客户端时删除/覆盖它。
我试过设置proxy_hide_headers Set-Cookie从缓存的响应中删除它,但也从该应用程序的响应中删除它。所以没有人可以登录。这很糟糕。
感觉应该有一个非常简单的解决方案,无论我谷歌多么努力,我都能找到它。
任何帮助表示赞赏。
任何人都知道一种方法来保留使用 net/http 包收到的响应头的顺序?
实际上,标头只能作为 a 访问,map[string]string并且对它们进行迭代不会保留顺序。
任何输入将不胜感激,谢谢大家!
我想用 Apollo Client 读取响应头,但我不能。
我正在使用 Apollo 服务器和 Apollo 客户端进行 GraphQL API 通信,并且我想来回发送标头。我已经设置了客户端,以便它发送一个 x-client-version 标头,并且我已经将服务器设置为有时也使用相同的标头进行回复。
问题是,当我尝试使用 Apollo 客户端读取 x-client-version 标头(或任何真正的标头)时,我得到未定义。我根据我在网上找到的示例甚至 YouTube 演练在下面设置了一些 Afterware:
const clientVersionAfterware = new ApolloLink((operation, forward) =>
  forward(operation).map(response => {
    const {
      response: { headers },
    } = operation.getContext();
    console.log(headers);
    if (headers) {
      const token = headers.get("x-client-version");
      console.log(token);
      if (token) {
        localStorage.setItem("clientVersion", token);
      }
    }
    return response;
  }),
);
将其附加到链接链:
    const httpLink = handleErrors.concat(
  clientVersionAfterware.concat(new HttpLink(linkOptions)),
);
const batchHttpLink = handleErrors.concat(
  clientVersionAfterware.concat(
    new BatchHttpLink({ ...linkOptions, batchInterval: 10 }), …response-headers ×10
ajax ×2
cookies ×2
http-headers ×2
javascript ×2
jquery ×2
.net ×1
apollo ×1
axios ×1
c# ×1
caching ×1
cors ×1
cross-domain ×1
go ×1
graphql ×1
httpresponse ×1
java ×1
jqxhr ×1
nginx ×1
php ×1
python ×1
setcookie ×1