浏览器如何将你的http请求转为https请求?

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

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值