更新: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之类的东西。我认为网站是在代理服务器后面的,它正在转发后端的响应。但无论如何,它都不起作用。
1条答案
按热度按时间jogvjijk1#
你现在看到的不是原始的头文件,而是原始的HTTP/2头文件 * 重新格式化,使其看起来像HTTP/1.1*。HTTP/2是一个相当复杂的协议,也不是人类可读的,这就是为什么浏览器将头文件转换为HTTP/1.1格式。
如果您只是将
HTTP/2
更改为HTTP/1.1
,则它是一个有效的HTTP请求。如果你正在使用原始HTTP over sockets,那么为了让事情更容易,你可能想删除
TE: trailers
和Accept-Encoding: gzip, deflate, br
,因为这将禁用一些协议功能,这可能会使你更容易处理响应。或者你可以使用一个实际的HTTP库,它将为你处理所有功能,并实现HTTP/2。