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

这篇具有很好参考价值的文章主要介绍了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

经检查也是没有,哎,继续查原因,这时测试反馈有的谷歌浏览器可以看到图片而我和另一个主要测试同学不行,查看谷歌浏览器版本,我和另一个主要测试同学是最新版,
https域名下 请求http图片链接 被自动变成https请求,http协议,http,https,网络协议
最终原因
chrome 新版浏览器会把 http 开头的 url 给重定向到 https 开头的资源 url 上去,若你的资源服务器没有做443端口转发,那就导致资源无法加载。

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

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

谷歌浏览器真是激进啊,别的浏览器暂时没发现这个问题文章来源地址https://www.toymoban.com/news/detail-729895.html

到了这里,关于https域名下 请求http图片链接 被自动变成https请求的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • lua使用resty.http做nginx反向代理(https请求,docker容器化部署集群),一个域名多项目转发

    下载使用 链接:https://pan.baidu.com/s/1uQ7yCzQsPWsF6xavFTpbZg 提取码:htay –来自百度网盘超级会员V5的分享 ad_load.lua文件

    2024年01月18日
    浏览(53)
  • http请求自动跳转为https

    修改port=“80”的Connector 把redirectPort指向443端口,也就是上面添加的Connector就行了。 也可以直接把之前的port=“80”的Connector的相关参数配置得和port=“443”的Connector一样,但是一般不这样做,因为这样不方便以后跟换Connector配置。 修改web.xml 如上步骤完成后,只是可以用htt

    2024年02月15日
    浏览(24)
  • 【网络应用层协议】【HTTP】详解HTTP与HTTPS、POST 请求与 GET请求 、TCP与UDP、cookie和session的区别

    目录 1. HTTP和HTTPS的区别 2. POST 请求与 GET 请求区别 3. TCP与UDP的区别 4. cookie和session的区别

    2024年04月14日
    浏览(35)
  • Nginx 域名SSL证书配置(网站 http 升级为 https) acme.sh 申请免费SSL永久证书(自动续期)

    小编这里用的是godaddy购买的域名 服务器是aws acme.sh GitHub地址  https://github.com/acmesh-official/acme.sh 配合nginx进行部署,后面会贴上nginx.conf 我这里是多个域名用同一个证书    首先你得在自己服务器上面进行部署nginx,如果不知道怎么操作的,可以参考我这一篇博客,执行到这一

    2024年01月24日
    浏览(44)
  • Chrome浏览器中访问http会自动跳转https下,导致请求和文件不能正常访问

    网上查了很多解决方案,例如清楚缓存等等其他方法,都不能解决该问题 例如: 地址栏输入: chrome://net-internals/#hsts 找到底部 Delete domain security policies 一栏,输入想处理的域名,点击 delete 。 搞定了,再次访问http域名不再自动跳转https了。 点击地址栏旁边的锁 打开网站设置

    2024年02月02日
    浏览(33)
  • 解决重定向页面时,https变成http问题

    问题场景:请求某个接口后,处理完相关逻辑后需要重定向到另一个页面,请求的地址是https开头,但经过重定向后,地址变成了http,导致后续请求接口不通,全部报404 解决方法: 启动类中添加如下代码

    2024年02月11日
    浏览(40)
  • 腾讯云http域名升级为https

    场景: 在学习做微信小程序开发的过程中,在本地开发完成后需要把小程序部署上线。将小程序部分上传至服务器后,同时小程序内部调用的后端服务接口也需要部署到自己的云服务器上。早就了解到小程序调用后端服务接口不能通过IP去调用,还需要用到域名。有了域名还

    2024年02月01日
    浏览(32)
  • 利用 cloudflare 实现域名HTTP转变成 HTTPS

    https://dash.cloudflare.com/   域名解析需要 在cloudflare 做SSL/TLS 加密链接设置 灵活 加密浏览器与 Cloudflare 之间的流量 后台设置的链接不用改变,使用真实的HTTP链接。 在wordpress functions 上做域名替换。 完美

    2024年03月12日
    浏览(37)
  • HTTP 跨域名请求(CORS)

    出于安全考虑,浏览器会限制脚本中发起的跨域请求 。比如,使用 XMLHttpRequest 对象和Fetch发起 HTTP 请求就必须遵守同源策略。 具体而言,Web 应用程序通过 XMLHttpRequest 对象或Fetch能且只能向同域名的资源发起 HTTP 请求,而不能向任何其它域名发起请求。   隶属于 W3C 的 Web 应

    2024年02月07日
    浏览(37)
  • nginx反向代理https域名时,请求报错502问题排查

    微信公众号:运维开发故事,作者:冬子先生 一. 现象 在使用nginx反向代理后端服务器的时候,因为配置的是域名,导致HTTPS 请求转发失败,报 SSL 错误,js 报 502 img img 二. 排查过程 1、查看nginx日志,发现报502,但是本地curl upstream中的后端域名是可以正常通的 img 2、查看后端

    2024年02月11日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包