https域名下 请求http图片链接 被自动变成https请求

现象
在以 https 协议页面,以 <img src="http://baidu.com/img/image.png"> 方式请求资源时,http 协议的资源地址被转为 https 的。

溯源检查过程
这个问题真的是第一次遇到,本地开发时没发现问题,等到上到测试环境时发现有些图片无法显示。
检查发现 域名用的是https,图片来源有两种,一个是https的,另一个想必大家也猜到了是http的 但之前没发现不能显示啊!
再细查我发现后端给的 http链接 我竟然发的https链接,而图片资源服务器没有做443端口转发,即不支持https链接所以无法获取图片。这时查文档发现大家说是因为前端设置了这个:


<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">

很显然我的代码中没有,再怀疑是nginx中是不是加了设置,把http转为了https,
第一种方式使用return 301

server {
   listen 80;
   server_name www.phpmianshi.com;
   return 301 https://$http_host$request_uri;
   access_log  off;
}

第二种方式使用rewrite

server {
	listen 80;
	server_name  www.phpmianshi.com ;
	rewrite ^(.*) https://$server_name$1 permanent; #此句最关键
}

第三种方式使用error_page

#使用同一个端口,http转https
原理:
http和https是tcp的上层协议,当nginx服务器建立tcp连接后,根据收到的第一份数据来确定客户端是希望建立tls还是http。nginx会判断tcp请求的首写节内容以进行区分,如果是0x80或者0x16就可能是ssl或者tls,然后尝试https握手。如果端口开启了https,但请求过来的并不是,会抛出一个http级别的错误,这个错误的状态码是NGX_HTTP_TO_HTTPS,错误代码497,然后在返回response中会抛出一个400错误(因为497不是标准状态码,丢给浏览器也没有用),这时浏览器会显示"400 Bad Request,The plain HTTP request was sent to HTTPS port"

server {
	 listen 80 ssl;
	 listen www.phpmianshi.com:80;    #此处添加你要该链接访问的域名
	 server_name  www.phpmianshi.com ;
	 error_page 497 https://$host:8080$request_uri; #此句最关键,重新定义端口
	 #error_page 497 https://$http_host$request_uri; #此句最关键,只是将http改为https,其他不变
}

host:没有端口的server_name :www.phpmianshi.com
http_host:有端口的server_name :www.phpmianshi.com
request_uri:server_name后面的部分 :/?id=297

经检查也是没有,哎,继续查原因,这时测试反馈有的谷歌浏览器可以看到图片而我和另一个主要测试同学不行,查看谷歌浏览器版本,我和另一个主要测试同学是最新版,
在这里插入图片描述
最终原因
chrome 新版浏览器会把 http 开头的 url 给重定向到 https 开头的资源 url 上去,若你的资源服务器没有做443端口转发,那就导致资源无法加载。

解决方案
临时解决 - 很显然这个不靠谱,还能挨个让客户改呢
1、地址栏中输入 chrome://net-internals/#hsts
2、在 Delete domain security policies 中输入项目的域名,并 Delete 删除(输入的是http://后面的域名)
3、可以在 Query domain 测试是否删除成功
4、这里如果还是不行, 清除浏览器缓存,然后重启浏览器再试一试。

后端解决 - 不用挣扎这是唯一可行的方案,否则只能放弃新版谷歌浏览器,或者做下兼容处理,在图片不能显示时搞点别的样式放上去
支持 https 请求该资源

谷歌浏览器真是激进啊,别的浏览器暂时没发现这个问题

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。
爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。
CSRF(Cross-Site Request Forgery)跨站请求伪造是一种网络攻击方式,攻击者通过某些手段欺骗用户在受信任的网站上执行非预期的操作,从而实现攻击目的。 攻击原理: 攻击者在受害者的浏览器中注入一个恶意代码,使得受害者在访问攻击者的网站或点击恶意链接时,会触发恶意代码向受信任网站发送请求,从而达到攻击的目的。 攻击应用: 1. 邮箱钓鱼 攻击者在邮件中嵌入一个图片标签,然后在图片的 URL 中携带了一个恶意请求,当用户打开邮件时,图片就会自动加载,从而触发恶意请求。 2. CSRF 攻击恶意网站 攻击者可以将恶意代码嵌入到自己的网站中,当用户访问恶意网站时,恶意代码会自动向受信任站点发送请求进行攻击。 3. 跨域攻击 攻击者可以在其他域名下的网站中,嵌入一个恶意代码,当用户在受信任站点中进行操作时,恶意代码就会向其他域名下的网站发送请求,从而达到攻击目的。 防范措施: 1. 验证请求来源 在服务器端校验请求是否来自受信任的站点,如果请求不是来自受信任站点,则拒绝请求。 2. 加入随机令牌 在表单中加入一个随机生成的 token ,然后在服务器端校验表单提交时所带的 token 是否一致,如果不一致,则拒绝请求。 3. 使用验证码 在敏感操作中,使用验证码来防止自动化攻击。 4. 浏览器加入 SameSite 属性 设置 cookie 的 SameSite 属性,限制 cookie 只能在同站点下发送,从而防止跨站请求伪造攻击。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值