瀏覽器如何將你的http請求轉為https請求?

cswhl發表於2020-11-26

1、問題

向瀏覽器中輸入“taobao.com” “www.taobao.com” “http://www.taobao.com”,最終瀏覽器的顯示卻變成“https://world.taobao.com/”,如何實現的?

2、實現

實現的機制就是HTTP重定向

什麼是HTTP重定向?

當瀏覽器向伺服器傳送一個url請求,然後伺服器返回給瀏覽器一個響應,告訴瀏覽器按它響應中提供的url重新發起請求,如圖
HTTP重定向

常見重定向

301:永久重定向,其它方法可能變更為GET

302:臨時重定向,其它方法可能變更為GET

http請求轉為https請求

  • 1 “taobao.com” ==>>“https://www.taobao.com”

    淘寶為擴大網路搜尋流量購買了一些相似的域名,如taobao.com,然後將這些域名都重定位(類似於Nginx的重定位機制)到“www.taobao.com”,當你訪問這些相似域名時,瀏覽器就會按照伺服器響應的應重定向要求,向真正的域名發起請求
  • 2 “http://www.taobao.com” ==>>“https://www.taobao.com”

    http預設埠為80,而https預設埠為443

    當瀏覽器傳送“http://www.taobao.com”url請求時,伺服器的80埠監聽到該請求後返回包含重定位url的響應,告訴瀏覽器應訪問443埠,如nginx配置如下:
server {
    listen       80
    listen       443 ssl;
    server_name blog.yoodb.com;
    charset UTF-8;
    ssl_certificate   /usr/local/nginx/conf/ssl/blog/2539791_blog.yoodb.com.pem;
    ssl_certificate_key  /usr/local/nginx/conf/ssl/blog/2539791_blog.yoodb.com.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    if ($scheme = http) {
        return 301 https://$host$request_uri;
    }
    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_pass http://172.17.6.114:8082;
    }
    location ~*/upload/images/ { 
        expires 1h;
        root /mnt/app/project/files;
    }
    location ~*/dynamic/images/ {
        expires 1h;
        root /mnt/app/project/files;
    }
}

3、為何伺服器都要實用https?

主要目的當然是為了抵禦網路攻擊。http協議傳送的明文資訊,而https協議則使用非對稱加密協議TLS(通過金鑰認證、公鑰加密私鑰解,私鑰加密公鑰解)將超文字資訊加密後在網路上傳輸,使得資訊不易洩漏

伺服器通過增加響應頭“Strict-Transport-Security: max-age=31536000”告訴瀏覽器應在一年內都使用HSTS(HTTP Strict Transport Security)策略,從而告訴瀏覽器在這個時間段應自覺使用https方式發起請求,(這也是為何伺服器只會傳送一次http->https重定向的原因,更主要的是可以避免瀏覽器頻繁訪問80埠時被中間人劫持)。而使用HSTS策略的伺服器也不會接受HTTP請求。

參考

1 輸入網址的時候,瀏覽器是如何判斷你是http協議還是https協議的
2 為何實用https
3 TLS協議掃盲(握手,非對稱加密,證書,電子簽名等)
4 HTTP Strict Transport Security

相關文章