HTTP GET requests
查看下示例服务器运行的终端服务器日志。当你向示例服务器请求一个页面,日志会出现这样一条记录:1
127.0.0.1 - - [03/Oct/2016 15:45:50] "GET /readme.png HTTP/1.1" 200 -
查看日期和时间之后的部分, “GET /readme.pg HTTP/1.1” ,这就是浏览器发送给服务器的请求行的文本。该条日志记录告诉你它收到了一个请求,照字面意义,GET /readme.pg HTTP/1.1 。
这条请求有三个部分。
GET 是使用的方法(method)或HTTP动词(HTTP verb),这表明发出的是什么样的请求。当客户端想要服务器发送某个资源,比如一个网页或者图片,就使用 GET 方式。我们会在之后查看当客户端想要做其他事情,比如提交表单或对某个资源作出修改,使用的其他的方式。
/readme.png 是请求的资源的路径。注意:客户端在此没有发送该资源的完整的URI。它并没有说 https://localhost:8000/readme.png 。它只是发送路径。
最后, HTTP/1.1 是该请求的协议。这么多年过去,HTTP如何工作发生了一些改变。客户端必须告知服务器它们说的是HTTP的哪一种方言。现在,HTTP/1.1是最常见的版本。
Exercise: Send a request by hand
可以使用 ncat 连接到示例服务器,手动发送一个HTTP请求。
开启一个终端,运行示例服务器,python3 -m http.server 8000
。
使用 ncat 127.0.0.1 8000 将终端连接到示例服务器。
键入下面两行:1
2GET / HTTP/1.1
Host: localhost
按两次enter键,服务器的响应会马上显示在你的终端。根据你终端的尺寸大小,网络服务器的文件数量,你可能会需要向上滚动才能看到响应的开始。