标签: beast

Oracle JDK8中的JSSE是否实现了TLS后备SCSV?

看起来OpenJDK版本8中的JSSE没有实现RFC7507.OpenJDK错误跟踪器中存在一个开放缺陷: JDK-8061798

但是关于Oracle JDK的信息并不多.Oracle JDK版本8是否实现了TLS后备信令密码套件值(SCSV)?如果它能够如何启用此功能?

java security ssl jsse beast

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

如何使用Beast C ++库从HTTP重定向到HTTPS?

我正在研究Boost.Beast库。我尝试提出一个请求,其响应为:

HTTP/1.1 301 Moved Permanently
Cache-Control: public
Content-Type: text/html; charset=UTF-8
Location: https://www.example.com/target/xxx/
Run Code Online (Sandbox Code Playgroud)

然后,我尝试使用此位置字段发出请求,但收到错误的请求响应。

我该如何进行重定向?有例子吗?

这是我的代码:

boost::asio::io_service ios;
tcp::resolver resolver{ios};
tcp::socket socket{ios};
auto const lookup = resolver.resolve( tcp::resolver::query(host, port) );
boost::asio::connect(socket, lookup);

// Set up an HTTP GET request message
http::request<http::string_body> req{http::verb::get, target, 11};
req.set(http::field::host, host);
req.set(http::field::user_agent, BOOST_BEAST_VERSION_STRING);

// Send the HTTP request to the remote host
http::write(socket, req);

// This buffer is used for reading and must be persisted
boost::beast::flat_buffer buffer;

// Declare a container to hold the response
http::response<http::dynamic_body> …
Run Code Online (Sandbox Code Playgroud)

c++ boost beast boost-beast

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

试图理解boost :: beast multibuffer

Beast websocket示例将数据存储在多缓冲区中:

该实现使用一个或多个不同大小的字符数组的序列.附加的字符数组对象附加到序列以适应字符序列大小的变化.

在查看界面时,我并不完全清楚它是如何工作的.如果我读了描述,它可以看作是一个缓​​冲区数组.但似乎输出只是一大块数据.这是否意味着"一个或多个阵列"仅适用于内部结构?

在示例代码中,数据被读入缓冲区,如下所示: m_websocketStream.async_read(m_buffer.....

每个async_read操作都会创建一个新的内部缓冲区.

如果是这种情况,如何在另一端解释它.EG如何将其读入std :: string或std :: vector.

在查看sources时,data()返回const_buffer_type,这是一个前向声明.

对于数据成员,帮助信息提供以下信息,这些信息没有多大帮助:

用于将输入序列表示为缓冲区列表的类型.使用const_buffers_type = implementation_defined;

该定义似乎来自头文件boost/asio/buffer.hpp,它也包括在内.然而整体结构对我来说有些模糊.

我只是想了解如何将数据作为字节处理或将其转换为std :: string.

试过以下内容,但这也是不允许的:

std::string( boost::asio::buffer_cast<const char*>(m_buffer.data()) ,boost::asio::buffer_size(m_buffer.data()) );

有人能开导我一点吗?

beast websocket

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

端口性能从Beast.1.0.0-b66降到Boost.1.67.0.Beast

从Beast.1.0.0-b66(使用Boost.1.64.0)迁移到Boost.1.67.0.Beast(即将Beast集成到Boost中)后,我观察到性能急剧下降(CPU消耗急剧增加)。 。毫无疑问,我做错了什么,但我无法想象。

什么是:

typedef beast::http::request<beast::http::string_body> BeastHttpRequest;
Run Code Online (Sandbox Code Playgroud)

就是现在:

namespace http = boost::beast::http;    
typedef http::request<http::string_body> BeastHttpRequest;
Run Code Online (Sandbox Code Playgroud)

什么是:

beast::http::prepare(req);
beast::http::write(stream, req);
Run Code Online (Sandbox Code Playgroud)

就是现在:

req.prepare_payload();
http::write(stream, req);
Run Code Online (Sandbox Code Playgroud)

当然,我还必须进行许多API更改。例如:

req.fields.replace(hdrName, hdrValue);
Run Code Online (Sandbox Code Playgroud)

就是现在:

req.set(hdrName, hdrValue);
Run Code Online (Sandbox Code Playgroud)

该应用程序可以正常工作-包括SSL握手和代理协商-但我必须解决CPU消耗高峰和性能相应下降的问题。我想知道是否有人知道我忽略了一些明显的事情。

编辑:我应该提到我正在为SSL流使用flat_buffer。

我有机会分析“端口之前”和“端口之后”性能数据。这是“端口之前”(即良好的性能)调用链:

- 34.61% HttpRequest::send
   - 32.02% beast::http::write<boost::asio::ssl::stream<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >&>, true, beast::http::string_body,
      - 31.90% beast::http::write<boost::asio::ssl::stream<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >&>, true, beast::http::string_bo
         - 20.77% beast::http::detail::write_preparation<true, beast::http::string_body, beast::http::basic_fields<std::allocator<char> > >::init
            - 18.25% beast::http::detail::write_fields<beast::basic_streambuf<std::allocator<char> >, beast::http::basic_fields<std::allocator<char> > >
               - 10.38% beast::write<beast::basic_streambuf<std::allocator<char> >, boost::basic_string_ref<char, std::char_traits<char> > >
                  - 10.20% beast::detail::write_dynabuf<beast::basic_streambuf<std::allocator<char> >, boost::basic_string_ref<char, std::char_traits<char> > >
                     + 3.66% …
Run Code Online (Sandbox Code Playgroud)

c++ performance networking boost beast

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

使用 boost::beast 处理大型 http 响应

下面的代码用于获取http响应消息:

\n
  boost::beast::tcp_stream stream_;\n\n  boost::beast::flat_buffer buffer;\n  boost::beast::http::response<boost::beast::http::dynamic_body> res;\n  boost::beast::http::read(stream_, buffer, res);\n
Run Code Online (Sandbox Code Playgroud)\n

但是,在某些情况下,根据前面的请求,我可以预期响应消息正文将包含大型二进制文件。

\n

因此,我\xe2\x80\x99d喜欢直接将其读取到文件系统而不是通过buffer变量来避免过多使用进程内存。如何做呢 ?

\n

在 Objective-c 框架中,NSUrlSession有一个简单的方法可以使用NSURLSessionDownloadTask而不是NSURLSessionDataTask,所以我想知道它是否也存在于 boost 中。

\n

谢谢 !

\n

c++ boost http beast

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

标签 统计

beast ×5

boost ×3

c++ ×3

boost-beast ×1

http ×1

java ×1

jsse ×1

networking ×1

performance ×1

security ×1

ssl ×1

websocket ×1