浏览器如何将你的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 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请求?相关推荐
- 网站的Http请求转为Https请求
一.申请Https证书 https://common-buy.aliyun.com/?spm=5176.2020520163.cas.1.zTLyhO&commodityCode=cas#/b ...
- Chrome禁止http自动转为https
解决方法 在Chrome浏览器地址栏输入chrome://net-internals/#hsts 在Delete domain security policies 中输入要删除自动转换的域名 原因 将 ...
- Fiddler基础使用一之捕获https请求
fiddler抓包工具: 先对fiddler作一个简单描述: Fiddler是一个调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的"进出" ...
- 谷歌浏览器怎么重发请求_chrome 浏览器的预提取资源机制导致的一个请求发送两次的问题以及ClientAbortException异常...
调查一个 pdf 打印报错: ExceptionConverter: org.apache.catalina.connector.ClientAbortException: java.net.Sock ...
- charles浏览器抓包https_十分钟学会Charles抓包(iOS的http/https请求)
Charles安装 HTTP抓包 HTTPS抓包 1. Charles安装 2. HTTP抓包 (1)查看电脑IP地址 Help→Local IP Address查看本机地址 电脑IP地址 (2)设置 ...
- 基于浏览器的http普通请求与ajax请求
发起一个http请求,可以通过浏览器,也可以通过程序去发起.通过程序去发起http请求(比如java中HttpURLConnection),只要是http层的东西都是能够伪造的,当然大部分还是伪造he ...
- Request(请求继承体系,获取请求行,请求头,请求体和通用的获取请求数据和解决乱码问题)
Request(请求继承体系,获取请求行,请求头,请求体和通用的获取请求数据和解决乱码问题) 1.Request(请求) Request继承体系 要想了解RequestFacade中都提供了哪些方法, ...
- Charles抓取https请求
最近公司将Windows产品的http请求,替换成https请求了,当https请求超过5次失败,就自动切换回http请求.测试时使用Charles抓包测试. 一.http抓包 http抓包比较简单, ...
- java实现https请求
参考: https://www.cnblogs.com/chinway/p/5802541.html java 实现https请求 JSSE是一个SSL和TLS的纯Java实现,通过JSSE可以很容易 ...
最新文章
- 路由策略与策略路由的区别。
- 如何“取消恢复”恢复的Git提交?
- 【响应式Web前端设计】Register Demo
- Linux下MySql数据库常用操作
- python的填充色怎么弄_python中如何给图形填充颜色
- 配置WCF同时支持WSDL和REST,swaggerwcf生成文档
- [2021.1.13多校省选模拟2]T1(动态规划/轮廓线dp)
- Python获取当前目录
- 数据科学 IPython 笔记本 8.9 自定义图例
- [转载] python flask实现分页
- GO 计算所有并发任务的总时间 WaitGroup
- mysql增删改处理
- Oracle转PostgreSQL
- mysql c 打开数据库文件怎么打开_vs中打开数据库文件路径
- <C++>文件操作基础详解,快来写出你的第一个文件吧
- 介绍一种AI的抠图方法
- easyexcel结合zip 导出压缩文件(包含多个excel)
- 集合框架--集合框架体系概述
- JSON转List集合
- 数据分析01 - 规范化方法