這是一篇信息整理文章,能夠看成工具來看html
HTTP全稱是超文本傳輸協議,構建於TCP之上,屬於應用層協議。算法
請求或響應在傳輸途中,遭攻擊者攔截並篡改內容的攻擊被稱爲中間人攻擊(Man-in-the-Middle attack,MITM)瀏覽器
HTTPS是在通訊接口部分用 TLS(Transport Layer Security)協議。緩存
HTTPS 協議的主要功能基本都依賴於 TLS/SSL 協議,TLS/SSL 的功能實現主要依賴於三類基本算法:散列函數 、對稱加密和非對稱加密,其利用非對稱加密實現身份認證和密鑰協商,對稱加密算法採用協商的密鑰對數據加密,基於散列函數驗證信息的完整性。安全
結合三類算法的特色,TLS 的基本工做方式是bash
在創業HTTPS服務器以前,服務器首先須要建立公鑰、私鑰及證書,步驟以下服務器
openssl genrsa -out privatekey.pem 1024
複製代碼
openssl req -new -key privatekey.pem -out certrequest.csr
複製代碼
證書應該是一個通過證書授證中心簽名的文件,該證書文件內包含了服務器端提供的公鑰以及證書的辦法機構等信息。網絡
openssl x509 -req -in certrequest.csr -signkey privatekey.pem -out certificate.pem
複製代碼
在具有了證書文件後,可使用該證書文件建立一個pfx文件。 所謂pfx文件,是指該文件內容必須符合公鑰加密技術12號標準。函數
openssl pkcs12 -export -in certificate.pem -inkey privatekey.pem -out certificate.pfx
複製代碼
https.createServer(options,[requestListener]);
複製代碼
let https = require('https');
let fs = require('fs');
let path = require('path');
let key = fs.readFileSync(path.join(__dirname, 'privatekey.pem'));
let cert = fs.readFileSync(path.join(__dirname, 'certificate.pem'));
let opts = {
key,
cert
};
let server = https.createServer(opts, function (req, res) {
console.log(req.url);
if (req.url != '/favicon.ico') {
res.setHeader('Content-Type', 'text/html');
res.write(`<html><head><meta charset="utf8"/></head><body>hello</body></html>`);
res.end();
}
});
server.listen(443, function () {
console.log('服務器端開始監聽!');
//server.close();
});
server.on('close', function () {
console.log('服務器已被關閉!');
});
複製代碼
在https模塊中,可使用request方法向其它使用HTTPS協議的網站請求數據工具
let req = https.request(options,callback);
複製代碼
let https = require('https');
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"
let options = {
hostname: '123.57.77.210',
port: 443,
path: '/',
method: 'GET',
agent: false
}
let req = https.request(options, function (res) {
console.log(res.statusCode);
console.log(res.headers);
res.setEncoding('utf8');
res.on('data', function (chunk) {
console.log(chunk);
});
});
req.end();
複製代碼
首部字段
協商類型
狀態碼負責表示客戶端請求的返回結果、標記服務器端是否正常、通知出現的錯誤
類別 緣由短語
首部字段名 | 說明 |
---|---|
Cache-Control | 控制緩存行爲 |
Connection | 連接的管理 |
Date | 報文日期 |
Pragma | 報文指令 |
Trailer | 報文尾部的首部 |
Trasfer-Encoding | 指定報文主體的傳輸編碼方式 |
Upgrade | 升級爲其餘協議 |
Via | 代理服務器信息 |
Warning | 錯誤通知 |
首部字段名 | 說明 |
---|---|
Accept | 用戶代理可處理的媒體類型 |
Accept-Charset | 優先的字符集 |
Accept-Encoding | 優先的編碼 |
Accept-Langulage | 優先的語言 |
Authorization | Web認證信息 |
Expect | 期待服務器的特定行爲 |
From | 用戶的電子郵箱地址 |
Host | 請求資源所在的服務器 |
If-Match | 比較實體標記 |
If-Modified-Since | 比較資源的更新時間 |
If-None-Match | 比較實體標記 |
If-Range | 資源未更新時發送實體Byte的範圍請求 |
If-Unmodified-Since | 比較資源的更新時間(和If-Modified-Since相反) |
Max-Forwards | 最大傳輸跳數 |
Proxy-Authorization | 代理服務器須要客戶端認證 |
Range | 實體字節範圍請求 |
Referer | 請求中的URI的原始獲取方 |
TE | 傳輸編碼的優先級 |
User-Agent | HTTP客戶端程序的信息 |
首部字段名 | 說明 |
---|---|
Accept-Ranges | 是否接受字節範圍 |
Age | 資源的建立時間 |
ETag | 資源的匹配信息 |
Location | 客戶端重定向至指定的URI |
Proxy-Authenticate | 代理服務器對客戶端的認證信息 |
Retry-After | 再次發送請求的時機 |
Server | 服務器的信息 |
Vary | 代理服務器緩存的管理信息 |
www-Authenticate | 服務器對客戶端的認證 |
首部字段名 | 說明 |
---|---|
Allow | 資源可支持的HTTP方法 |
Content-Encoding | 實體的編碼方式 |
Content-Language | 實體的天然語言 |
Content-Length | 實體的內容大小(字節爲單位) |
Content-Location | 替代對應資源的URI |
Content-MD5 | 實體的報文摘要 |
Content-Range | 實體的位置範圍 |
Content-Type | 實體主體的媒體類型 |
Expires | 實體過時時間 |
Last-Modified | 資源的最後修改時間 |
這些信息頭是作壓縮,緩存,範圍請求等功能的必需條件,想了解的能夠看看我寫的靜態服務。