mirror of https://github.com/grpc/grpc-node.git
grpc-js: Make some headers conform to what the other library does
This commit is contained in:
parent
44e927edc3
commit
ae18f3ce92
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@grpc/grpc-js",
|
"name": "@grpc/grpc-js",
|
||||||
"version": "0.7.6",
|
"version": "0.7.7",
|
||||||
"description": "gRPC Library for Node - pure JS implementation",
|
"description": "gRPC Library for Node - pure JS implementation",
|
||||||
"homepage": "https://grpc.io/",
|
"homepage": "https://grpc.io/",
|
||||||
"repository": "https://github.com/grpc/grpc-node/tree/master/packages/grpc-js",
|
"repository": "https://github.com/grpc/grpc-node/tree/master/packages/grpc-js",
|
||||||
|
|
|
@ -353,7 +353,11 @@ export class Http2CallStream implements Call {
|
||||||
}
|
}
|
||||||
|
|
||||||
private handleTrailers(headers: http2.IncomingHttpHeaders) {
|
private handleTrailers(headers: http2.IncomingHttpHeaders) {
|
||||||
this.trace('received HTTP/2 trailing headers frame');
|
let headersString = '';
|
||||||
|
for (const header of Object.keys(headers)) {
|
||||||
|
headersString += '\t\t' + header + ': ' + headers[header] + '\n'
|
||||||
|
}
|
||||||
|
this.trace('Received server trailers:\n' + headersString);
|
||||||
let metadata: Metadata;
|
let metadata: Metadata;
|
||||||
try {
|
try {
|
||||||
metadata = Metadata.fromHttp2Headers(headers);
|
metadata = Metadata.fromHttp2Headers(headers);
|
||||||
|
@ -366,6 +370,7 @@ export class Http2CallStream implements Call {
|
||||||
const receivedStatus = Number(metadataMap['grpc-status']);
|
const receivedStatus = Number(metadataMap['grpc-status']);
|
||||||
if (receivedStatus in Status) {
|
if (receivedStatus in Status) {
|
||||||
code = receivedStatus;
|
code = receivedStatus;
|
||||||
|
this.trace('received status code ' + receivedStatus + ' from server');
|
||||||
}
|
}
|
||||||
metadata.remove('grpc-status');
|
metadata.remove('grpc-status');
|
||||||
}
|
}
|
||||||
|
@ -373,6 +378,7 @@ export class Http2CallStream implements Call {
|
||||||
if (typeof metadataMap['grpc-message'] === 'string') {
|
if (typeof metadataMap['grpc-message'] === 'string') {
|
||||||
details = decodeURI(metadataMap['grpc-message']);
|
details = decodeURI(metadataMap['grpc-message']);
|
||||||
metadata.remove('grpc-message');
|
metadata.remove('grpc-message');
|
||||||
|
this.trace('received status details string "' + details + '" from server');
|
||||||
}
|
}
|
||||||
const status: StatusObject = { code, details, metadata };
|
const status: StatusObject = { code, details, metadata };
|
||||||
let finalStatus;
|
let finalStatus;
|
||||||
|
@ -407,7 +413,11 @@ export class Http2CallStream implements Call {
|
||||||
subchannel.addDisconnectListener(this.disconnectListener);
|
subchannel.addDisconnectListener(this.disconnectListener);
|
||||||
subchannel.callRef();
|
subchannel.callRef();
|
||||||
stream.on('response', (headers, flags) => {
|
stream.on('response', (headers, flags) => {
|
||||||
this.trace('received HTTP/2 headers frame');
|
let headersString = '';
|
||||||
|
for (const header of Object.keys(headers)) {
|
||||||
|
headersString += '\t\t' + header + ': ' + headers[header] + '\n'
|
||||||
|
}
|
||||||
|
this.trace('Received server headers:\n' + headersString);
|
||||||
switch (headers[':status']) {
|
switch (headers[':status']) {
|
||||||
// TODO(murgatroid99): handle 100 and 101
|
// TODO(murgatroid99): handle 100 and 101
|
||||||
case 400:
|
case 400:
|
||||||
|
@ -568,6 +578,7 @@ export class Http2CallStream implements Call {
|
||||||
}
|
}
|
||||||
|
|
||||||
cancelWithStatus(status: Status, details: string): void {
|
cancelWithStatus(status: Status, details: string): void {
|
||||||
|
this.trace('cancelWithStatus code: ' + status + ' details: "' + details + '"');
|
||||||
this.destroyHttp2Stream();
|
this.destroyHttp2Stream();
|
||||||
this.endCall({ code: status, details, metadata: new Metadata() });
|
this.endCall({ code: status, details, metadata: new Metadata() });
|
||||||
}
|
}
|
||||||
|
|
|
@ -169,8 +169,8 @@ export class CompressionFilter extends BaseFilter implements Filter {
|
||||||
private receiveCompression: CompressionHandler = new IdentityHandler();
|
private receiveCompression: CompressionHandler = new IdentityHandler();
|
||||||
async sendMetadata(metadata: Promise<Metadata>): Promise<Metadata> {
|
async sendMetadata(metadata: Promise<Metadata>): Promise<Metadata> {
|
||||||
const headers: Metadata = await metadata;
|
const headers: Metadata = await metadata;
|
||||||
headers.set('grpc-encoding', 'identity');
|
|
||||||
headers.set('grpc-accept-encoding', 'identity,deflate,gzip');
|
headers.set('grpc-accept-encoding', 'identity,deflate,gzip');
|
||||||
|
headers.set('accept-encoding', 'identity,gzip');
|
||||||
return headers;
|
return headers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -298,10 +298,16 @@ class DnsResolver implements Resolver {
|
||||||
IPV6_REGEX.exec(target) ||
|
IPV6_REGEX.exec(target) ||
|
||||||
IPV6_BRACKET_REGEX.exec(target);
|
IPV6_BRACKET_REGEX.exec(target);
|
||||||
if (ipMatch) {
|
if (ipMatch) {
|
||||||
|
if (ipMatch[2]) {
|
||||||
|
return ipMatch[1] + ':' + ipMatch[2];
|
||||||
|
}
|
||||||
return ipMatch[1];
|
return ipMatch[1];
|
||||||
}
|
}
|
||||||
const dnsMatch = DNS_REGEX.exec(target);
|
const dnsMatch = DNS_REGEX.exec(target);
|
||||||
if (dnsMatch) {
|
if (dnsMatch) {
|
||||||
|
if (dnsMatch[2]) {
|
||||||
|
return dnsMatch[1] + ':' + dnsMatch[2];
|
||||||
|
}
|
||||||
return dnsMatch[1];
|
return dnsMatch[1];
|
||||||
}
|
}
|
||||||
throw new Error(`Failed to parse target ${target}`);
|
throw new Error(`Failed to parse target ${target}`);
|
||||||
|
|
|
@ -298,8 +298,6 @@ export class Subchannel {
|
||||||
return checkServerIdentity(sslTargetNameOverride, cert);
|
return checkServerIdentity(sslTargetNameOverride, cert);
|
||||||
};
|
};
|
||||||
connectionOptions.servername = sslTargetNameOverride;
|
connectionOptions.servername = sslTargetNameOverride;
|
||||||
} else {
|
|
||||||
connectionOptions.servername = getDefaultAuthority(this.channelTarget);
|
|
||||||
}
|
}
|
||||||
if (socket) {
|
if (socket) {
|
||||||
connectionOptions.socket = socket;
|
connectionOptions.socket = socket;
|
||||||
|
@ -589,6 +587,11 @@ export class Subchannel {
|
||||||
headers[HTTP2_HEADER_PATH] = callStream.getMethod();
|
headers[HTTP2_HEADER_PATH] = callStream.getMethod();
|
||||||
headers[HTTP2_HEADER_TE] = 'trailers';
|
headers[HTTP2_HEADER_TE] = 'trailers';
|
||||||
const http2Stream = this.session!.request(headers);
|
const http2Stream = this.session!.request(headers);
|
||||||
|
let headersString = '';
|
||||||
|
for (const header of Object.keys(headers)) {
|
||||||
|
headersString += '\t\t' + header + ': ' + headers[header] + '\n'
|
||||||
|
}
|
||||||
|
trace('Starting stream with headers\n' + headersString);
|
||||||
callStream.attachHttp2Stream(http2Stream, this);
|
callStream.attachHttp2Stream(http2Stream, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue