the sections are part of the magento2 fpc hole punching mechanism.
It's a way of storing private customer data in the local storage and updating it on specific actions.
The mechanism is explained in the dev docs here: http://devdocs.magento.com/guides/v2.0/config-guide/cache/cache-priv-priv.html
all sections in the customerData, which are defined in any Vendor/Module/etc/frontend/sections.xml File will be updated on POST or PUT requests on the defined actions
The messages section is a special case, since it's updated on any action: https://github.com/magento/magento2/blob/2.1/app/code/Magento/Theme/etc/frontend/sections.xml#L10
I think this is just a default to enable any ajax call to add messages to the page.
This js component triggers the ajax call in this component: https://github.com/magento/magento2/blob/b1e56ed3b6f13f1ab780d8eddc33fc04cb6ecf75/app/code/Magento/Customer/view/frontend/web/js/section-config.js
You could try to override the section config for '*' by adding a module with a etc/frontend/sections.xml with the following content
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Customer:etc/sections.xsd">
<action name="*">
</action>
</config>
But, honestly, I think it will get merged and the original config will still be present. (Also the messages update trigger would be disabled for any action)
It should stop triggering, if you change your ajax call to a GET request (although this does not seem to be a 'nice' solution)
you could write a plugin on the \Magento\Customer\Block\SectionConfig
class and just remove the messages section from your ajax call action I think