我已经在一个VPS上托管了多个node.js应用程序一段时间,而且一切都很好.
我可以通过使用nginx将流量路由到node.js应用程序所需的不同端口来实现.
随着最近对http2的推动,我一直试图通过启用http2来支持我的应用程序.在nginx上,我可以按照 nginx 的指南进行操作.
在进行基准测试时,在测试网站上使用http2获取主页的47个请求时,性能似乎没有增加.
可能是因为nodejs服务于http1而不是http2?
我必须在nginx和我的nodejs应用之间设置任何东西吗?例如,proxy_http_version: 2.0然而,proxy_http_version 2.0 似乎没有可用还.
我的nodejs应用程序服务于快递,所以我真的得到一个http2连接或获得HTTP连接?
当我使用http2指示器时,它告诉我该网站通过指示蓝灯使用http2.我是否必须使用molnarg的http2模块或nginx http2模块是否足够?
希望有更多开发经验的人可以帮助我清除这一点,并希望其他许多开发人员.
当我击中时kevinsuttle.com,我明白了
"No data received ERR_EMPTY_RESPONSE".
Run Code Online (Sandbox Code Playgroud)
当我点击时https://kevinsuttle.com,我得到了网站.
ghost 0.7.5
nginx 1.4 => 1.9.9
letsencrypt 0.2.0
数字海洋:Ubuntu 14.04 Ghost 1-click Droplet
在Networking> Domains下,我有两个kevinsuttle.com和www.kevinsuttle.com作为A记录指向服务器的IP地址(@).
DNSimple记录
| Type | Name | TTL | Content | |------ |--------------------- |--------------- |------------------------ | | URL | www.kevinsuttle.com | 3600 (1 hour) | http://kevinsuttle.com |
Ghost的config.js中唯一修改过的部分是我的域名.
url: 'http://kevinsuttle.com',
Run Code Online (Sandbox Code Playgroud)
默认情况下,nginx 1.9不会创建以下目录:
/ etc/nginx/sites-available
/ etc/nginx/sites-enabled
并且通常的defaultconf不会在这两个目录中创建.
相反,有一个etc/nginx/conf.d/default.conf重要的, …
我正在尝试使用Ruby gem http-2向Google发送GET请求.
我直接从示例中提取了代码并稍微简化了一下:
require 'http/2'
require 'socket'
require 'openssl'
require 'uri'
uri = URI.parse('http://www.google.com/')
tcp = TCPSocket.new(uri.host, uri.port)
sock = tcp
conn = HTTP2::Client.new
conn.on(:frame) do |bytes|
# puts "Sending bytes: #{bytes.unpack("H*").first}"
sock.print bytes
sock.flush
end
conn.on(:frame_sent) do |frame|
puts "Sent frame: #{frame.inspect}"
end
conn.on(:frame_received) do |frame|
puts "Received frame: #{frame.inspect}"
end
stream = conn.new_stream
stream.on(:close) do
puts 'stream closed'
sock.close
end
stream.on(:half_close) do
puts 'closing client-end of the stream'
end
stream.on(:headers) do |h|
puts "response …Run Code Online (Sandbox Code Playgroud) 我从这里尝试了最新的alpn-boot罐子:https://mvnrepository.com/artifact/org.mortbay.jetty.alpn/alpn-boot 但它没有任何区别,它们甚至没有包含那个类.
我正在使用Sun JDK.
我在哪里可以找到正确的罐子?
我在Google Chrome版本55.0.2883.95(64位)和Mozilla版本50.1.0上击中了相同的URL(由于客户的机密而无法公开该URL),但是Google Chrome和Mozilla浏览器上的响应标头字段不同。
Google Chrome浏览器的响应是:-
HTTP / 2 200 access-control-allow-origin:*内容编码:gzip内容类型:application / json; charset = UTF-8
标头字段不在Pascal Case中,但Mozilla的响应为:-
HTTP / 2 200 Access-Control-Allow-Origin:*内容编码:gzip内容类型:application / json; charset = UTF-8
标头字段为Pascal情况。
现在我知道这是每条RFC2616第4.2节(https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html-sec4.2),其中说
“每个标题字段均由名称,后跟冒号(“:”)和字段值组成。字段名称不区分大小写。”
但是我的客户在他的应用程序上运行了一些自定义缓存库,如果Content-Encoding标头不在Pascal情况下,它将开始抱怨。
有什么可能的解决方案的主意吗?提前致谢 :)
我尝试了Web Inspector中的所有选项卡,但没有找到任何有用的选项.谷歌也没有出现任何方式.
我刚刚发现,Android推荐的http客户端HttpUrlConnection不支持HTTP / 2。
是否有特定原因不在Android上使用HTTP / 2?
我想知道是否使用HTTP1.x或HTTP2在JavaScript客户端和Node.js服务器之间执行请求.
我在XMLHttpRequest,Chrome控制台和Node.js中如何知道使用什么类型的协议?
我们正在维护一个当前在Java 8上运行的项目。现在,我们必须通过其api调用合作伙伴服务器,以将一些数据迁移到我们的数据库中。
当我们调用他们的服务器时,我们得到了一个例外:
原因:org.apache.http.ProtocolException:服务器无法使用有效的HTTP响应进行响应
在这种情况下,响应代码为-1。
所以我尝试使用curl从他们的服务器获取数据,我看到他们的响应状态行是:
HTTP / 2 200
虽然HttpURLConnection像这样检查:
if (statusLine.startsWith("HTTP/1.")) {
int codePos = statusLine.indexOf(' ');
if (codePos > 0) {
int phrasePos = statusLine.indexOf(' ', codePos+1);
if (phrasePos > 0 && phrasePos < statusLine.length()) {
responseMessage = statusLine.substring(phrasePos+1);
}
// deviation from RFC 2616 - don't reject status line
// if SP Reason-Phrase is not included.
if (phrasePos < 0)
phrasePos = statusLine.length();
try {
responseCode = Integer.parseInt
(statusLine.substring(codePos+1, phrasePos));
return responseCode;
} catch (NumberFormatException e) …Run Code Online (Sandbox Code Playgroud) http2 ×10
http ×3
java ×2
nginx ×2
node.js ×2
android ×1
ghost ×1
http-headers ×1
httprequest ×1
https ×1
java-8 ×1
javascript ×1
lets-encrypt ×1
multiplexing ×1
networking ×1
okhttp ×1
ruby ×1
safari ×1
ssl ×1