Why is my Github-hosted site responding with HTTP 302 instead of 200?

一曲冷凌霜 提交于 2019-12-31 09:02:32

问题


I own the domain penkov.id.au. I host a blog using github, with an A record for the subdomain michael.penkov.id.au pointing to the github pages server (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

Recently (around a month ago, maybe more), I've found that all requests to the subdomain (e.g. http://michael.penkov.id.au/blog/2014/01/02/reinventing-the-wheel.html) are met with a 302 response. This is a problem for sites like facebook.com, which don't bother accessing that URL to provide previews. Github notes that 302 redirects are not errors and should be followed, but Facebook apparently ignores that.

I had a look at the request & response headers using Chrome's debugging tools:

Request:

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

Response:

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

Finally, a sure way to reproduce this problem is to use the Facebook URL debugging tool. Point it at http://michael.penkov.id.au/blog/2014/01/02/reinventing-the-wheel.html to see the problem.

My questions:

  • What is causing the redirect? Is it the A-record?
  • Where is the redirect actually to? How can I find this out? How can I fix it?
  • Can I get rid of the redirect? In other words, how do I get the server to return 200 instead of 302? Other sites with an identical setup (e.g http://mdswanson.com/blog/2013/11/13/some-tools-i-like.html) respond with 200.

回答1:


Here's what I heard from github support:

The A record pointing to 204.232.175.78 is what's causing the 302 redirect.

Replacing the A record with a CNAME (pointing to mpenkov.github.com) in my DNS settings fixed the problem.

For reference, here's what my DNS record looks like now:

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



回答2:


Coincidentally, I ran into a similar issue because I'm using CloudFlare to manage my DNS and GitHub pages on an apex domain. I have two A records pointing to the GitHub Pages servers 192.30.252.153 192.30.252.154 and a CNAME on www subdomain pointing to the root domain.

I asked GitHub support about the random 302 redirects I've been seeing and they told me this:

Because you are using Cloudflare with A records you are running into our Denial of Service (DOS) mitigation technology.

In order to avoid this issue, you could use a sub domain, e.g. blog.example.com, instead of an apex domain, e.g. example.com, as a CNAME for your GitHub Page. This sub domain will be backed by our Content Delivery Network and won't return a 302.

If you would like to use apex domains you will need to point them directly at the GitHub Pages IPs.

Luckily (or not), CloudFlare does offer the chance of breaking the RFC compliance and allow the use of CNAME records on naked domains. Of course it could break the email service, but I'm fine with that because I'm not making use of it.

Hope this helps someone.




回答3:


I'm met with a 200 HTTP response.:

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

You're likely waiting for Facebook (and other services') DNS cache to flush. It shouldn't take more than 48 hours. I can sometimes get the Facebook Debugger to return a 200, but it still has errors, because of this HTML tag on the page pointing elsewhere:

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



来源:https://stackoverflow.com/questions/20885695/why-is-my-github-hosted-site-responding-with-http-302-instead-of-200

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!