国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

在thinkjs框架中,如何判斷請(qǐng)求是否為https協(xié)議請(qǐng)求

MobService / 3261人閱讀

摘要:在框架中,如何判斷請(qǐng)求是否為協(xié)議請(qǐng)求首先,我們要明白一個(gè)點(diǎn),在官方文檔模塊中,官方闡述了是系統(tǒng)原生的對(duì)象從整篇文檔來(lái)看,模塊并沒(méi)有實(shí)現(xiàn)類似的,的內(nèi)容。因此我們無(wú)法從請(qǐng)求上直接獲取該請(qǐng)求是還是。

在thinkjs框架中,如何判斷請(qǐng)求是否為https協(xié)議請(qǐng)求

首先,我們要明白一個(gè)點(diǎn),在Think-js 官方文檔 2.2 - http模塊中,官方闡述了

http.req , http.res是系統(tǒng)原生的request,response對(duì)象!

從整篇api文檔來(lái)看,http模塊并沒(méi)有實(shí)現(xiàn)類似express的 req.protocol,req.secure的內(nèi)容。因此我們無(wú)法從請(qǐng)求上直接獲取該請(qǐng)求是http還是https。

怎么辦?

了解如何獲取協(xié)議類型,我們需要先有一些內(nèi)容需要

https是什么?

HTTPS (also called HTTP over TLS, HTTP over SSL,and HTTP Secure]) is a protocol for secure communication over a computer network which is widely used on the Internet.

簡(jiǎn)而言之https就是建立在安全套接層(ssl)或安全傳輸層協(xié)議(tls)上的安全通信協(xié)議,被廣泛應(yīng)用于英特網(wǎng)。不過(guò)目前來(lái)說(shuō),我們真正廣泛使用的是TLS協(xié)議

如果使用TLS,我們?cè)撛趺磁袛?/b>

當(dāng)使用TLS的時(shí)候 net.Socket會(huì)收到一個(gè)值為byte 22的頭數(shù)據(jù),該數(shù)據(jù)表明了握手時(shí)使用了TLS協(xié)議

var net = require("net");
var baseAddress = 3000;
net.createServer(tcpConnection).listen(baseAddress);
function tcpConnection(conn) {
    conn.once("data", function (buf) {
        var address = (buf[0] === 22) ? console.log("https") : console.log("http");
        });
    });
}

顯然這個(gè)不適合我們,因?yàn)槲覀兡壳靶枰氖窃诳刂破骼铽@取到protocol類型。

另一種判斷方法

如果我們?cè)敢夥磌oa或者express的源碼,我們可以很輕易的獲取到我們想要的知識(shí)

以下是express對(duì)protocol的處理

/**
 * Return the protocol string "http" or "https"
 * when requested with TLS. When the "trust proxy"
 * setting trusts the socket address, the
 * "X-Forwarded-Proto" header field will be trusted
 * and used if present.
 *
 * If you"re running behind a reverse proxy that
 * supplies https for you this may be enabled.
 *
 * @return {String}
 * @public
 */

defineGetter(req, "protocol", function protocol(){
  var proto = this.connection.encrypted
    ? "https"
    : "http";
  var trust = this.app.get("trust proxy fn");

  if (!trust(this.connection.remoteAddress, 0)) {
    return proto;
  }

  // Note: X-Forwarded-Proto is normally only ever a
  //       single value, but this is to be safe.
  proto = this.get("X-Forwarded-Proto") || proto;
  return proto.split(/s*,s*/)[0];
});

/**
 * Short-hand for:
 *
 *    req.protocol === "https"
 *
 * @return {Boolean}
 * @public
 */

defineGetter(req, "secure", function secure(){
  return this.protocol === "https";
});

從代碼中我們可以看出,node在使用TLS的時(shí)候,會(huì)在原生的connection對(duì)象上攜帶加密信息,如果非TLS,這個(gè)request.connection.encrypted將會(huì)是undefined。如果express設(shè)置了信任代理,會(huì)先檢測(cè)設(shè)置的信任代理的地址是否與遠(yuǎn)端地址相符,或者頭信息中攜帶"X-Forwarded-Proto"(可能是來(lái)自于Nginx或其他代理時(shí)加上的協(xié)議指示),也會(huì)返回相應(yīng)protocol類型。

在thinkjs中,沒(méi)有類似express app.set("trust proxy")的方法,所以我們直接在控制器里這樣寫就行了

// controller xxx.js

"use strict";

import Base from "./base.js";

function getProtocol(http) {
    let proto = http.req.connection.encrypted ? "https" : "http";
    proto = http. header("X-Forwarded-Proto") || proto;
    return proto.split(/s*,s*/)[0];
}

export default class extends Base {
  /**
   * index action
   * @return {Promise} []
   */
  * indexAction(){

    console.log("protocol:", getProtocol(this.http))

  }
}

整合獲取protocol功能略。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/86776.html

相關(guān)文章

  • 使用 vue + thinkjs 開(kāi)發(fā)博客程序記錄

    摘要:一入冬懶癌發(fā)作,給自己找點(diǎn)事干。之前博客程序?qū)戇^(guò)幾次,的寫過(guò)兩次,用寫過(guò),隨著版本從升級(jí)到之前的博客程序也做過(guò)升級(jí)。這里主要記錄一下開(kāi)發(fā)過(guò)程中遇到的問(wèn)題和解決方法。后端使用守護(hù)進(jìn)程即可。 一入冬懶癌發(fā)作,給自己找點(diǎn)事干。之前博客程序?qū)戇^(guò)幾次,php 的寫過(guò)兩次,nodejs 用 ThinkJS 寫過(guò),隨著 ThinkJS 版本從1.x 升級(jí)到 2.x 之前的博客程序也做過(guò)升級(jí)。但是因?yàn)?..

    Mike617 評(píng)論0 收藏0
  • 后臺(tái)管控系統(tǒng)架子structure-admin,包含vue前端和thinkjs后端

    摘要:為此框架提供了模型功能,方便操作數(shù)據(jù)庫(kù)。請(qǐng)求攔截統(tǒng)一處理所有的請(qǐng)求和響應(yīng)的,通過(guò)配置為頭部增加字段,其內(nèi)容為,通過(guò)配置,當(dāng)后端接口返回未授權(quán),讓用戶重新登錄。 之前寫過(guò)一篇vue初始化項(xiàng)目,構(gòu)建vuex的后臺(tái)管理項(xiàng)目架子,這個(gè)structure-admin-web所擁有的功能 接下來(lái),針對(duì)structure-admin-web的不足,進(jìn)行了補(bǔ)充,開(kāi)發(fā)了具有登陸的structure-ad...

    hosition 評(píng)論0 收藏0
  • 來(lái)聊一聊Cookie(小甜餅),及其涉及到的web安全吧

    摘要:最近在用寫自己的博客,發(fā)現(xiàn)總是掉到的坑,于是就好好八一八這個(gè)小甜餅,沒(méi)想到居然還說(shuō)很有意思的,每一個(gè)知識(shí)點(diǎn)都能拉出一條大魚,想想自己之前對(duì),簡(jiǎn)直就是它認(rèn)識(shí)我,我只能叫出他的名字。 最近在用thinkjs寫自己的博客,發(fā)現(xiàn)總是掉到cookie的坑,于是就好好八一八這個(gè)小甜餅,沒(méi)想到居然還說(shuō)很有意思的,每一個(gè)知識(shí)點(diǎn)都能拉出一條大魚,想想自己之前對(duì)cookie,簡(jiǎn)直就是它認(rèn)識(shí)我,我只能叫出他...

    Donne 評(píng)論0 收藏0
  • 【譯】Nodejs應(yīng)用安全備忘錄

    摘要:所以我們整理了一個(gè)應(yīng)用安全備忘錄,以幫助你在部署啟動(dòng)應(yīng)用程序的時(shí)候進(jìn)行安全檢查。這可以保護(hù)應(yīng)用程序不被攻擊。應(yīng)該用日志記錄下來(lái),而不是顯示給用戶。 本人的博客http://www.wjs.photo/,感興趣的可以看看哦,基于NodeJs框架ThinkJs 本文翻譯自 www.risingstack.com ,并非逐字逐句的翻譯,有錯(cuò)誤的地方請(qǐng)指出,謝謝啦 應(yīng)用程序的安全就像是你房間里...

    Loong_T 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

MobService

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<