Elimapi Docs

Image Hotlinking: 为什么来自1688的图片在您的网站上显示错误?

您是否曾经将1688的直接图片链接嵌入到您的网站中,却收到一张损坏的图片而不是您想展示的产品?别担心,您并不孤单!这是一种非常普遍的现象——而且这是1688有意为之的。让我们在本文中探讨原因和解决方案。

来自1688的损坏图片

🔍 主要原因:1688基于Referer阻止图片

1688(以及其他主要的电子商务平台,如淘宝、京东、阿里巴巴)主动阻止”热链”(hotlinking)——即您从他们的服务器获取图片并直接在您的网站上显示。

工作原理

当用户的浏览器访问您的网站并从https://img.alicdn.com/...(或类似的1688域名)加载图片时,1688的服务器将检查HTTP Header中的Referer——该字段指示用户来自哪个页面。

如果Referer不是1688的域名(例如,您从yourwebsite.com访问),那么1688将:

  • 返回损坏的图片(通常是”403 Forbidden”、“Hotlinking not allowed”,或带有”1688”文字的模糊图片)
  • 或返回403状态码,导致图片无法显示

这是1688技术团队精心设计的带宽和资源保护措施。

💡 为什么1688要这样做?

原因说明
节省带宽1688上的图片通常很重(高分辨率,许多产品)。如果数千个其他网站热链到它们,它们的服务器将消耗大量带宽 → 增加运营成本。
保护版权和品牌他们不希望其产品图片被竞争对手或小店免费用于转售。
将流量引导到原始页面如果您想查看产品,请访问实际的1688页面——不要”盗用”图片来创建您自己的网站。
防止不公平竞争许多人使用1688图片在Shopee、Lazada、TikTok Shop…上创建店铺,却没有实际商品 → 1688希望防止这种情况。

✅ 解决方案

如果没有1688的许可,您无法合法地绕过Referer。但有几种安全且合法的替代解决方案:

1. 下载图片并上传到您的网站

这是最简单且最有效的解决方案:

  • 从1688下载图片 → 保存到您网站的/images/目录
  • 使用<img src="https://yourwebsite.com/images/product1.jpg">

**优点:**不违反法律,不会被阻止,加载速度更快(不依赖外部服务器)。

**注意:**确保您不侵犯版权(如果是独家产品,应征得供应商的许可)。

2. 使用CDN或图片托管服务

Cloudinary、Imgur、AWS S3等服务可以是很好的替代解决方案:

  • 将图片上传到此服务 → 获取新链接
  • 仍然确保独立于1688

**优点:**优化图片,加载速度快,可以集成动态图片编辑等附加功能。

3. 绕过referer

免责声明:使用”绕过referer”可能导致以下风险:

  • 违反1688的服务条款
  • 可能导致IP或账户被阻止
  • 不可持续——只是暂时的

使用此方法时请仔细考虑。

以下示例使用Expressjs来绕过referer。您可以使用其他框架来实现类似功能。

// 使用方法:将此API放在img标签的src中:<img src=`/proxy-image?url=https://cbu01.alicdn.com/img/ibank/ten_anh.jpg` />
app.get('/proxy-image', async (req, res) => {
  const imageUrl = req.query.url

  if (!imageUrl) {
    return res.status(400).send('Missing "url" query parameter')
  }

  try {
    const parsedUrl = new URL(imageUrl)

    const userAgent = req.headers['user-agent'] || USER_AGENT

    const response = await fetch(imageUrl, {
      headers: {
        Referer: parsedUrl.origin,
        'User-Agent': userAgent,
      },
    })

    if (!response.ok) {
      console.warn(`[Image Proxy] Failed ${response.status}: ${imageUrl}`)
      return res.status(response.status).send(`HTTP ${response.status}`)
    }

    const buffer = await response.arrayBuffer()
    const contentType = response.headers.get('content-type') || 'image/jpeg'

    res.setHeader('Content-Type', contentType)
    res.setHeader('Cache-Control', 'public, max-age=86400')
    res.setHeader('Vary', 'Accept-Encoding')
    res.end(Buffer.from(buffer))
  } catch (error) {
    console.error(`[Image Proxy] Error: ${error.message}`)
    res.status(500).send('Internal Server Error')
  }
})

您可以使用AI将上述代码转换为相应的编程语言。此外,您还可以使用nginx等静态代理服务器来执行此绕过。

🔧 快速检查:您是否被Referer阻止?

您可以通过以下方式轻松检查是否被Referer阻止:

  1. 打开DevTools(F12)→ Network选项卡
  2. 重新加载页面 → 找到图片文件 → 点击它
  3. 检查:
    • Status:是否为403 Forbidden
    • Response:是否看到”Hotlinking is not allowed”图片?
    • Headers → Referer:是否是您的域名?

如果是这样 → 您已经被Referer阻止了!

✅ 结论

来自1688的直接图片链接出现referer错误,因为1688主动阻止热链以保护资源和版权。这是合法行为,在主要电子商务平台上很常见。

**最佳解决方案:**下载图片并将其托管在您的网站或CDN上。 不应尝试”破解”referer——容易受到惩罚,失去信誉,且不稳定。