Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在请求标头中包含响应标头中的cookie

在请求标头中包含响应标头中的cookie
EN

Stack Overflow用户
提问于 2019-09-27 11:22:19
回答 2查看 1.2K关注 0票数 0

我在Traefik反向代理后面运行.NET核心应用程序的多个实例。当用户访问网站时,Traefik返回StickyCookie (Set-Cookie内部):

它告诉客户端Traefik背后的哪个服务器接受了他的请求。如果我们想再次向同一台服务器发送请求,我们还必须在请求中包含cookie。

如何在.NET核心中实现将StickyCookie字段附加到每个请求的中间件?它应该包含与从上一个响应中接收到的相同的StickyCookie。

基本上,我想实现与以下Linux命令相同的功能:

curl -v --cookie "StickyCookie=http://10.0.2.75:80" http://example.com:5000

EN

回答 2

Stack Overflow用户

发布于 2019-09-27 11:54:31

中间件可以注册为发送响应头中的任何内容。您可以在startup.cs文件配置方法中注册中间件:

代码语言:javascript
运行
AI代码解释
复制
  app.UseMiddleware<CustomHeader>();

然后,您的CustomHeader类可以是

代码语言:javascript
运行
AI代码解释
复制
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Options;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace PEG.Api.Middleware
{
    public class CustomHeader
    {
        private readonly RequestDelegate _next;

        public CustomHeader(RequestDelegate next)
        {
            _next = next;
        }

        public async Task Invoke(HttpContext context)
        {
            //you can add your stickyCookie in the dictionary
            var dictionary = new Dictionary<string, string[]>()
            {
                /* add your sticky cookie here. An example below
                 {
                    "Access-Control-Allow-Credentials",new string[]{"true" }
                }*/
            };

            //To add Headers AFTER everything you need to do this
            context.Response.OnStarting(state => {
                var httpContext = (HttpContext)state;
                foreach (var item in dictionary)
                {
                    httpContext.Response.Headers.Add(item.Key, item.Value);
                }
                return Task.FromResult(0);
            }, context);

            await _next(context);
        }
    }
}
票数 0
EN

Stack Overflow用户

发布于 2019-09-30 09:50:03

您可以在中间件中获取响应头中的StickyCookie,然后将其保存到Session中,然后从会话中检索数据并将其添加到请求头中。

代码语言:javascript
运行
AI代码解释
复制
public class AddHeaderMiddleware
{
    private readonly RequestDelegate _next;

    public AddHeaderMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task InvokeAsync(HttpContext context)
    {

        var data = context.Session.GetString("StickyCookie");

        context.Request.Headers.Add("StickyCookie", data);

        context.Response.OnStarting(state =>
        {
            var httpContext = (HttpContext)state;
            var cookies = httpContext.Response.Headers["Set-Cookie"].ToString().Split(";");
            if (cookies.Length > 0)
            {
                foreach (var item in cookies)
                {
                    if (item.Split("=")[0] == "StickyCookie")
                    {
                        var cookie = item.Split("=")[1];
                        httpContext.Session.SetString("StickyCookie", cookie);
                    }
                }
            }
            return Task.FromResult(0);
        }, context);

        await _next(context);
    }
}

public static class AddHeaderMiddlewareExtensions
{
    public static IApplicationBuilder UseAddHeader(
        this IApplicationBuilder builder)
    {
        return builder.UseMiddleware<AddHeaderMiddleware>();
    }
}

在Startup.cs中

代码语言:javascript
运行
AI代码解释
复制
 public void ConfigureServices(IServiceCollection services)
    {
        services.AddDistributedMemoryCache();

        services.AddSession(options =>
        {
            //// Set a short timeout for easy testing.
            //options.IdleTimeout = TimeSpan.FromMinutes(10);
            //options.Cookie.HttpOnly = true;
            //// Make the session cookie essential
            options.Cookie.IsEssential = true;
        });
 }
public void Configure(IApplicationBuilder app)
{
     //...
     app.UseSession();
     app.UseAddHeader();
     //...
}

要检查的操作:

代码语言:javascript
运行
AI代码解释
复制
var header = HttpContext.Request.Headers;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58133555

复制
相关文章
php从cUrl请求头中提取Cookie
函数主体 <?php function get_cookie($header=0) { if ($header == '' || empty($header)) { retur
用砖头敲代码
2022/06/15
1.6K0
http请求头中缓存的实现
什么是http缓存呢,当我们使用chrome浏览器,按F12打开控制台,在网络请求中有时候看到状态码是200,有时候状态码是304,当我们去看这种请求的时候,我们会发现状态码为304的状态结果是:Status Code: 304 Not Modified,而状态码为200的时候一般会有四种情况,一种是直接返回200,没有任何其他的标志,另一种是Status Code: 200 OK (from memory cache),还有一种是Status Code: 200 (from disk cache)。最后一种不是太常见,Status Code: 200 (from Service Worker).后面这三种状态码看到的效果是灰色的,其实从给出的信息也能看出来是从缓存中获取上数据。下面我们来详细介绍一下他们都分别是什么时候出现的。
OECOM
2020/07/02
2.1K0
http请求头中缓存的实现
Moleft专用函数库(五) - 从响应头中提取Cookie
如无特殊说明《Moleft专用函数库(五) - 从响应头中提取Cookie》为博主MoLeft原创,转载请注明原文链接为:https://moleft.cn/post-211.html
用砖头敲代码
2022/08/30
3180
Http请求头中各字段的含义
浏览器(或者其他基于HTTP的客户端程序)可以接收的内容类型(Content-types),例如 Accept: text/plain
玖柒的小窝
2021/09/14
1.2K0
HTTP响应头中可以使用的各种响应头字段
大佬教程:https://blog.csdn.net/flang6157/article/details/103287119
华创信息技术
2022/05/28
2.2K0
用 Swagger 测试接口,怎么在请求头中携带 Token?
如果小伙伴们没有看过松哥之前发的 OAuth2 系列文章,建议一定先看下,再来看本文内容,否则接下来的内容可能会犯迷糊。
江南一点雨
2020/06/11
3.1K0
用 Swagger 测试接口,怎么在请求头中携带 Token?
HTTP headers
HTTP标头使客户端和服务器可以通过HTTP请求或响应传递其他信息。HTTP标头由不区分大小写的名称,后跟冒号(:)和值组成。 值之前的空格将被忽略。
黑伞安全
2019/10/16
7.7K2
OAuth2 Token 一定要放在请求头中吗?
Token 一定要放在请求头中吗? 答案肯定是否定的,本文将从源码的角度来分享一下 spring security oauth2 的解析过程,及其扩展点的应用场景。
冷冷
2020/06/29
2.1K0
跟我一起探索 HTTP-跨源资源共享(CORS)
跨源资源共享CORS,是一种基于HTTP头的机制,该机制通过允许服务器标示除了它自己以外的其他源(域、协议或端口),使得浏览器允许这些源访问加载自己的资源。跨源资源共享还通过一种机制来检查服务器是否会允许要发送的真实请求,该机制通过浏览器发起一个到服务器托管的跨源资源的“预检”请求。在预检中,浏览器发送的头中标示有 HTTP 方法和真实请求中会用到的头。
用户1418987
2023/10/16
4050
跟我一起探索 HTTP-跨源资源共享(CORS)
C# HTTP系列5 HttpWebResponse.StatusCode属性
HttpWebResponse.StatusCode 属性获取响应的状态。对应 HttpStatusCode 枚举值之一。
张传宁IT讲堂
2019/09/17
2.2K0
跟我一起探索HTTP-协议升级机制
HTTP/1.1 协议提供了一种使用Upgrade (en-US) 标头字段的特殊机制,这一机制允许将一个已建立的连接升级成新的、不相容的协议。
用户1418987
2023/10/16
3160
跟我一起探索HTTP-协议升级机制
网络爬虫请求头中的Referer和User-Agent与代理IP的配合使用
在进行网络爬虫开发时,我们经常需要模拟浏览器发送请求来获取网页数据。然而,有些网站为了保护自身的安全和隐私,会对请求进行限制和过滤。为了绕过这些限制,我们可以使用代理IP来隐藏真实的请求来源。但是,仅仅使用代理IP可能不足以达到我们的目的,因为一些网站会根据请求头中的Referer和User-Agent信息来判断请求的合法性。因此,本文将探讨网络爬虫请求头中的Referer和User-Agent与代理IP的配合使用的技巧和注意事项。
小白学大数据
2023/08/03
6240
面试 HTTP ,99% 的面试官都爱问这些问题
HTTP 是一种 超文本传输协议(Hypertext Transfer Protocol),HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范
cxuan
2020/04/21
1.4K0
面试 HTTP ,99% 的面试官都爱问这些问题
aiohttp 异步http请求-11.ClientResponse 获取响应headers 和cookies
前言 ClientResponse 获取接口返回的headers 和cookies 响应 headers 可以使用 ClientResponse.headers 查看服务器的响应 assert resp.headers == { 'ACCESS-CONTROL-ALLOW-ORIGIN': '*', 'CONTENT-TYPE': 'application/json', 'DATE': 'Tue, 15 Jul 2014 16:49:51 GMT', 'SERVER': 'g
上海-悠悠
2022/04/27
1.7K0
跨域资源共享(CORS)
简单先了解一下CORS,方便我们后续去挖一些CORS的漏洞,最近CORS也是比较火的!
黑伞安全
2019/10/16
3.6K0
​越权检测 burp插件 autorize 使用
本文转载自助安社区(https://secself.com/),海量入门学习资料。
助安社区
2023/04/11
4.3K0
​越权检测 burp插件 autorize 使用
顶级开源项目 Sentry 20.x JS-SDK 设计艺术(概述篇)
下面是一个实现新的 Sentry SDK 的指南。它涵盖了事件提交的协议,以及客户端的典型外观和行为准则。
为少
2021/05/27
2K0
深入浅出JWT(JSON Web Token )
JSON Web Token(JWT)是一个开放式标准(RFC 7519),它定义了一种紧凑(Compact)且自包含(Self-contained)的方式,用于在各方之间以JSON对象安全传输信息。 这些信息可以通过数字签名进行验证和信任。 可以使用秘密(使用HMAC算法)或使用RSA的公钥/私钥对对JWT进行签名。
mantou
2018/05/05
4.1K5
深入浅出JWT(JSON Web Token )
PortSwigger之身份验证+CSRF笔记
https://portswigger.net/web-security/all-labs#authentication
FB客服
2021/09/16
3.5K0
HttpOnly是怎么回事?
最近配合公司安全团队开展一些工作,安全团队建议,内部系统(用户端系统有跨域需求,其他方式解决更合适)对接SSO建议开启HttpOnly。HttpOnly?没听说过,赶紧百度一下。
普通程序员
2019/10/23
8.4K1
HttpOnly是怎么回事?

相似问题

“‘Set Cookie”未包含在响应标头中

16

.ASPXAUTH Cookie无法包含在标头中

22

如何转义标头中的冒号-在YAML标头中包含

129

Angular2 -请求标头中的cookie

13

HTTP标头中没有cookie

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文