GET response without ETag



  • Thanks for you clarification. I posted this to this forum, because DavDroid is the part in my environment where I see the error. The other parts (OwnCloud and Thunderbird) seemed to worked correctly from my view. But you’re right: the root cause is very likely to be in another part of my environment.

    Just out of curiosity and because it worked well in the past or at leased seemed to work well:
    As I set up my OwnCloud a few months ago I tested to add/modify/sync/delete contacts and calenders in every direction (Android <-> OC <-> Thunderbird). And at the time of setup everything worked without issues.

    What’s the background/meaning of the ETag? Does it identify a contact, so is it like a unique ID?

    Did DavDriod always check for ETag? Or was behaviour changed in the last months in order to be more conform with the RFCs?

    What part creates/maintains the ETag? The client who creates/modify a contact? Or the server?

    Just wanna clarify for me which part to spot next…


  • developer

    @mpausch said in GET response without ETag:

    What’s the background/meaning of the ETag? Does it identify a contact, so is it like a unique ID?

    It’s not a unique ID, but it’s kind of a tag for a certain version of a resource. It can be used to determine whether the contents of a resource have been changed: in this case, the ETag must change, too.

    Did DavDriod always check for ETag? Or was behaviour changed in the last months in order to be more conform with the RFCs?

    DAVdroid relies on ETags since the beginning, because they’re very essential for useful synchronization. ETags are required for CalDAV/CardDAV, especially in responses to GET requests. DAVdroid uses them in many ways, for instance

    • to check whether a resource (event/contact) has been changed,
    • to make sure uploading new resources doesn’t overwrite existing resources (PUT with If-None-Match: *),
    • to make sure uploading updated resources only overwrites the correct version, i.e. changes which have been made on the server in the meanwhile won’t be lost (PUT with If-Match: <last-known-ETag>).

    What part creates/maintains the ETag? The client who creates/modify a contact? Or the server?

    ETags are always managed and sent by the server.



  • Did you find a solution for this?

    I also use DAVdroid for calendar-sync to OwnCloud. Since ~4 Days, I (we - all clients) become this error. “Received CalDAV GET response without ETag”.

    There was no update to my OwnCloud wich works fine before these errors appears.



  • @SvenF : no, didn’t find any solution to this issue yet 😕
    I also didn’t any change to my OwnCloud before it started to work not anymore.



  • Hi,

    it seems, my provider did an update to Apache 2.4. Since then, these error appears.

    I tried “FileETag All” in htaccess but until now, it did’nt work.

    Maybe, someone had the same problem and a solution for this!?



  • @SvenF: I already guessed if my hoster maybe also did an Upgrade of Apache (or something else). And I also tried to enable ETag in .htaccess, but also without success 😞

    I opened a ticket at my hosters support website a few minutes ago. Usually they reply within 1 day. So let’s wait 🙂

    Just out of curiosity: Since when do you have this issues? And what’s your hoster?
    As far as I can remember I have the problem since about 16th august. My OwnCloud is hosted at Profihost (www.profihost.com)



  • Yes, Profihost is my provider. I also made a ticket for this and they told me the way to htaccess.



  • oh man, this starts to get annoying ;-/

    somewhere I read, that gzip also could remove the ETag… found a lot of “solutions” how to disable gzip via .htaccess… but none of them worked for me… Or I did something wrong? 😕


  • developer

    @mpausch gzip shouldn’t change the ETag, becaues the resources are normally not real static files (which would be sent by the Web server directly), but virtual resources generated by the CalDAV/CardDAV server (which manages the ETags, too).

    Did you have any further progress related to this problem?



  • I am nearly daily in contact with my Provider but the problem still exists. I don’t know how to set ETag since the webserver has been updated to Apache 2.4.


  • developer

    @SvenF The ETag should normally be set by the CalDAV/CardDAV server (OwnCloud?), not by the Web server. The only thing I can imagine is that the Web server (or maybe an application-level firewall?) removes the ETag sent by OwnCloud.



  • Hey guys,

    like SvenF I also was in daily contact with my provider (which is the same provider as SvenF’s provider g).

    Yesterday they solved the issue for me by “installing an update”.
    Don’t know yet what this “update” actually was (software update? / configuration change?) but I asked if he could tell me. So hopefully I will know more within the next days 🙂 Stay tuned, I will post feedback here.

    Cheers



  • OK - also I got the message of this update. In my case, it did not change the error.

    • Do you have an htaccess entry for ETag. Which entry and where?
    • Do you use ssl-proxy (sslkundenserver.de)?


  • No, don’t have an ETag entry in .htaccess.
    And I don’t use ssl-proxy/sslkundenserver.de… (by the way: what’s that and how does that work?)



  • I’m using an SSL Proxy for connecting to the cloud with a shared SSL connection. So the transfer is more secure. Look at the webspace description at the Providers Homepage. Maybe in my case, the reason for the error is this connection. I asked the provider about this possibility.



  • got feedback from support:

    due to the update to Apache 2.4 hoster configured
    Header unset ETag
    FileETag None

    in the global apache configuration.

    According to the HEADER directive in the apache docs :
    “… The header is modified just after the content handler and output filters are run, allowing outgoing headers to be modified. …”

    So ETag header was generated by OwnCloud/PHP but then removed my mod_header

    Hoster removed “Header unset ETag” from apache config. Now it works.

    @SvenF : already contacted support to set up ssl-proxy for my domain. When it’s done I will test calendar/contact sync via ssl and post feedback here 🙂


  • developer

    Good to know that it now works and what has caused the problem. At least DAVdroid’s error message was correct 🙂

    Do you know why they have removed ETags?



  • They removed the ETag header for “security reasons”.
    Can’t imagine any risk that a ETag can have, but I’m not a security expert… so maybe I just don’t know any better 😉

    @SvenF : tried to set up a separate OwnCloud that I can access via sslkundenserver.de, but for some reasons it always redirects to http://www.mydomain.tld/owncloud instead of staying in https://sslkundenserver.de/www.mydomain.tld/owncloud 😕
    Any hints?



  • @mpausch
    It’s OwnCloud and not DavDroid but I hope it’s OK in this thread…

    I had in my OwnCloud config.php

    This is a part of the config I have used. I’m very interested about your experience. In my case, there are no errors without SSL Proxy, but not possible with the SSL which I want to use for connect.



  • hm, for some reason I’m too dumb to get OC running via sslkundenserver.de
    even with your lines from config.php it kept redirecting to http 😞

    But I made another test. And from the results it seems for me like the proxy on sslkundenserver.de removes the ETag header. So the host that hosts your OC generates the ETag header and delivers it to the ssl-proxy… but then the proxy removes it…

    My test was to retrieve a jpg from my webspace with curl and let the headers write into a simple textfile.

    If you’re on Linux you can reproduce it with curl command. If not you also can reproduce it via ssh access to your webspace:

    retrieve image via https and sslkundenserver.de:
    curl -D headers_https.txt https://www.sslkundenserver.de/www.mydomain.tld/test/image.jpg > image_https.jpg

    and
    retrieve image via http and without sslkundenserver.de:
    curl -D headers_http.txt http://www.mydomain.tld/test/image.jpg > image_http.jpg

    This will save the jpg on the one hand in file image_https.jpg and on the other hand in file image_http.jpg
    In the headers*.txt files you will see the headers that were transferred between client (curl) and server.

    [user@host davdroid-tests]$ ls -la headers_http*
    -rw-r–r-- 1 user user 208 13. Sep 21:12 headers_https.txt
    -rw-r–r-- 1 user user 271 13. Sep 21:11 headers_http.txt

    [user@host davdroid-test]$ grep -i etag headers_http*
    headers_http.txt:ETag: “2741e-53b7f91de8301”
    [user@host davdroid-test]$

    —> so the header only was retrieved via http…