我对 Web 服务器对 http keep-alive header 的操作很感兴趣。所以我在http server的基础上搭建了一个简单的http server。服务器除了使用简单的 html http 正文响应客户端之外什么都不做。
服务器代码在这里:
package main
import (
"fmt"
"net"
"os"
)
func main() {
l, err := net.Listen("tcp", "localhost:9765")
if err != nil {
fmt.Println("Error listening:", err.Error())
os.Exit(1)
}
defer l.Close()
for {
conn, err := l.Accept()
fmt.Println("New connection...")
if err != nil {
fmt.Println("Error accepting: ", err.Error())
os.Exit(1)
}
go handleRequest(conn)
}
}
// handler
func handleRequest(conn net.Conn) {
for {
buf := make([]byte, 512)
_, err := conn.Read(buf)
if err != nil {
fmt.Println("Error reading:", err.Error())
conn.Close()
break
}
fmt.Printf("%s", buf)
str := `HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 8
Content-Type: application/javascript
alert(1)
`
conn.Write([]byte(str))
}
}
我向本地 nginx 静态服务器添加了一个演示 html:
<head>
<meta charset="UTF-8">
<script type=text/javascript src="test.js"></script>
<script type=text/javascript src="http://localhost:9765/3"></script>
<script type=text/javascript src="http://localhost:9765/2"></script>
<script type=text/javascript src="http://localhost:9765/1"></script>
<script type=text/javascript src="http://localhost:9765/17"></script>
<script type=text/javascript src="http://localhost:9765/16"></script>
<script type=text/javascript src="http://localhost:9765/15"></script>
<script type=text/javascript src="http://localhost:9765/14"></script>
<script type=text/javascript src="http://localhost:9765/13"></script>
<script type=text/javascript src="http://localhost:9765/12"></script>
<script type=text/javascript src="http://localhost:9765/30"></script>
<script type=text/javascript src="http://localhost:9765/29"></script>
<script type=text/javascript src="http://localhost:9765/28"></script>
<script type=text/javascript src="http://localhost:9765/27"></script>
<script type=text/javascript src="http://localhost:9765/26"></script>
<script type=text/javascript src="http://localhost:9765/25"></script>
<script type=text/javascript src="http://localhost:9765/24"></script>
<script type=text/javascript src="http://localhost:9765/23"></script>
<script type=text/javascript src="http://localhost:9765/22></script>
<script type=text/javascript src="http://localhost:9765/21"></script>
</head>
<body>
<h1>loader测试页面</h1>
<span>hello world</span>
</body>
</html>
用chrome访问文件时,发现所有响应都正常,但是每次http请求后tcp连接就关闭了。 TCP 发送 http 响应后出现 EOF 错误。
最佳答案
如果您在 header 中发送错误的内容长度,浏览器将挂起(等待永远不会出现的内容)或关闭连接(当它在内容后看到无效垃圾时)。它还能做什么?
关于http - 如果内容长度错误,Chrome 会关闭 tcp 连接吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54671018/
在我的Rails(2.3,Ruby1.8.7)应用程序中,我需要将字符串截断到一定长度。该字符串是unicode,在控制台中运行测试时,例如'א'.length,我意识到返回了双倍长度。我想要一个与编码无关的长度,以便对unicode字符串或latin1编码字符串进行相同的截断。我已经了解了Ruby的大部分unicode资料,但仍然有些一头雾水。应该如何解决这个问题? 最佳答案 Rails有一个返回多字节字符的mb_chars方法。试试unicode_string.mb_chars.slice(0,50)
大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje
我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123
我需要读入一个包含数字列表的文件。此代码读取文件并将其放入二维数组中。现在我需要获取数组中所有数字的平均值,但我需要将数组的内容更改为int。有什么想法可以将to_i方法放在哪里吗?ClassTerraindefinitializefile_name@input=IO.readlines(file_name)#readinfile@size=@input[0].to_i@land=[@size]x=1whilex 最佳答案 只需将数组映射为整数:@land边注如果你想得到一条线的平均值,你可以这样做:values=@input[x]
我希望我的UserPrice模型的属性在它们为空或不验证数值时默认为0。这些属性是tax_rate、shipping_cost和price。classCreateUserPrices8,:scale=>2t.decimal:tax_rate,:precision=>8,:scale=>2t.decimal:shipping_cost,:precision=>8,:scale=>2endendend起初,我将所有3列的:default=>0放在表格中,但我不想要这样,因为它已经填充了字段,我想使用占位符。这是我的UserPrice模型:classUserPrice回答before_val
是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou
我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以
如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象
我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R
我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test