websocket Winsock/sockets的有效HTTPS请求头是如何组成的?

uwopmtnx  于 2023-04-12  发布在  其他
关注(0)|答案(1)|浏览(137)

更新:https://wiki.openssl.org/index.php/SSL/TLS_Client使用简单的HTTP/1.1请求头来做HTTPS。

我想我在WinSock中使用其 ssl 扩展来建立HTTPS连接时遇到了HTTPS(SSL)问题。注意,我必须使用SOCKET_SETTINGS_ALLOW_INSECURE(而不是SOCKET_SETTINGS_GUARANTEE_ENCRYPTION)来完成此操作,否则连接将超时。
接下来的问题是,我必须发送一个请求头来获取资源,而我的网站正在返回一个错误响应。对于https,Firefox中的Raw头看起来像下面这样:

GET / HTTP/2
            Host: www.example.net
            User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/111.0
            Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
            Accept-Language: en-US,en;q=0.5
            Accept-Encoding: gzip, deflate, br
            DNT: 1
            Connection: keep-alive
            Upgrade-Insecure-Requests: 1
            Sec-Fetch-Dest: document
            Sec-Fetch-Mode: navigate
            Sec-Fetch-Site: cross-site
            Pragma: no-cache
            Cache-Control: no-cache
            TE: trailers

我收到一个错误消息,发送这样的东西,只有接受编码和升级不安全的请求:1。

HTTP/1.1 505 HTTP Version Not Supported
Server: nginx
Date: Wed, 05 Apr 2023 23:57:10 GMT
Content-Type: text/html
Content-Length: 180
Connection: close
Strict-Transport-Security: max-age=31536000
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Frame-Options: DENY

我也试过HTTPS/1.0之类的东西。我认为网站是在代理服务器后面的,它正在转发后端的响应。但无论如何,它都不起作用。

jogvjijk

jogvjijk1#

你现在看到的不是原始的头文件,而是原始的HTTP/2头文件 * 重新格式化,使其看起来像HTTP/1.1*。HTTP/2是一个相当复杂的协议,也不是人类可读的,这就是为什么浏览器将头文件转换为HTTP/1.1格式。
如果您只是将HTTP/2更改为HTTP/1.1,则它是一个有效的HTTP请求。
如果你正在使用原始HTTP over sockets,那么为了让事情更容易,你可能想删除TE: trailersAccept-Encoding: gzip, deflate, br,因为这将禁用一些协议功能,这可能会使你更容易处理响应。或者你可以使用一个实际的HTTP库,它将为你处理所有功能,并实现HTTP/2。

相关问题