我在使用我的一个数据源服务时遇到了一些问题.正如它在HTTP响应头中所说,它在Apache-Coyote/1.1上运行.服务器使用Transfer-Encoding给出响应:chunked,这里是示例响应:
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/xml;charset=utf-8
Transfer-Encoding: chunked
Content-Encoding: gzip
Date: Tue, 30 Mar 2010 06:13:52 GMT
Run Code Online (Sandbox Code Playgroud)
问题是当我请求服务器发送gzipped请求时,它经常发送不完整的响应.我收到回应,看到最后一块收到了,但是在解开后我看到回复是偏的.我从未在请求标头中关闭gzip这样的行为.
所以我的问题是:它是常见的tomcat问题吗?也许其中一个mod正在进行压缩?或者也许它可能是某种代理问题?我不知道tomcat的版本或者他们使用的是什么gzip mod,但随便问一下,我会试着询问我的服务提供商.
谢谢.
我知道curl可以将数据发布到URL:
$ curl -X POST http://httpbin.org/post -d "hello"
{
"args": {},
"data": "",
"files": {},
"form": {
"hello": ""
},
"headers": {
"Accept": "*/*",
"Content-Length": "5",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "httpbin.org",
"User-Agent": "curl/7.50.1"
},
"json": null,
"origin": "64.238.132.14",
"url": "http://httpbin.org/post"
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以通过管道传递curl来实现同样的事情:
$ echo "hello" | curl -X POST http://httpbin.org/post -d @-
{
"args": {},
"data": "",
"files": {},
"form": {
"hello": ""
},
"headers": {
"Accept": "*/*",
"Content-Length": "5",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "httpbin.org",
"User-Agent": "curl/7.50.1"
},
"json": null,
"origin": "64.238.132.14", …Run Code Online (Sandbox Code Playgroud) 我有一个Undertow服务器,我正在运行默认值.我试图发送一个分块请求,当服务器接收块时,输入流服务器端永远不会达到-1状态并挂起.
我已经使用了Undertow服务器的默认值(我曾尝试增加线程数但仍然没有运气).
Undertow server = Undertow.builder()
.addHttpListener(8080, "localhost")
.setHandler(new HttpHandler() {
@Override
public void handleRequest(final HttpServerExchange exchange) throws Exception {
exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/plain");
exchange.getResponseSender().send("Hello World");
}
})
.setHandler(Handlers.routing().post("/xml", blockingHandler))
.build();
server.start();
Run Code Online (Sandbox Code Playgroud)
起初我试图使用普通的httpHandler,但是却引发了错误.
java.lang.IllegalStateException: UT000035: Cannot get stream as startBlocking has not been invoked
Run Code Online (Sandbox Code Playgroud)
经过一些研究后,我使用了Blockoverflow上的建议,然后使用了BlockingHandler.我不再收到上面的错误,但现在处理程序挂起.
这是处理程序的代码(为了清楚起见,我删除了异常处理):
HttpHandler httpHandler = new HttpHandler() {
@Override
public void handleRequest(HttpServerExchange exchange) throws Exception {
StringBuilder builder = new StringBuilder( );
try(InputStream inputStream = exchange.getInputStream()){
int line;
while( ( line = inputStream.read() ) != -1 ) { …Run Code Online (Sandbox Code Playgroud) 我正在使用 Ktor HttpClient(CIO) 向 HTTP API 发出请求,该 API 的响应使用分块传输编码。
在调用使用分块传输编码的 API 时,是否可以使用 Ktor HttpClient(CIO) 来访问 HttpResponse 中的各个 Http 块?
说我试图通过分块编码发送的正文包括"\ r \n",我如何避免被解释为块分隔符?
例如"你所有的基地都是\ r \n属于我们"
我知道我只需sleep()在输出中引入一个就可以在PHP中生成分块响应.
但是也可以在PHP中生成Trailer HTTP部分吗?如果没有,一般在Apache 2.2中是否可能?
我需要它用于测试目的.
我正在验证我的应用程序是否处理通过分块编码模式传递的文件内容.我不确定对httpd.conf文件进行了哪些更改以通过Apache强制进行分块编码.是否可以使用Apache服务器执行此操作,如果不是更简单的解决方案?我正在使用Apache 2.4.2和HTTP 1.1.
默认情况下,在Apache中保持活动状态为On,在使用wireshark进行测试时,我看不到数据是分块的.
编辑:添加更多信息:
我正在制作一个Clojure Web应用程序,该应用程序使用分块的HTTP响应将数据流式传输到客户端。当我使用本地运行它时,此方法效果很好foreman,但是当将其部署到Heroku时,它无法正常运行。
可以在我的github上找到一个展示这种行为的最小示例。前端(中的resources/index.html)执行AJAX GET请求,并在响应块到达时打印它们。服务器使用http-kit每秒向连接的客户端发送一个新块。按照设计,HTTP请求永远不会完成。
当将相同的代码部署到Heroku时,发送第一个块后,服务器将立即关闭HTTP连接。似乎是Heroku的路由网格导致了这种断开连接的发生。
这也可以通过使用curl执行GET请求来看到:
$ curl -v http://arcane-headland-2284.herokuapp.com/stream
* About to connect() to arcane-headland-2284.herokuapp.com port 80 (#0)
* Trying 54.243.166.168...
* Adding handle: conn: 0x6c3be0
* Adding handle: send: 0
* Adding handle: recv: 0
* Curl_addHandleToPipeline: length: 1
* - Conn 0 (0x6c3be0) send_pipe: 1, recv_pipe: 0
* Connected to arcane-headland-2284.herokuapp.com (54.243.166.168) port 80 (#0)
> GET /stream HTTP/1.1
> User-Agent: curl/7.31.0
> Host: arcane-headland-2284.herokuapp.com
> Accept: */*
>
< HTTP/1.1 …Run Code Online (Sandbox Code Playgroud) 加载后,一切正常,hmr工作正常。然后出现此错误。
GET http://localhost:3000/__webpack_hmr net::ERR_INCOMPLETE_CHUNKED_ENCODING
Run Code Online (Sandbox Code Playgroud)
就像webpackdevserver有点崩溃然后重新启动,需要几秒钟,然后hmr才能再次工作
[HMR] connected
Run Code Online (Sandbox Code Playgroud)
然后是“崩溃”,依此类推...
看来我仅在Chrome(版本55)中有此问题(已通过mozilla测试,并且未出现此问题)。
我可能错过了webpack或node conf中的某些内容,但是找不到文档中的某些内容。
任何想法如何解决这个问题?
//在webpack conf下面
const path = require('path');
const merge = require('webpack-merge');
const TARGET = process.env.NODE_ENV;
process.env.BABEL_ENV = TARGET;
const webpack = require('webpack');
const NpmInstallPlugin = require('npm-install-webpack-plugin');
const PATHS = {
app: path.join(__dirname, 'client'),
build: path.join(__dirname, 'build')
};
const common = {
entry: {
app: [PATHS.app, 'webpack-hot-middleware/client']
},
resolve: {
extensions: ['', '.js', '.jsx']
},
output: {
path: PATHS.build,
filename: 'bundle.js',
publicPath: '/'
},
module: {
loaders: [
{
test: …Run Code Online (Sandbox Code Playgroud)