mirror of
https://github.com/m13253/dns-over-https.git
synced 2026-08-29 09:58:35 +00:00
Workaround a bug causing Firefox 61-62 to reject responses with Content-Type = application/dns-message
This commit is contained in:
@@ -181,6 +181,7 @@ func (s *Server) generateResponseGoogle(w http.ResponseWriter, r *http.Request,
|
|||||||
now := time.Now().UTC().Format(http.TimeFormat)
|
now := time.Now().UTC().Format(http.TimeFormat)
|
||||||
w.Header().Set("Date", now)
|
w.Header().Set("Date", now)
|
||||||
w.Header().Set("Last-Modified", now)
|
w.Header().Set("Last-Modified", now)
|
||||||
|
w.Header().Set("Vary", "Accept")
|
||||||
if respJSON.HaveTTL {
|
if respJSON.HaveTTL {
|
||||||
if req.isTailored {
|
if req.isTailored {
|
||||||
w.Header().Set("Cache-Control", "private, max-age="+strconv.Itoa(int(respJSON.LeastTTL)))
|
w.Header().Set("Cache-Control", "private, max-age="+strconv.Itoa(int(respJSON.LeastTTL)))
|
||||||
|
|||||||
+8
-4
@@ -159,6 +159,10 @@ func (s *Server) generateResponseIETF(w http.ResponseWriter, r *http.Request, re
|
|||||||
now := time.Now().UTC().Format(http.TimeFormat)
|
now := time.Now().UTC().Format(http.TimeFormat)
|
||||||
w.Header().Set("Date", now)
|
w.Header().Set("Date", now)
|
||||||
w.Header().Set("Last-Modified", now)
|
w.Header().Set("Last-Modified", now)
|
||||||
|
w.Header().Set("Vary", "Accept")
|
||||||
|
|
||||||
|
_ = s.patchFirefoxContentType(w, r, req)
|
||||||
|
|
||||||
if respJSON.HaveTTL {
|
if respJSON.HaveTTL {
|
||||||
if req.isTailored {
|
if req.isTailored {
|
||||||
w.Header().Set("Cache-Control", "private, max-age="+strconv.Itoa(int(respJSON.LeastTTL)))
|
w.Header().Set("Cache-Control", "private, max-age="+strconv.Itoa(int(respJSON.LeastTTL)))
|
||||||
@@ -168,8 +172,6 @@ func (s *Server) generateResponseIETF(w http.ResponseWriter, r *http.Request, re
|
|||||||
w.Header().Set("Expires", respJSON.EarliestExpires.Format(http.TimeFormat))
|
w.Header().Set("Expires", respJSON.EarliestExpires.Format(http.TimeFormat))
|
||||||
}
|
}
|
||||||
|
|
||||||
_ = s.patchFirefoxContentType(w, r)
|
|
||||||
|
|
||||||
if respJSON.Status == dns.RcodeServerFailure {
|
if respJSON.Status == dns.RcodeServerFailure {
|
||||||
w.WriteHeader(503)
|
w.WriteHeader(503)
|
||||||
}
|
}
|
||||||
@@ -181,6 +183,7 @@ func (s *Server) patchDNSCryptProxyReqID(w http.ResponseWriter, r *http.Request,
|
|||||||
if strings.Contains(r.UserAgent(), "dnscrypt-proxy") && bytes.Equal(requestBinary, []byte("\xca\xfe\x01\x00\x00\x01\x00\x00\x00\x00\x00\x01\x00\x00\x02\x00\x01\x00\x00\x29\x10\x00\x00\x00\x80\x00\x00\x00")) {
|
if strings.Contains(r.UserAgent(), "dnscrypt-proxy") && bytes.Equal(requestBinary, []byte("\xca\xfe\x01\x00\x00\x01\x00\x00\x00\x00\x00\x01\x00\x00\x02\x00\x01\x00\x00\x29\x10\x00\x00\x00\x80\x00\x00\x00")) {
|
||||||
log.Println("DNSCrypt-Proxy detected. Patching response.")
|
log.Println("DNSCrypt-Proxy detected. Patching response.")
|
||||||
w.Header().Set("Content-Type", "application/dns-message")
|
w.Header().Set("Content-Type", "application/dns-message")
|
||||||
|
w.Header().Set("Vary", "Accept, User-Agent")
|
||||||
now := time.Now().UTC().Format(http.TimeFormat)
|
now := time.Now().UTC().Format(http.TimeFormat)
|
||||||
w.Header().Set("Date", now)
|
w.Header().Set("Date", now)
|
||||||
w.Write([]byte("\xca\xfe\x81\x05\x00\x01\x00\x01\x00\x00\x00\x00\x00\x00\x02\x00\x01\x00\x00\x10\x00\x01\x00\x00\x00\x00\x00\xa8\xa7\r\nWorkaround a bug causing DNSCrypt-Proxy to expect a response with TransactionID = 0xcafe\r\nRefer to https://github.com/jedisct1/dnscrypt-proxy/issues/526 for details."))
|
w.Write([]byte("\xca\xfe\x81\x05\x00\x01\x00\x01\x00\x00\x00\x00\x00\x00\x02\x00\x01\x00\x00\x10\x00\x01\x00\x00\x00\x00\x00\xa8\xa7\r\nWorkaround a bug causing DNSCrypt-Proxy to expect a response with TransactionID = 0xcafe\r\nRefer to https://github.com/jedisct1/dnscrypt-proxy/issues/526 for details."))
|
||||||
@@ -190,11 +193,12 @@ func (s *Server) patchDNSCryptProxyReqID(w http.ResponseWriter, r *http.Request,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Workaround a bug causing Firefox 61-62 to reject responses with Content-Type = application/dns-message
|
// Workaround a bug causing Firefox 61-62 to reject responses with Content-Type = application/dns-message
|
||||||
func (s *Server) patchFirefoxContentType(w http.ResponseWriter, r *http.Request) bool {
|
func (s *Server) patchFirefoxContentType(w http.ResponseWriter, r *http.Request, req *DNSRequest) bool {
|
||||||
if strings.Contains(r.UserAgent(), "Firefox") && strings.Contains(r.Header.Get("Accept"), "application/dns-udpwireformat") && !strings.Contains(r.Header.Get("Accept"), "application/dns-message") {
|
if strings.Contains(r.UserAgent(), "Firefox") && strings.Contains(r.Header.Get("Accept"), "application/dns-udpwireformat") && !strings.Contains(r.Header.Get("Accept"), "application/dns-message") {
|
||||||
log.Println("Firefox 61-62 detected. Patching response.")
|
log.Println("Firefox 61-62 detected. Patching response.")
|
||||||
w.Header().Set("Vary", "Accept, User-Agent")
|
|
||||||
w.Header().Set("Content-Type", "application/dns-udpwireformat")
|
w.Header().Set("Content-Type", "application/dns-udpwireformat")
|
||||||
|
w.Header().Set("Vary", "Accept, User-Agent")
|
||||||
|
req.isTailored = true
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
|
|||||||
Reference in New Issue
Block a user