sendFile
用於發送文件,並且還從文件中找出一些有趣的標題(如內容長度)。對於HEAD
請求我理想情況下需要完全相同的標題,但只是跳過正文。對HEAD請求使用快遞sendFile
在API中似乎沒有這個選項。也許我可以重寫響應對象中的某些東西來阻止它發送任何東西?
這裏就是我的了:
res.sendFile(file, { headers: hdrs, lastModified: false, etag: false })
有沒有人解決了這個?
sendFile
用於發送文件,並且還從文件中找出一些有趣的標題(如內容長度)。對於HEAD
請求我理想情況下需要完全相同的標題,但只是跳過正文。對HEAD請求使用快遞sendFile
在API中似乎沒有這個選項。也許我可以重寫響應對象中的某些東西來阻止它發送任何東西?
這裏就是我的了:
res.sendFile(file, { headers: hdrs, lastModified: false, etag: false })
有沒有人解決了這個?
正如Robert Klep已經寫過的,如果請求方法是HEAD,sendFile
已經具有發送標頭和不發送主體的所需行爲。
除此之外,Express已經處理了HEAD請求,用於定義GET處理程序的路由。所以你甚至不需要明確定義任何HEAD處理程序。
實施例:
let app = require('express')();
let file = __filename;
let hdrs = {'X-Custom-Header': '123'};
app.get('/file', (req, res) => {
res.sendFile(file, { headers: hdrs, lastModified: false, etag: false });
});
app.listen(3322,() => console.log('Listening on 3322'));
這發出GET上/file
它自己的源代碼可以與證明:
$ curl -v -X GET localhost:3322/file
* Hostname was NOT found in DNS cache
* Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 3322 (#0)
> GET /file HTTP/1.1
> User-Agent: curl/7.35.0
> Host: localhost:3322
> Accept: */*
>
< HTTP/1.1 200 OK
< X-Powered-By: Express
< X-Custom-Header: 123
< Accept-Ranges: bytes
< Cache-Control: public, max-age=0
< Content-Type: application/javascript
< Content-Length: 267
< Date: Tue, 11 Apr 2017 10:45:36 GMT
< Connection: keep-alive
<
[...]
的[...]
是未包括在這裏所述主體。 無需添加任何新的處理程序,這也將工作:
$ curl -v -X HEAD localhost:3322/file
* Hostname was NOT found in DNS cache
* Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 3322 (#0)
> HEAD /file HTTP/1.1
> User-Agent: curl/7.35.0
> Host: localhost:3322
> Accept: */*
>
< HTTP/1.1 200 OK
< X-Powered-By: Express
< X-Custom-Header: 123
< Accept-Ranges: bytes
< Cache-Control: public, max-age=0
< Content-Type: application/javascript
< Content-Length: 267
< Date: Tue, 11 Apr 2017 10:46:29 GMT
< Connection: keep-alive
<
這是相同的,但沒有身體。
嗯。這是比我已經接受的@robertklep更詳盡的答案。切換形式不好嗎? –
您不能使用該方法並只請求標頭嗎?或者我可能不瞭解你的需求。 –
如果您將'server.head'映射到與'server.get'相同的函數中,您最終也會根據頭部請求發送主體。 –