为什么我的Github托管站点使用HTTP 302而不是200响应?

时间:2014-01-02 15:01:59

标签: facebook http redirect github dns

我拥有域名penkov.id.au。我使用blog托管github,子域michael.penkov.id.au的A记录指向github页面服务器(204.232.175.78)。

bash-3.2$ dig michael.penkov.id.au +nocomments +nocmd +nostats

; <<>> DiG 9.8.3-P1 <<>> michael.penkov.id.au +nocomments +nocmd +nostats
;; global options: +cmd
;michael.penkov.id.au.          IN      A
michael.penkov.id.au.   86400   IN      A       204.232.175.78
penkov.id.au.           14399   IN      NS      ns1.linode.com.
penkov.id.au.           14399   IN      NS      ns5.linode.com.
penkov.id.au.           14399   IN      NS      ns4.linode.com.
penkov.id.au.           14399   IN      NS      ns2.linode.com.
penkov.id.au.           14399   IN      NS      ns3.linode.com.
ns1.linode.com.         62648   IN      A       69.93.127.10
ns1.linode.com.         136520  IN      AAAA    2600:3c00::a
ns2.linode.com.         67499   IN      A       65.19.178.10
ns2.linode.com.         122812  IN      AAAA    2600:3c01::a
ns3.linode.com.         124971  IN      A       75.127.96.10
ns3.linode.com.         133162  IN      AAAA    2600:3c02::a
ns4.linode.com.         96383   IN      A       207.192.70.10
ns4.linode.com.         904     IN      AAAA    2600:3c03::a
ns5.linode.com.         44638   IN      A       109.74.194.10
ns5.linode.com.         56329   IN      AAAA    2a01:7e00::a

最近(大约一个月前,可能更多),我发现所有对子域的请求(例如http://michael.penkov.id.au/blog/2014/01/02/reinventing-the-wheel.html)都得到302响应。对于像facebook.com这样的网站来说,这是一个问题,它不会费心访问该网址来提供预览。 302重定向的Github notes不是错误,应该,但Facebook显然忽略了这一点。

我看了一下请求&amp;使用Chrome调试工具的响应标头:

请求:

GET /blog/2014/01/02/reinventing-the-wheel.html HTTP/1.1
Host: michael.penkov.id.au
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8,ja;q=0.6,ru;q=0.4
Cookie: __utma=146715829.533338776.1383309288.1383487335.1383547294.7; __utmz=146715829.1383309288.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utma=118121621.1819750941.1383609188.1387026971.1388676605.15; __utmb=118121621.11.10.1388676605; __utmc=118121621; __utmz=118121621.1387026971.14.7.utmcsr=facebook.com|utmccn=(referral)|utmcmd=referral|utmcct=/
If-Modified-Since: Thu, 02 Jan 2014 14:38:15 GMT

响应:

HTTP/1.1 302 Found
Connection: close
Pragma: no-cache
cache-control: no-cache
Location: /blog/2014/01/02/reinventing-the-wheel.html

最后,重现此问题的一种可靠方法是使用Facebook URL debugging tool。将其指向http://michael.penkov.id.au/blog/2014/01/02/reinventing-the-wheel.html以查看问题。

我的问题:

  • 导致重定向的原因是什么?这是A记录吗?
  • 重定向到底在哪里?我怎么能找到这个?我该如何解决?
  • 我可以摆脱重定向吗?换句话说,如何让服务器返回200而不是302?具有相同设置的其他网站(例如http://mdswanson.com/blog/2013/11/13/some-tools-i-like.html)以200响应。

3 个答案:

答案 0 :(得分:15)

这是我从github支持中听到的内容:

  

指向204.232.175.78的A记录是导致302重定向的原因。

在我的DNS设置中用CNAME(指向mpenkov.github.com)替换A记录解决了这个问题。

供参考,这是我的DNS记录现在的样子:

misha@misha-antec:~$ dig michael.penkov.id.au +nocomments +nocmd +nostats

; <<>> DiG 9.8.1-P1 <<>> michael.penkov.id.au +nocomments +nocmd +nostats
;; global options: +cmd
;michael.penkov.id.au.          IN      A
michael.penkov.id.au.   85536   IN      CNAME   mpenkov.github.com.
mpenkov.github.com.     2736    IN      CNAME   github.map.fastly.net.
github.map.fastly.net.  25      IN      A       103.245.222.133

答案 1 :(得分:12)

巧合的是,我遇到了类似的问题,因为我正在使用CloudFlare在顶点域上管理我的DNS和GitHub页面。我有两条A记录指向GitHub页面服务器192.30.252.153 192.30.252.154和一个指向根域的www子域上的CNAME。

我向GitHub支持我一直看到的随机302重定向,他们告诉我这个:

  

因为您正在使用带有A记录的Cloudflare,所以您正在使用我们的拒绝服务(DOS)缓解技术。

     

为了避免此问题,您可以使用子域,例如blog.example.com,而不是顶点域,例如example.com,作为GitHub页面的CNAME。此子域将由我们的内容交付网络提供支持,不会返回302。

     

如果您想使用apex域名,则需要将它们直接指向GitHub页面IP。

幸运(或不),CloudFlare确实提供了违反RFC合规性并允许使用CNAME records on naked domains的机会。当然它可能会破坏电子邮件服务,但我很好,因为我没有使用它。

希望这有助于某人。

答案 2 :(得分:1)

我遇到了200 HTTP响应。:

GET http://michael.penkov.id.au/blog/2014/01/02/reinventing-the-wheel.html

HTTP/1.1 200 OK
Server: GitHub.com
Date: Thu, 02 Jan 2014 16:04:17 GMT
Content-Type: text/html
Connection: keep-alive
Content-Length: 10314
Last-Modified: Thu, 02 Jan 2014 14:38:15 GMT
Expires: Thu, 02 Jan 2014 16:14:17 GMT
Cache-Control: max-age=600
Vary: Accept-Encoding
Accept-Ranges: bytes
Vary: Accept-Encoding

您可能正在等待Facebook(和其他服务')DNS缓存刷新。它不应该超过48小时。我可以有时让Facebook调试器返回200,但它仍然有错误,因为页面上的这个HTML标记指向其他位置:

 <link rel="canonical" href="http://penkov.id.au/blog/2014/01/02/reinventing-the-wheel.html" />

enter image description here