UNIX C HTTP请求返回301已永久移动

时间:2014-11-04 05:57:01

标签: c http unix redirect http-headers

我熟悉301错误代码,但对http请求是新的,并且正确格式化它们。

在我的程序中,我需要检索我学校的主页,但我得到了一个301 Moved Permanently标题。标题的位置显示页面移动到的位置,但即使是新位置也不适合我,可能是因为我没有正确格式化。

最初我发送此请求:

GET / HTTP/1.1\r\nHost: www.cs.uregina.ca\r\nConnection: close\r\n\r\n

并收到此标题:

Received: HTTP/1.1 301 Moved Permanently
Date: Tue, 04 Nov 2014 05:38:42 GMT
Server: Apache
Location: http://www.cs.uregina.ca/
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=utf-8

我的新HTTP请求应该如何才能获得上述移动的网页?

如果我按照建议尝试移动页面的位置,那么我会得到以下400错误请求响应:

GET / HTTP/1.1\r\nHost: http://www.cs.uregina.ca\r\nConnection: close\r\n\r\n

Received: HTTP/1.1 400 Bad Request
Date: Tue, 04 Nov 2014 05:52:36 GMT
Server: Apache
Content-Length: 334
Connection: close
Content-Type: text/html; charset=iso-8859-1

2 个答案:

答案 0 :(得分:1)

  

最初我发送此请求:

GET / HTTP/1.1\r\nHost: www.cs.uregina.ca\r\nConnection: close\r\n\r\n
     

并收到此标题:

Received: HTTP/1.1 301 Moved Permanently
...
Location: http://www.cs.uregina.ca/
...

这正是我申请cs.uregina.ca时得到的结果。您可能已连接到cs.uregina.ca(或www以外的某个子域),或者与www.cs.uregina.ca不对应的IP地址。

  

如果我按照它的建议尝试移动页面的位置,那么我会得到   以下400个错误请求响应:

GET / HTTP/1.1\r\nHost: http://www.cs.uregina.ca\r\nConnection: close\r\n\r\n

Received: HTTP/1.1 400 Bad Request
...

这并不奇怪。您必须从http://标头中删除Host:协议。例如:

GET / HTTP/1.1\r\nHost: www.cs.uregina.ca\r\nConnection: close\r\n\r\n

通常,在请求以下URL时:

     http://domain.example:80/path/to/resource/?query#fragment
     ----   -------------- ==------------------------
  protocol      host      |        path
                          port
你会:

  • 主机名称解析为IP地址,并连接到端口上的该IP地址(如果存在于URL中)或与协议即可。
  • 使用特定于协议的机制与服务器通信。在这种情况下,是一个HTTP请求。
  • 从具有相应Host:标头的服务器请求路径(如果同一IP上有多个主机)。
  • 片段标识符与(X)HTML一起使用,实际上并未发送到服务器。

请求应该(至少)看起来像这样:

GET /path/to/resource/?query HTTP/1.1
Host: domain.example
Connection: close

详情请见:

答案 1 :(得分:0)

如果您只想要主页,请下载nc并输入" nc www.cs.uregina.ca 80" 当nc开始输入以下内容然后点击返回两次:

获取http://www.cs.uregina.ca HTTP / 1.0