小编zer*_*ght的帖子

如何使用浏览器发送授权标头

我已经实现了一个使用基本身份验证(使用 spring 安全性)的 Web 服务器。

我在访问 URL 时禁用了默认身份验证入口点(而不是使用 www-authentication 标头响应 401,它只返回 401),目的是防止浏览器显示身份验证弹出窗口。

我能够使用 javascript 代码和 curl 等命令行工具连接到服务器,但是当我使用浏览器(chrome 和 firefox)对其进行测试时,它们只是不发送标头。

curl -v -u user:password localhost:8080/user

GET /user HTTP/1.1
Host: localhost:8080
Authorization: Basic dXNlcjpwYXNzd29yZA==
User-Agent: curl/7.58.0
Accept: /

Chrome:版本 71.0.3578.98(官方版本)(64 位)
http://user:password@localhost:8080/user

GET /user HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/ 71.0.3578.98 Safari/537.36
DNT: 1
Accept:
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng, / ;q=0.8
Accept-Encoding: gzip, deflate, br 接受语言:en-AU,en;q=0.9,fr-FR;q=0.8,fr;q=0.7,en-GB;q=0.6,en-US;q=0.5

为什么浏览器不发送身份验证标头。

browser webserver basic-authentication www-authenticate

12
推荐指数
1
解决办法
3万
查看次数

为什么使用模板和stdarg函数时float会提升为double

我做了一个模板类数组:这是必要的代码:

#ifndef ARRAY_H
#define ARRAY_H
#include <iostream>
#include <cstdarg>

template< typename T >
class Array
{
public:
    Array(size_t length = 0, ...);
    ~Array();
private:
    T *m_values;
    size_t m_len;
};

template< typename T>
Array< T >::Array(size_t len, ...) : m_values(0), m_len(len)
{
    if(len != 0)
    {
        m_values = new T[len];
        va_list ap;
        va_start(ap, len);
        for(size_t i(0); i < len; i++)
            m_values[i] = va_arg(ap, T);
        va_end(ap);
    }
    else
        m_values = NULL;
}

template< typename T >
Array< T >::~Array()
{
    delete[] m_values; …
Run Code Online (Sandbox Code Playgroud)

c++ templates

4
推荐指数
1
解决办法
1501
查看次数

C++ map插入不需要的行为

考虑以下代码:

// in global space 
int v[50000];

// in a function
int n;
std::cin >> n;
for(int i(0); i < n; ++i)
    std::cin >> v[i];

std::map<int, int, std::greater<int>> m;
for(int i(n-1); i > -1; --i){
    auto it(m.find(m[v[i]]));
    if(it == std::end(m)){
            m[v[i]] = i; // (1)
            // m.insert({m[v[i]], i}); (2)
            // m.insert(std::make_pair(m[v[i]], i)); (3)
    }
}
std::cout << "map : \n";
for(auto &x: m)
    std::cout << x.first << ' ' << x.second << '\n';
Run Code Online (Sandbox Code Playgroud)

假设我们输入:3 1 2 3使用第一版地图插入我得到了预期的结果:

3 2

2 …

c++ dictionary insert

2
推荐指数
1
解决办法
153
查看次数

多个参数时移动构造函数

我有一个像这样的第一个构造函数

X::X(const std::vector<int>& v1, const std::vector<int>& v2, const std::vector<int>& v3) : _v1(v1), _v2(v2), _v3(v3){
} // _v1 , _v2 and _v3 are members
Run Code Online (Sandbox Code Playgroud)

对于这种行为,我还应该实现移动构造函数版本

X::X(std::vector<int>&&, std::vector<int>&&, std::vector<int>&&);
Run Code Online (Sandbox Code Playgroud)

但是可以像这样使用const左值引用和右值引用的混合类型的参数

X::X(const std::vector<int>&, std::vector<int>&&, const std::vector<int>&);
Run Code Online (Sandbox Code Playgroud)

是实现所有可能的构造函数的最佳实践,即2 ^ 3?

c++ constructor arguments

1
推荐指数
1
解决办法
498
查看次数