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       80listen       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

浏览器如何将你的http请求转为https请求?相关推荐

  1. 网站的Http请求转为Https请求

    一.申请Https证书 https://common-buy.aliyun.com/?spm=5176.2020520163.cas.1.zTLyhO&commodityCode=cas#/b ...

  2. Chrome禁止http自动转为https

    解决方法 在Chrome浏览器地址栏输入chrome://net-internals/#hsts 在Delete domain security policies 中输入要删除自动转换的域名 原因 将 ...

  3. Fiddler基础使用一之捕获https请求

    fiddler抓包工具: 先对fiddler作一个简单描述: Fiddler是一个调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的"进出" ...

  4. 谷歌浏览器怎么重发请求_chrome 浏览器的预提取资源机制导致的一个请求发送两次的问题以及ClientAbortException异常...

    调查一个 pdf 打印报错: ExceptionConverter: org.apache.catalina.connector.ClientAbortException: java.net.Sock ...

  5. charles浏览器抓包https_十分钟学会Charles抓包(iOS的http/https请求)

    Charles安装 HTTP抓包 HTTPS抓包 1. Charles安装 2. HTTP抓包 (1)查看电脑IP地址 Help→Local IP Address查看本机地址 电脑IP地址 (2)设置 ...

  6. 基于浏览器的http普通请求与ajax请求

    发起一个http请求,可以通过浏览器,也可以通过程序去发起.通过程序去发起http请求(比如java中HttpURLConnection),只要是http层的东西都是能够伪造的,当然大部分还是伪造he ...

  7. Request(请求继承体系,获取请求行,请求头,请求体和通用的获取请求数据和解决乱码问题)

    Request(请求继承体系,获取请求行,请求头,请求体和通用的获取请求数据和解决乱码问题) 1.Request(请求) Request继承体系 要想了解RequestFacade中都提供了哪些方法, ...

  8. Charles抓取https请求

    最近公司将Windows产品的http请求,替换成https请求了,当https请求超过5次失败,就自动切换回http请求.测试时使用Charles抓包测试. 一.http抓包 http抓包比较简单, ...

  9. java实现https请求

    参考: https://www.cnblogs.com/chinway/p/5802541.html java 实现https请求 JSSE是一个SSL和TLS的纯Java实现,通过JSSE可以很容易 ...

最新文章

  1. 路由策略与策略路由的区别。
  2. 如何“取消恢复”恢复的Git提交?
  3. 【响应式Web前端设计】Register Demo
  4. Linux下MySql数据库常用操作
  5. python的填充色怎么弄_python中如何给图形填充颜色
  6. 配置WCF同时支持WSDL和REST,swaggerwcf生成文档
  7. [2021.1.13多校省选模拟2]T1(动态规划/轮廓线dp)
  8. Python获取当前目录
  9. 数据科学 IPython 笔记本 8.9 自定义图例
  10. [转载] python flask实现分页
  11. GO 计算所有并发任务的总时间 WaitGroup
  12. mysql增删改处理
  13. Oracle转PostgreSQL
  14. mysql c 打开数据库文件怎么打开_vs中打开数据库文件路径
  15. <C++>文件操作基础详解,快来写出你的第一个文件吧
  16. 介绍一种AI的抠图方法
  17. easyexcel结合zip 导出压缩文件(包含多个excel)
  18. 集合框架--集合框架体系概述
  19. JSON转List集合
  20. 数据分析01 - 规范化方法

热门文章

  1. matting笔记_一周小结
  2. frappe学习笔记
  3. erpnext--总结1
  4. 《面试八股文》之Dubbo17卷
  5. 软件生存周期过程GB_T8566-2007内容整理
  6. Three-js 学习笔记(2)——几何体
  7. 你必须要学会的动态代理
  8. 程序员 很装逼的头注释
  9. PHP时间日期操作增减(date strtotime) 加一天 加一月
  10. java基础 唱歌比赛中,有6评委给选手打分