HTTPS下開發(fā)若干注意事項(xiàng)

開發(fā)隨著HTTPS的普及,很多應(yīng)用都需要HTTPS了,在實(shí)際開發(fā)中,對(duì)于HTTPS的應(yīng)用,我總結(jié)了一下一些需要注意的地方,如果不全,歡迎補(bǔ)充。

1. 訪問速度

以前大家都不采用HTTPS的原因,除了一個(gè)花錢之外,就是嫌棄速度慢了,不過隨著瀏覽器的發(fā)展,這個(gè)已經(jīng)不在是一個(gè)很大問題了。有人專門做過一個(gè)測(cè)試,見這里https://www.keycdn.com/blog/https-performance-overhead/?

2. 資源加載

在HTTPS的應(yīng)用里,如果加載了HTTP的請(qǐng)求,不同瀏覽器的行為有一些不一樣。

IE瀏覽器/FireFox/Safari/Chrome對(duì)于script之類的則直接禁止加載,同時(shí)地址欄上有個(gè)警告提示,圖片則能正常瀏覽。

360瀏覽器的兼容模式都正常,極速模式和Chrome行為一樣。


所以如果在HTTPS應(yīng)用里,所有的請(qǐng)求都應(yīng)該是HTTPS鏈接,我的建議是對(duì)于應(yīng)用內(nèi)的資源可以采用相對(duì)路徑,對(duì)于外部資源則需要HTTPS。

比如好的做法是采用//地址方法,這樣如果是HTTP模式,則加載HTTP資源,HTTPS則加載HTTPS 資源。

HTML里的資源類似這種寫法:

HTML: <img src="http://cdn.domain.com/logo.png" />

CSS:.class { background: url(//cdn.domain.com/logo.png); }

這并不是什么新鮮玩意,只要符合RFC 1808 Section 4,RFC 2396 Section 5.2,RFC 3986 Section 5.2規(guī)范的瀏覽都支持這種模式,包括IE7和IE8在內(nèi),不過需要注意的一點(diǎn)的是,IE7和IE8會(huì)下載2次。

可以見這里:http://stackoverflow.com/questions/6785442/browser-support-for-urls-beginning-with-double-slash

3. Cookie

同一的域名下的Cookie是可以區(qū)分開來的,默認(rèn)的是HTTP下Cookie會(huì)帶到HTTPS下,HTTPS下的Cookie是不會(huì)帶到HTTP下,如果要2者互通,需要設(shè)置Cookie的Secure標(biāo)記為false。

詳細(xì)見這里:https://en.wikipedia.org/wiki/HTTP_cookie#HttpOnly_cookie

Java的代碼如下:cookie.setSecure(false)

否則的話,你會(huì)發(fā)現(xiàn)HTTPS寫的Cookie,在其他HTTP下面讀取不到

4. 開發(fā)環(huán)境

因?yàn)椴捎肏TTPS后,就無法采用fiddler/charles等代理工具用來調(diào)試請(qǐng)求,所以最好是應(yīng)用同時(shí)能夠支持HTTP模式,這樣開發(fā)過程中采用HTTP,到了生產(chǎn)環(huán)境后就切換到HTTPS。

我的方法是Nginx + HTTP,Nginx部署HTTPS,后端應(yīng)用只采用http,這樣開發(fā)也是用HTTP,如果是HTTPS模式,則由Nginx在HTTP HEADER里設(shè)置一個(gè)變量,標(biāo)記當(dāng)前是HTTPS模式。

location / {

? ?proxy_passhttp://127.0.0.1:8080;

? ? proxy_set_header Host $host;

? ? proxy_set_headerX-HTTP-SECURE TRUE;

? ? ?proxy_set_header X-Real-IP$remote_addr;

? ? proxy_set_header X-Forwarded-For$proxy_add_x_forwarded_for;

}

這樣,開發(fā)就不需要部署HTTPS證書了,只是在HTTP模式下開發(fā)。

5. Java

Java里訪問有些HTTPS網(wǎng)站會(huì)報(bào)錯(cuò),是因?yàn)閷?duì)方HTTPS的證書(比如證書等級(jí)不夠)或者配置問題,對(duì)于確定可信的網(wǎng)站,可以繞過HTTPS證書。

private static voidtrustAllHttpsCertificates()throwsException ? ?{

javax.net.ssl.TrustManager[]trustAllCerts=newjavax.net.ssl.TrustManager[1];

javax.net.ssl.TrustManagertm=newmiTM();

trustAllCerts[0] =tm;

javax.net.ssl.SSLContextsc= javax.net.ssl.SSLContext.getInstance("SSL");

sc.init(null,trustAllCerts,null);

javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

}


如果還有其他,我想到了再補(bǔ)充。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,537評(píng)論 19 139
  • /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home...
    光劍書架上的書閱讀 4,183評(píng)論 2 8
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,936評(píng)論 25 709
  • 從三月份找實(shí)習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,789評(píng)論 11 349
  • 當(dāng)你的心告訴你,要不斷你向前!向前再向前的時(shí)候——你很可能遇到了一個(gè)傳銷組織 <( ̄︶ ̄)> 剛剛的對(duì)話依稀可見,...
    番茄洋柿子閱讀 355評(píng)論 0 1

友情鏈接更多精彩內(nèi)容