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

資訊專欄INFORMATION COLUMN

在thinkjs框架中,如何判斷請求是否為https協議請求

MobService / 3257人閱讀

摘要:在框架中,如何判斷請求是否為協議請求首先,我們要明白一個點,在官方文檔模塊中,官方闡述了是系統原生的對象從整篇文檔來看,模塊并沒有實現類似的,的內容。因此我們無法從請求上直接獲取該請求是還是。

在thinkjs框架中,如何判斷請求是否為https協議請求

首先,我們要明白一個點,在Think-js 官方文檔 2.2 - http模塊中,官方闡述了

http.req , http.res是系統原生的request,response對象!

從整篇api文檔來看,http模塊并沒有實現類似express的 req.protocol,req.secure的內容。因此我們無法從請求上直接獲取該請求是http還是https。

怎么辦?

了解如何獲取協議類型,我們需要先有一些內容需要

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.

簡而言之https就是建立在安全套接層(ssl)或安全傳輸層協議(tls)上的安全通信協議,被廣泛應用于英特網。不過目前來說,我們真正廣泛使用的是TLS協議

如果使用TLS,我們該怎么判斷

當使用TLS的時候 net.Socket會收到一個值為byte 22的頭數據,該數據表明了握手時使用了TLS協議

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");
        });
    });
}

顯然這個不適合我們,因為我們目前需要的是在控制器里獲取到protocol類型。

另一種判斷方法

如果我們愿意翻看koa或者express的源碼,我們可以很輕易的獲取到我們想要的知識

以下是express對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的時候,會在原生的connection對象上攜帶加密信息,如果非TLS,這個request.connection.encrypted將會是undefined。如果express設置了信任代理,會先檢測設置的信任代理的地址是否與遠端地址相符,或者頭信息中攜帶"X-Forwarded-Proto"(可能是來自于Nginx或其他代理時加上的協議指示),也會返回相應protocol類型。

在thinkjs中,沒有類似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功能略。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/86776.html

相關文章

  • 使用 vue + thinkjs 開發博客程序記錄

    摘要:一入冬懶癌發作,給自己找點事干。之前博客程序寫過幾次,的寫過兩次,用寫過,隨著版本從升級到之前的博客程序也做過升級。這里主要記錄一下開發過程中遇到的問題和解決方法。后端使用守護進程即可。 一入冬懶癌發作,給自己找點事干。之前博客程序寫過幾次,php 的寫過兩次,nodejs 用 ThinkJS 寫過,隨著 ThinkJS 版本從1.x 升級到 2.x 之前的博客程序也做過升級。但是因為...

    Mike617 評論0 收藏0
  • 后臺管控系統架子structure-admin,包含vue前端和thinkjs后端

    摘要:為此框架提供了模型功能,方便操作數據庫。請求攔截統一處理所有的請求和響應的,通過配置為頭部增加字段,其內容為,通過配置,當后端接口返回未授權,讓用戶重新登錄。 之前寫過一篇vue初始化項目,構建vuex的后臺管理項目架子,這個structure-admin-web所擁有的功能 接下來,針對structure-admin-web的不足,進行了補充,開發了具有登陸的structure-ad...

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

    摘要:最近在用寫自己的博客,發現總是掉到的坑,于是就好好八一八這個小甜餅,沒想到居然還說很有意思的,每一個知識點都能拉出一條大魚,想想自己之前對,簡直就是它認識我,我只能叫出他的名字。 最近在用thinkjs寫自己的博客,發現總是掉到cookie的坑,于是就好好八一八這個小甜餅,沒想到居然還說很有意思的,每一個知識點都能拉出一條大魚,想想自己之前對cookie,簡直就是它認識我,我只能叫出他...

    Donne 評論0 收藏0
  • 【譯】Nodejs應用安全備忘錄

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

    Loong_T 評論0 收藏0

發表評論

0條評論

MobService

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<