Skip to content

Commit e4b84cd

Browse files
committed
Show HTTP trailers when present
1 parent 5c982e2 commit e4b84cd

File tree

4 files changed

+68
-1
lines changed

4 files changed

+68
-1
lines changed

src/components/view/http/http-details-pane.tsx

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import { HttpApiCard, HttpApiPlaceholderCard } from './http-api-card';
2727
import { HttpRequestCard } from './http-request-card';
2828
import { HttpResponseCard } from './http-response-card';
2929
import { HttpAbortedResponseCard } from './http-aborted-card';
30+
import { HttpTrailersCard } from './http-trailers-card';
3031
import { HttpPerformanceCard } from './http-performance-card';
3132
import { HttpExportCard } from './http-export-card';
3233
import { SelfSizedEditor } from '../../editor/base-editor';
@@ -303,6 +304,16 @@ export class HttpDetailsPane extends React.Component<{
303304
cards.push(this.renderRequestBody(exchange, apiExchange));
304305
}
305306

307+
if (exchange.request.rawTrailers?.length) {
308+
cards.push(<HttpTrailersCard
309+
{...this.cardProps.requestTrailers}
310+
type='request'
311+
httpVersion={exchange.httpVersion}
312+
requestUrl={exchange.request.parsedUrl}
313+
trailers={exchange.request.rawTrailers}
314+
/>);
315+
}
316+
306317
if (response === 'aborted') {
307318
cards.push(<HttpAbortedResponseCard
308319
key={this.cardProps.response.key}
@@ -322,6 +333,16 @@ export class HttpDetailsPane extends React.Component<{
322333
if (exchange.hasResponseBody()) {
323334
cards.push(this.renderResponseBody(exchange, apiExchange));
324335
}
336+
337+
if (exchange.isSuccessfulExchange() && exchange.response?.rawTrailers?.length) {
338+
cards.push(<HttpTrailersCard
339+
{...this.cardProps.responseTrailers}
340+
type='response'
341+
httpVersion={exchange.httpVersion}
342+
requestUrl={exchange.request.parsedUrl}
343+
trailers={exchange.response.rawTrailers}
344+
/>);
345+
}
325346
}
326347

327348
if (exchange.isWebSocket() && exchange.wasAccepted()) {
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import * as _ from 'lodash';
2+
import * as React from 'react';
3+
import { observer } from 'mobx-react';
4+
5+
import { RawTrailers } from '../../../types';
6+
import { Theme } from '../../../styles';
7+
8+
import {
9+
CollapsibleCard,
10+
CollapsibleCardProps,
11+
CollapsibleCardHeading
12+
} from '../../common/card';
13+
import { HeaderDetails } from './header-details';
14+
15+
interface HttpTrailersCardProps extends CollapsibleCardProps {
16+
type: 'request' | 'response',
17+
httpVersion: 1 | 2;
18+
requestUrl: URL;
19+
trailers: RawTrailers;
20+
}
21+
22+
export const HttpTrailersCard = observer((props: HttpTrailersCardProps) => {
23+
const { type, requestUrl, httpVersion, trailers } = props;
24+
25+
return <CollapsibleCard {...props} direction='left'>
26+
<header>
27+
<CollapsibleCardHeading onCollapseToggled={props.onCollapseToggled}>
28+
{ type === 'request' ? 'Request' : 'Response' } Trailers
29+
</CollapsibleCardHeading>
30+
</header>
31+
32+
<div>
33+
<HeaderDetails
34+
httpVersion={httpVersion}
35+
headers={trailers}
36+
requestUrl={requestUrl}
37+
/>
38+
</div>
39+
</CollapsibleCard>;
40+
});

src/model/http/exchange.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,7 @@ export class HttpExchange extends HTKEventBase {
211211
this.request.parsedUrl.search
212212
]
213213
.concat(..._.map(this.request.headers, (value, key) => `${key}: ${value}`))
214+
.concat(..._.map(this.request.trailers, (value, key) => `${key}: ${value}`))
214215
.concat(this.request.method)
215216
.join('\n')
216217
.toLowerCase();
@@ -329,7 +330,8 @@ export class HttpExchange extends HTKEventBase {
329330
this.searchIndex,
330331
response.statusCode.toString(),
331332
response.statusMessage.toString(),
332-
..._.map(response.headers, (value, key) => `${key}: ${value}`)
333+
..._.map(response.headers, (value, key) => `${key}: ${value}`),
334+
..._.map(response.trailers, (value, key) => `${key}: ${value}`)
333335
].join('\n').toLowerCase();
334336

335337
// Wrap the API promise to also add this response data (but lazily)

src/model/ui/ui-store.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,10 @@ const VIEW_CARD_KEYS = [
2222

2323
'request',
2424
'requestBody',
25+
'requestTrailers',
2526
'response',
2627
'responseBody',
28+
'responseTrailers',
2729

2830
'webSocketMessages',
2931
'webSocketClose',
@@ -191,8 +193,10 @@ export class UiStore {
191193

192194
'request': { collapsed: false },
193195
'requestBody': { collapsed: false },
196+
'requestTrailers': { collapsed: false },
194197
'response': { collapsed: false },
195198
'responseBody': { collapsed: false },
199+
'responseTrailers': { collapsed: false },
196200

197201
'webSocketMessages': { collapsed: false },
198202
'webSocketClose': { collapsed: false },

0 commit comments

Comments
 (0)