瀏覽器如何將你的http請求轉為https請求?
1、問題
向瀏覽器中輸入“taobao.com” “www.taobao.com” “http://www.taobao.com”,最終瀏覽器的顯示卻變成“https://world.taobao.com/”,如何實現的?
2、實現
實現的機制就是HTTP重定向
什麼是HTTP重定向?
當瀏覽器向伺服器傳送一個url請求,然後伺服器返回給瀏覽器一個響應,告訴瀏覽器按它響應中提供的url重新發起請求,如圖
常見重定向
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
相關文章
- 瀏覽器請求的旅程瀏覽器
- 複製瀏覽器請求到Postman瀏覽器Postman
- 你以為你請求的就是你想請求的嗎?
- 【轉】怎麼用PHP傳送HTTP請求(POST請求、GET請求)?PHPHTTP
- 支援https請求以及https請求的抓包HTTP
- http請求HTTP
- HTTP 請求HTTP
- Http請求相關(轉)HTTP
- 檢視瀏覽器請求的session 瀏覽器怎麼檢視session瀏覽器Session
- ajax 請求攜帶cookie 瀏覽器報錯Cookie瀏覽器
- dart系列之:瀏覽器中的舞者,用dart傳送HTTP請求Dart瀏覽器HTTP
- http請求概述HTTP
- HTTP請求方法HTTP
- http請求頭HTTP
- go http請求GoHTTP
- 教你玩轉HTTP—請求方法HTTP
- 如何使用 Python 通過 Tor 瀏覽器發出請求Python瀏覽器
- 小程式https請求,http網站升到httpsHTTP網站
- iOS開發 支援https請求以及https請求的抓包iOSHTTP
- Go如何響應http請求?GoHTTP
- 如何壓縮 HTTP 請求正文HTTP
- 請求OpenFeign的GET請求時,請求為何失敗?
- 建立相容IE6瀏覽器的ajax請求物件瀏覽器物件
- Postman抓包瀏覽器請求--傻瓜式操作Postman瀏覽器
- SpringMVC中如何傳送GET請求、POST請求、PUT請求、DELETE請求。SpringMVCdelete
- 合併HTTP請求vs並行HTTP請求,到底誰更快?HTTP並行
- 合併HTTP請求 vs 並行HTTP請求,到底誰更快?HTTP並行
- HTTP的請求過程HTTP
- golang 的 http 請求池GolangHTTP
- 我知道的HTTP請求HTTP
- 使用CloseableHttpClient 訪問 http 和https 的get請求HTTPclient
- 加了強型別如何將請求引數轉為整型型別
- 【轉】AngularJs HTTP請求響應攔截器AngularJSHTTP
- Cookie 與 HTTP請求CookieHTTP
- Jsoup http請求JSHTTP
- Android Http請求AndroidHTTP
- HTTP請求報文HTTP
- java發http,https請求獲取資料JavaHTTP