HTTP请求及响应简述,附“curl”使用方法

众所周知,HTTP是我们在万维网之中互相通信的基础性协议,它是一个客户端终端和服务器端请求和应答的标准。我们使用浏览器或爬虫等工具,在客户端发起一个HTTP请求到服务器上指定端口,当我们得到服务器响应的HTML与图像文件,又或者得到服务器的拒绝后,我们就完成了一次网络通信。

为了更形象的看到一次完整的HTTP对话,我们打开chrome浏览器,在url栏输入http://github.com,然后Enter。

如果你没有github账号,可以注册一个,这是全球最大的同性交友平台

然后敲下F12,进入开发者模式,在第一栏选取Network,敲下F5 刷新整个页面,选取Name中的请求连接,既可以查看到HTTP相关信息:

General包含有比较关键的对话信息:如URL 请求方法 响应码等信息

HTTP请求

HTTP请求分为请求行/请求头/空行/请求正文四个部分,其中前三部分是必要的:

第一部分为请求行:“Request Method URI HTTP/Vesion”(请求方法 URI 协议/版本):

Request Method,也称“动词“,共有8种如下:

GET向指定的资源发出“显示”请求。HEAD与GET方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部分。POST向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。PUT向指定资源位置上传其最新内容。DELETE请求服务器删除Request-URI所标识的资源。TRACE回显服务器收到的请求,主要用于测试或诊断。OPTIONS这个方法可使服务器传回该资源所支持的所有HTTP请求方法。CONNECTHTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。

URI:Uniform Resource Identifier,统一资源标识符,是一个用于标识某一互联网资源名称的字符串。 该种标识允许用户对网络中的资源通过特定的协议进行交互操作。URI的最常见的形式是URL——统一资源定位符。

协议/版本:例:HTTP/1.1

第二个部分为”Request Header“即请求头:

请求头包含许多有关的客户端环境和请求正文的有用信息 *注意:点击"view parsed"可以和"view source"视图相切换

从图中可以看到,请求头中包含”请求文件的格式”,”HTTP压缩格式“,”所用语言“,”所用方法“等等诸多内容。

第三个部分为空行

请求头以一行空行为结束标志,空行之后就是请求的正文,这个“/n”至关重要。

第四个部分为请求的正文,通常在Request Payload处查看。

HTTP响应

HTTP响应分为状态行/消息头/响应正文三个部分:

状态行:”HTTP/Vesion status code Reason Phrase“(协议/版本 响应码 解释文本)

status code 即响应码,第一位决定了响应码的类别,共有40种

1xx:指示信息--表示请求已接收,继续处理2xx:成功--表示请求已被成功接收、理解、接受3xx:重定向--要完成请求必须进行更进一步的操作4xx:客户端错误--请求有语法错误或请求无法实现5xx:服务器端错误--服务器未能实现合法的请求常见码:200 OK //成功400 Bad Request //请求有问题401 Unauthorized //请求未经授权403 Forbidden /拒绝提供服务404 Not Found //请求资源不存在,eg:输入了错误的URL或伟大长城500 Internal Server Error //服务器错误503 Server Unavailable //服务器不提供服务一段时间

更具体的响应码请查询Status Code Definitions

消息头:包括状态行,日期,文本格式,HTTP压缩格式,服务器,响应码等等数据

注意 ”view source“ 和”view parsed“视图的切换

响应正文,就是服务器返回的资源的内容,对于本例,就是整个的HTML文件。

curl命令查看HTTP信息

curl命令是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称curl为下载工具。

其语法为:curl(选项)(参数)详情

那么,如何用curl查看HTTP信息呢?

eg:

curl -s -v -H "FSX-camus:hi" -- ""

在得到的HTML正文之前,就是本次对话的HTTP请求与响应信息了

使用-X 属性可以选择"动词" 默认为get

eg:

curl -X post -s -v -H "FSX-camus:hi" -- ""

使用 -d 属性可以填入请求正文

eg:

curl -X post -d "helloworld" -s -v -H "FSX-camus:hi" -- ""