小编ioq*_*tix的帖子

HTTP Accept-language 字段中的语言顺序是否重要?

我想知道接受语言中实际语言的顺序是否重要。例如,如果我们的 HTTP GET 消息包含标题:

Accept-Language: en-us, en-gb;q=0.2, en;q=0.3, fr, fr-ch, da, fi
Run Code Online (Sandbox Code Playgroud)

...浏览器是否更喜欢传统法语(fr)而不是瑞士法语(fr-ch),即使它们都没有提到相对质量因子q,因此将是1。

http http-headers http-accept-language

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

如何拆分标头值?

我正在解析 HTTP 标头。我想将标头值拆分为有意义的数组。

例如,Cache-Control: no-cache, no-store应该返回['no-cache','no-store'].

HTTP RFC2616 说:

当且仅当该头字段的整个字段值被定义为逗号分隔列表[即#(values)]时,具有相同字段名称的多个消息头字段可以出现在消息中。通过将每个后续字段值附加到第一个字段值(每个字段值之间用逗号分隔),必须可以将多个标头字段组合成一个“字段名称:字段值”对,而不更改消息的语义。因此,接收具有相同字段名称的头字段的顺序对于组合字段值的解释很重要,因此当转发消息时,代理不得更改这些字段值的顺序

但我不确定反过来是否正确——用逗号分隔安全吗?

我已经找到了一个导致问题的例子。例如,我的用户代理字符串是

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36
Run Code Online (Sandbox Code Playgroud)

即,它在“KHTML”之后包含一个逗号。显然,我没有多个用户代理,因此拆分此标头没有意义。

User-Agent 字符串是唯一的例外,还是还有更多?

http rfc2616 http-headers

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

HTTP/2 `:authority` 标头是否应该包含端口号?

HTTP“主机”标头参数中是否需要端口号?,同样的逻辑是否适用于 HTTP/2?

即如果浏览器向https://server.com:1234/发出请求,:authority标题应该是server.com还是server.com:1234

http2

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

为什么vector <T> :: emplace_back,这样T有一个删除的拷贝构造函数,无法编译?

我无法编译以下dont_compile函数.我不明白为什么它不起作用.但是,它确实有效list.

class Thing {
public:
    Thing() {}
    Thing(const Thing &) = delete;
};

int dont_compile(int argc, char ** argv)
{
    std::vector<Thing> v;
    v.emplace_back();

    return 0;
}

int compiles(int argc, char ** argv)
{
    std::list<Thing> v;
    v.emplace_back();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是编译器的错误.这是一个错误吗?

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/memory:1752:31: error: call to deleted constructor of 'Thing'
            ::new((void*)__p) _Up(_VSTD::forward<_Args>(__args)...);
                              ^   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

... snip ...

note: 'Thing' has been explicitly marked deleted here
        Thing(const Thing &) = delete;
Run Code Online (Sandbox Code Playgroud)

我真的不明白如何_Up(...)调用复制构造函数.

c++ back emplace

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

是否可以避免将参数复制到lambda函数?

我想使用Handle管理文件描述符,我想使用lambda表达式来处理它们.我想使用RAII来管理底层文件描述符.一种选择是处理描述符的无效值(例如-1).但是,我更喜欢句柄始终有效.

我发现我似乎无法避免至少调用一次复制构造函数.这是一个工作示例:

#include <fcntl.h>
#include <unistd.h>
#include <functional>
#include <system_error>
#include <iostream>

class Handle
{
public:
    Handle(int descriptor) : _descriptor(descriptor) {}
    ~Handle()
    {
        std::cerr << "close(" << _descriptor << ")" << std::endl;
        ::close(_descriptor);
    }

    Handle(const Handle & other) : _descriptor(::dup(other._descriptor))
    {
        std::cerr << "dup(" << other._descriptor << ") = " << _descriptor << std::endl;
        if (_descriptor == -1) throw std::system_error(errno, std::generic_category(), "dup");
    }

    int descriptor() const { return _descriptor; }

private:
    int _descriptor;
};

Handle open_path(const char * path)
{ …
Run Code Online (Sandbox Code Playgroud)

c++ lambda function c++14

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