我四处搜索,据我所知,POST表单请求已经限制为10MB(http://golang.org/src/net/http/request.go#L721)。
如果要减少这种ServeHTTP
方法的使用量,则不确定如何正确执行此操作。我会尝试这样的事情:
r.Body = http.MaxBytesReader(w, r.Body, MaxFileSize)
err := r.ParseForm()
if err != nil {
//redirect to some error page
return
}
但是错误返回是否也会关闭连接?我如何避免必须阅读所有内容?我发现了这一点,但是如果未设置内容长度,并且在阅读过程中我意识到文件太大,该怎么办。
我将此用作一种安全措施,以防止有人占用我的服务器资源。
限制请求正文大小的正确方法是按照您的建议进行操作:
r.Body = http.MaxBytesReader(w, r.Body, MaxFileSize)
err := r.ParseForm()
if err != nil {
// redirect or set error status code.
return
}
当达到限制时,MaxBytesReader
在响应上设置一个标志。设置此标志时,服务器不会读取请求正文的其余部分,并且服务器在从处理程序返回时关闭连接。
如果您担心恶意客户端,则还应该设置Server.ReadTimeout,Server.WriteTimeout以及可能的Server.MaxHeaderBytes。
如果要为所有处理程序设置请求主体限制,则在委派给根处理程序之前,用设置限制的处理程序包装根处理程序:
type maxBytesHandler struct {
h http.Handler
n int64
}
func (h *maxBytesHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
r.Body = http.MaxBytesReader(w, r.Body, h.n)
h.h.ServeHTTP(w, r)
}
在调用ListenAndServe时包装根处理程序:
log.Fatal(http.ListenAndServe(":8080", &maxBytesHandler{h:mux, n:4096))
或配置服务器时:
s := http.Server{
Addr: ":8080",
Handler: &maxBytesReader{h:mux, n:4096},
}
log.Fatal(s.ListenAndServe())
不需要其他答案中建议的补丁。MaxBytesReader是限制请求正文大小的官方方法。
问题内容: 你用代替吗? 我的意思是作为返回值或设置String变量的值。我不是要进行比较,因为我们在那里使用 问题答案: 当然不是。您是否真的认为“”不够清晰? 常量本质上有3个用例: 记录值的含义(常量名+ javadoc) 根据通用值同步客户端。 提供一个特殊值的捷径,以避免一些启动费用 在此均不适用。
问题内容: 进程的大小是否有限制?它是否仅取决于机器的性能?我想知道这一点,以限制对函数的递归调用的深度。 谢谢。 问题答案: 堆栈通常受资源限制的限制。您可以使用以下命令查看安装的默认设置: (这表明我的是8MB,这是巨大的)。 如果删除或增加该限制,您仍将无法使用计算机中的所有RAM作为堆栈- 堆栈从进程地址空间顶部附近的一点向下增长,并在某个时刻它将运行到您的代码,堆或已加载的库中。
我们知道,有一个最大可重入限制:;块也有可重入限制吗? 更新:我发现很难为同步可重入编写测试代码: 有人能帮我写一些同步可重入极限测试的代码吗?
问题内容: 我需要将搜索功能添加到在tomcat上运行的Java Web应用程序中,以及数据库以及同一台计算机上。 由于我计划在同一台计算机上使用Solr,但应使用哪种实现?我以为嵌入式嵌入式服务器更可取,因为我需要从同一台计算机添加数据,因此通过HTTP添加将没有多大意义,不是吗?而且将Solr作为单独的Web应用程序运行将比嵌入式Web应用程序消耗更多的资源(不是吗?)。 但是现在不建议使用E
问题内容: 我有两个文件,它们合并在一起的长度小于600字节(.6kb),如下所示。 那么我的app.bundle.js太大了(987kb),又如何管理它的大小又如何呢? src文件index.js src文件print.js webpack.config.js package.json 警告信息: 资产大小限制警告:以下资产超过了建议的大小限制(244 KiB)。这可能会影响网络性能。资产:ap
请参见:http://jsfiddle.net/zemar(必须使用Firefox或Opera才能查看) 单击时,下拉框的样式设置为匹配,但如果从文本框中的数据列表中开始键入术语,则出现的建议没有设置样式,因此与样式的其余部分不匹配。