I shared a link from NPR Tiny Desk but there was no image preview or video embed. After investigating this I learned that when you do that, each instance picks up the link and individually retrieves the link preview nearly simultaneously. For gargantuan sites like YT or Reddit, this is a trivial amount of traffic and not a problem, but for smaller sites like NPR this results in a sort of botnet DDOS attack on the site’s servers. More here. Another example here . For that reason, NPR has blocked Fediverse servers like Mastodon.

I have experienced this on my personal server as well (DDOS), but at the time didn’t know why, exactly.

This isn’t the end of the world, but certainly is not great and hurts engagement with the content. Is there a solution for this? Perhaps using some sort of webtorrent service like PeerTube where they just fetch the information from another fediverse server instead of the source server? Maybe fetching embeds client-side? At least that would stagger the requests.

  • dropdrip@lemmy.ml
    link
    fedilink
    English
    arrow-up
    14
    arrow-down
    1
    ·
    1 hour ago

    It’s almost like the software that powers the internet was designed for a different time and is only still used because there’s monied interest in keeping it around. We need GNUnet.

  • ByteJunk@lemmy.world
    link
    fedilink
    English
    arrow-up
    22
    ·
    4 hours ago

    I mean, just how many instances are gonna ping the URL? Several hundred, low thousands at worst?

    Unless it happens to be some very large media content or a dynamic page with no caching, I’d think the automated federation hits shouldn’t be too bad.

    The influx of users that might come after a viral post though, that’s rough…

  • Pamasich@kbin.earth
    link
    fedilink
    arrow-up
    2
    ·
    4 hours ago

    I don’t really get it. The image is federated, there’s no need for instances to refetch it. Just checked out some posts and indeed it’s there, in the image property. With the URL pointing to the Lemmy instance.

    So if this is actually an issue, that’s just bad programming and needs to be fixed.

    Edit: didn’t notice OP uses Piefed. Unlike Lemmy and Mbin, it seems like Piefed doesn’t federate it.

      • Pamasich@kbin.earth
        link
        fedilink
        arrow-up
        2
        ·
        1 hour ago

        Tl;dr: Lemmy and Mbin attach an image, Piefed seems not to. Though some Lemmy instances seem to only proxy the image, not host anything themselves.


        I just took this random post from my frontpage: https://sh.itjust.works/post/68605733 and made a manual request for the federated JSON-LD.

        {
          "@context": [
            "https://join-lemmy.org/context.json",
            "https://www.w3.org/ns/activitystreams"
          ],
          "type": "Page",
          "id": "https://sh.itjust.works/post/68605733",
          "attributedTo": "https://sh.itjust.works/u/derrickoswald",
          "to": [
            "https://lemmy.world/c/technology",
            "https://www.w3.org/ns/activitystreams#Public"
          ],
          "name": "Stratospheric airship flew from US to Japan and back",
          "cc": [],
          "content": "<p>It seems with an unmanned airship they should be using hydrogen for the ~8% increased payload capacity.</p>\n",
          "mediaType": "text/html",
          "source": {
            "content": "It seems with an unmanned airship they should be using hydrogen for the ~8% increased payload capacity.",
            "mediaType": "text/markdown"
          },
          "attachment": [
            {
              "href": "https://arstechnica.com/gadgets/2026/10/trans-pacific-journey-tested-stratospheric-cell-tower-concept-in-japan/",
              "mediaType": "text/html; charset=utf-8",
              "type": "Link"
            }
          ],
          "image": {
            "type": "Image",
            "url": "https://sh.itjust.works/pictrs/image/df608ab3-b644-489d-b217-9224aa09e203.jpeg"
          },
          "sensitive": false,
          "published": "2026-10-19T20:16:37.383385Z",
          "language": {
            "identifier": "en",
            "name": "English"
          },
          "audience": "https://lemmy.world/c/technology",
          "tag": [
            {
              "href": "https://sh.itjust.works/post/68605733",
              "name": "#technology",
              "type": "Hashtag"
            }
          ]
        }
        

        Notice the

        "image": {
            "type": "Image",
            "url": "https://sh.itjust.works/pictrs/image/df608ab3-b644-489d-b217-9224aa09e203.jpeg"
          }
        

        Yes the image itself isn’t sent over (iirc they never are?), but it’s stored on sh.itjust.works. Other instances grab it from there, not the website the post links to.

        I did notice just now though that some Lemmy instances seem to just proxy the image through their servers, which I assume is to avoid CORS. But that’s an instance choice, not a general fediverse issue.

        Mbin does the same as Lemmy, but it also includes the image in the attachment property. Probably for compatibility with some other platform.

        One thing I didn’t notice before was that you’re using Piefed. That’s the one software I didn’t check before writing my previous comment. It does seem like Piefed is the outlier here. I tried a post from piefed.ca and the image is nowhere to be seen. The image property is not present, it’s not in the attachment array, and I can’t see any other property that contains it.

      • Ghoelian@piefed.social
        link
        fedilink
        English
        arrow-up
        2
        ·
        2 hours ago

        Are you sure? In your post you’re talking about fetching an image for a link preview, not an image post.

        Usually, when I see an image post, the source is actually the pictrs of the source instance, so in that case I think it is federated.

          • Ghoelian@piefed.social
            link
            fedilink
            English
            arrow-up
            3
            ·
            edit-2
            1 hour ago

            I figured a post with a link with preview image wouldn’t be the same in terms of event as an image post. Turns out it pretty much is, but also, I checked a few posts and cross-posts across instances, all of them have an image url of the original instance, not the one I’m viewing on. So if they are individually fetching this image, they’re not using it.

            Edit: I was wrong, two of the crossposts just didn’t respond to the request for activity, so I was looking at the wrong response data

  • wjs018@piefed.wjs018.xyz
    link
    fedilink
    English
    arrow-up
    126
    ·
    10 hours ago

    There are two proposed solutions I have seen. I do not claim that this is exhaustive, just only limited to the proposals that I have stumbled across.

    FASP - Fediverse Auxiliary Service Provider

    The idea that mastodon has is to have a third-party service that does something like generate a link preview once and then share that to fediverse instances that need it. They have a whole spec they wrote up about these kinds of services that can be run to help out fediverse instances with different things like this, search, or discoverability. They call these FASPs - the repo with the spec is here.

    I don’t yet know of any FASP that is live and running, so it is kind of a paper spec at the moment. I don’t do too much on the microblogging side of the fediverse though, so I very well could be wrong.

    Federate link metadata and the post at the same time

    This comes from an issue on PieFed’s repo. It is basically just an idea at this point, but it is a pretty basic one; have the originating instance fetch the link preview information and simply federate it out alongside the post itself.

    • Pamasich@kbin.earth
      link
      fedilink
      arrow-up
      1
      ·
      54 minutes ago

      Both Lemmy and Mbin already attach the preview image to the post via the image property, which is of type Image with a URL pointed at the hosting instance. Receiving instances can then fetch that URL instead of the article.

      Is there a reason why Piefed doesn’t use this already established approach?

    • Rimu@piefed.social
      link
      fedilink
      English
      arrow-up
      2
      ·
      3 hours ago

      Really the only metadata we are interested in is the thumbnail image url. Afaik PieFed already retrieves this from the og:image meta tag before sending the URL along with the other post content to the instance hosting the community.

      Another idea - those meta tags are also retrieved during post composition in an ajax call, in order to prepopulate the title and body fields so the image url could be stashed in a hidden field at that point…

    • tuckerm@feddit.online
      link
      fedilink
      English
      arrow-up
      43
      ·
      edit-2
      8 hours ago

      I’m a fan of the second one. My thought is, if you trust a server enough to accept messages from it, then you should also trust it enough to let it scrape the page title, article image, etc. for you, too.

      • timochka@lemmy.zip
        link
        fedilink
        English
        arrow-up
        1
        ·
        1 hour ago

        The great thing about this if you run a server, as soon as a user posts a link to some kiddy porn, you not only download it automatically, you distribute it as well. Go-go-gadget-jailtime.

        (Actually already a problem with Mastodon federation of image posts, and why I would strongly encourage against anyone in a strict liability jurisdiction from running their own Mastodon server tbh.)

      • shrek_is_love@lemmy.ml
        link
        fedilink
        English
        arrow-up
        9
        ·
        8 hours ago

        Seems like a no-brainer! They could even leave the old behavior as an option for instance admins to re-enable, but if they default it to not DDoSing, that would make a huge difference.

    • jaybone@lemmy.zip
      link
      fedilink
      English
      arrow-up
      77
      ·
      9 hours ago

      That second solution is what I thought of as doing as I read this. It doesn’t rely on a third party service being up. And that instance has to do that work anyway. So why not just share the results with others?

      • khannie@lemmy.world
        link
        fedilink
        English
        arrow-up
        3
        ·
        5 hours ago

        It was my first thought too but there are downsides to it. Trust is a small one given the nature of the system but compute and bandwidth costs could be an issue also, especially for larger instances.

        The first solution is more fragile but could be CDN’d and those are cheap.

        • Ghoelian@piefed.social
          link
          fedilink
          English
          arrow-up
          1
          ·
          2 hours ago

          I don’t think compute resources should be an issue, if anything it saves other instances resources.

          As far as I understand, right now, all instances are fetching this data individually, so they all have the same compute load from this. Doing it on one and sending it along with federation should keep resource useage pretty much the same on the originating instance, and less for all others.

          This would still increase bandwidth of course, but at least with all VPS providers I have used, bandwith is pretty cheap.

        • 4am@lemmy.zip
          link
          fedilink
          English
          arrow-up
          74
          ·
          9 hours ago

          The same way you know the rest of the data hasn’t been tampered with - you don’t. And when you find untrustworthy instances, you defederate from them.

          • SorteKanin@feddit.dk
            link
            fedilink
            English
            arrow-up
            2
            ·
            2 hours ago

            That’s not true, you know the data hasn’t been tampered with because of HTTP signatures. The fediverse isn’t just “yolo, just trust me bro”. There are some parts that are a bit more towards that side (particularly with groups on Lemmy) but I don’t think this should be.

        • jaybone@lemmy.zip
          link
          fedilink
          English
          arrow-up
          29
          ·
          9 hours ago

          I’m trusting the user who submitted the link and/or the instance that user is on. I’m doing that anyway by clicking on their link right?

        • rako@tarte.nuage-libre.fr
          link
          fedilink
          Français
          arrow-up
          1
          ·
          4 hours ago

          So I receive a post from someone presumably with some comment, along with a preview of a link, and I’m supposed to trust one but not the other ?

  • Lovable Sidekick@lemmy.world
    link
    fedilink
    English
    arrow-up
    4
    arrow-down
    1
    ·
    5 hours ago

    I remember reading the same thing about reddit, slashdot, fark, and other sites. But I like the FASP idea as a way to relieve this.

    • artyom@piefed.socialOP
      link
      fedilink
      English
      arrow-up
      4
      arrow-down
      1
      ·
      4 hours ago

      Why is that? Those are centralized platforms, they should only need to retrieve the preview once each?

        • artyom@piefed.socialOP
          link
          fedilink
          English
          arrow-up
          3
          arrow-down
          1
          ·
          3 hours ago

          That’s not at all the same thing. That’s just the inability to handle large amounts of unexpected normal user traffic.

          This is essentially bot traffic driven by servers all independently but simultaneously fetching the same image, without even a single human necessarily looking at it.

          • INeedMana@piefed.zip
            link
            fedilink
            English
            arrow-up
            4
            arrow-down
            1
            ·
            3 hours ago

            From server’s perspective the only difference between those is the user-agent. Traffic is the same

              • INeedMana@piefed.zip
                link
                fedilink
                English
                arrow-up
                2
                ·
                edit-2
                1 hour ago

                Yes, but then a comment mentioned the “hug of death” - high spike of requests resulting from a link being shared on some site, and OP asked why centralized sites were also creating problems

                There was another post regarding previews some months/(knowing me probably a year) ago and personally I would go with federating previews. With a button for mods to refresh it from source for when something goes fucky

                But social networks have been creating random bursts of requests, this way or another, even in the times of centralized socials

            • artyom@piefed.socialOP
              link
              fedilink
              English
              arrow-up
              2
              ·
              2 hours ago

              The origin and purpose of the traffic is not the same. That’s why they block one and not the other.

  • Rimu@piefed.social
    link
    fedilink
    English
    arrow-up
    57
    ·
    9 hours ago

    Lemmy does this to itself, too - when you create a post it federates out and then every Lemmy instance that receives it makes a GET request to retrieve the post from the original server. Even though it just received the exact same data. Some other fedi software is even worse - Akkoma does a GET of the id of every activity it receives, not just for posts but for Likes too.

    It’s insane.

    Anyway, proper caching at the reverse proxy / Cloudflare level solves it. The same kind of caching setup would do the same for sites serving HTML, like NPR too.

    • Ghoelian@piefed.social
      link
      fedilink
      English
      arrow-up
      2
      ·
      2 hours ago

      That’s weird. Is that how it’s supposed to work, or did they just implement it in a bad way?

      • The_Decryptor@aussie.zone
        link
        fedilink
        English
        arrow-up
        1
        ·
        11 minutes ago

        It’s an access control method, called “authorized fetch”. Rather than broadcasting the data you just announce the source of it, and then any client that wants to show it needs to negotiate with the originating server to request the data (And then blocklists and such come into play)

        Say you’ve got 3 users, A, B, and C. A has blocked C, B follows A, and C follows B. Now A makes a post, B sees it in their feed and reboosts it, what does C see?

        If B’s server sends the full response along, then C can see the contents of A’s post even though they’ve been blocked by A. But if all it sends is the URL of the post, C’s server needs to make a request for it (providing authentication), and then A’s server can reject it, so C sees nothing.

    • SorteKanin@feddit.dk
      link
      fedilink
      English
      arrow-up
      1
      ·
      2 hours ago

      How else can you be sure the content is valid though? Lemmy posts are sent as Announces from the community, not from the actor posting the post. The community could just fake a post if you just trust it.

    • artyom@piefed.socialOP
      link
      fedilink
      English
      arrow-up
      7
      arrow-down
      4
      ·
      9 hours ago

      If they’re all delayed the same it would have the same effect. In order to prevent that it would require some form of coordination amongst them. And even then would have the same complaint about missing link previews. Better than nothing but not really a “solution”, per se.

      • anotherandrew
        link
        fedilink
        English
        arrow-up
        33
        arrow-down
        2
        ·
        8 hours ago

        Random back off is an ancient and very well understood algorithm. This is not exactly rocket science.

          • deadbeef79000@lemmy.nz
            link
            fedilink
            English
            arrow-up
            13
            arrow-down
            1
            ·
            7 hours ago

            “Random back off” is the name of a technique to avoid this exact problem.

            Each instance generates a random number of (say) seconds between (say 15 to 120) and schedules the fetch for then. It is extremely unlikely that any two instances select the same second.

            • artyom@piefed.socialOP
              link
              fedilink
              English
              arrow-up
              4
              arrow-down
              17
              ·
              7 hours ago

              Yes I understand. I just don’t appreciate the demeaning tone this information was delivered in.

      • OwOarchist@pawb.social
        link
        fedilink
        English
        arrow-up
        11
        arrow-down
        1
        ·
        8 hours ago

        If they’re all delayed the same it would have the same effect. In order to prevent that it would require some form of coordination amongst them.

        A delay randomized within a certain range could accomplish this without needing coordination.

      • Ghoelian@piefed.social
        link
        fedilink
        English
        arrow-up
        2
        ·
        2 hours ago

        You’re talking about 2 different kinds of blocking here. NPR can’t block a URL, that concept doesn’t really exist at this level. They could block ip addresses, or user agents as you mentioned.

        A workplace can’t block by user agent (at least not on any website using TLS), as this header is not readable by any intermediary devices.

        • artyom@piefed.socialOP
          link
          fedilink
          English
          arrow-up
          1
          ·
          2 hours ago

          NPR can’t block a URL

          I wasn’t talking about NPR, I was talking about their employer…

          • Ghoelian@piefed.social
            link
            fedilink
            English
            arrow-up
            2
            ·
            edit-2
            2 hours ago

            You mentioned both in the same comment…

            […] NPR apparently blocks the former

            I’m just saying, their employer can’t block like NPR does, because they are fundamentally different things. The one is a server receiving a request, the other is a firewall seeing encrypted packets.

            Edit: the other could also be a DNS resolver that just does not resolve certain domains.