Http请求与响应

272 阅读4分钟

Http全称为HyperText Transfer Protocol,超文本传输协议,它的作用就是指导浏览器和服务器进行沟通,正常的沟通过程是:

浏览器发起请求-->服务器在80端口接收请求-->服务器返回一个内容响应-->浏览器下载响应的内容

发起请求的方式有两种,一种是直接在浏览器输入对应网址或进行某种操作,另一种是用命令行curl指令发起请求。

1、使用浏览器输入网址发起请求,即url,一个url一般包含以下几个部分:

协议   域名  端口  路径  查询参数  锚点

比如:www.baidu.com/s?wd=hello&… 

https为协议名称,www.baidu.com为访问的域名,/s是路径,该路径不代表真的有对应的文件存在,?wd=hello&rsv_spt=1为查询参数,#5为锚点。

在浏览器查看请求和响应内容:

打开chrome浏览器,右上角设置里选择更多工具-->开发者工具,会看到多了这样一个窗口,点击network


刷新一个网页时会发现多出很多这样的请求


点击第一个进入会出现以下页面:


点击view source即可以看到对应的内容,其中Response Headers为响应内容,Request Headers为请求内容。

2、使用curl指令:

curl用法:curl (选项)(参数)

选项有一些常见的缩写如下:
-a/--append   上传文件时,附加到目标文件

-A/--user-agent <string>  设置用户代理发送给服务器

-d/--data <data>  Http POST方式传送数据

-D/--dump-header <file> 把header信息写入到该文件中

-e/--referer  来源网址

-f/--fail  连接失败时不显示http错误

-F/--form <name=content>  模拟http表单提交数据

-G/--get  以get的方式来发送数据

-H/--header <line>  自定义头信息传递给服务器

-i/--include  输出时包括protocol头信息

-I/--head  只显示请求头信息

-j/--junk-session-cookies  读取文件忽略session cookie

-k/--insecure  允许不使用证书到SSL站点

-K/--config   指定的配置文件读取

-l/--list-only  列出ftp目录下的文件名称

-m/--max-time <seconds>  设置最大传输时间

-o/--output  把输出写到该文件中

-O/--remote-name   把输出写到该文件中,保留远程文件的文件名

-p/--proxytunnel  使用HTTP代理

-s/--silent  静默模式。不输出任何东西

-u/--user <user[:password]>   设置服务器的用户和密码

-v/--version  显示版本信息

-X/--request <command>  指定什么命令

命令请求实例:

curl -s -v  -H "hello" --"https://www.baidu.com"

意思向百度发起一个请求,同时发送内容为hello的头信息。

可以看到给我们返回了很多东西,其中下面这段是发送的请求内容和收到的响应内容:


请求的内容最多包含4部分,最少包含3部分,第四部分可以为空:

第一部分:动词 路径 协议/版本

动词(请求的方式GET/POST/PUT/PATCH/DELETE)

Get:请求指定的页面信息,并返回数据

Post:向指定资源提交数据进行处理请求

Put:从客户端向服务器传送的数据全面替换指定的文档内容

Patch:从客户端向服务器传送的数据部分替换指定的文档内容

Delete:请求服务器删除指定的内容

路径:发起请求的链接中的路径,可以为空,但默认都是以/开头,路径中包括查询参数,但是不包括锚点

协议:使用的协议比如https,ftp等等

版本号:协议版本号

第二部分格式:key:value


第三部分:永远都是一个回车(/n)

第四部分:一般为要上传的数据,并且在第二部分中如果有content-type,那么content-type的值标注了第四部分内容的格式。

不写请求方式时默认为Get方式,也可以换为Post请求,发送数据到对应链接:

curl -X POST -d "1234" -s -v -H "hello" --"https://www.baidu.com"

得到的请求内容为:


获得的响应内容:


响应的格式也是由四部分组成:

第一部分:协议/版本号  状态码  状态解释

状态码:

200 :请求成功   202:服务器成功接收请求   301:被请求的资源已经永久移动到新位置

302:被请求的资源暂时不可以访问,以后可以再访问

404:请求失败,请求所希望得到的资源没有在服务器上找到

500:服务器错误  502:作为网关或代理工作的服务器尝试执行请求时,从上游服务器得到无效的响应

第二部分格式:key:value,同样的,content-type标注了第4部分的格式

第三部分:一个回车(/n)

第四部分:要下载的内容

以上是关于对http请求与响应的简单了解。