HTTP请求与相应

HTTP简介

HTTPHypertext Transfer Protocol,超文本传输协议 )是在万维网上进行通信时所使用的协议方案。HTTP 有很多应用,但最著名的是用于 Web 浏览器和 Web 服务器之间的双工通信。

——HTTP权威指南

这是HTTP权威指南中对HTTP的解释。对于已经了解HTTP的人来说足够言简意赅,但对于初学者来说,还是有些生涩,超文本是个啥?协议又是个啥?双工通信是个啥?理解起来,要绕上一圈,还是不能直截了当的理解。

那么,有没有更好的方式了解HTTP到底是什么东西呢?

语文学的好的同学,则好理解的多。提取主谓宾,就可以知道,“HTTP+是+协议方案”。那么,知道到了HTTP是个协议方案以后。又该怎么理解呢,为什么网络通信要用这个协议方案呢?这个协议的内容是个啥呢?这个就说来话长了,下面为大家稍微讲解~

首先拿一个最常见的例子来说,先看下图


HTTP请求与相应_第1张图片
浏览网页的一个完整过程(图源HTTP权威指南)

生活中,我们上网的一个过程:

  1. 用户使用客户端输入网址或者IP地址;
  2. 客户端服务器发送请求信息;
  3. 服务器客户端发送响应信息;
  4. 客户端下载服务器响应的信息内容;
  5. 用户看到了网页

客户端(暂且理解为浏览器)
服务器(暂且理解保存处理数据的机器)

看完了一个生活中使用网站时,发生的整个过程。那HTTP在当中到底是起到什么作用呢?
不就是很简单的 发送请求 --> 回复响应 -> 接受响应 的一个过程么。HTTP是不是这么简单呢?

再尝试深入思考一下

  • 客户端发送请求的内容是什么呢?
  • 怎么发送呢?
  • 怎么让服务器知道我想要什么内容呢?
  • 服务器怎么判断客户端发来的请求想要的是什么呢?
  • 客户端怎么知道服务器响应回来的是什么内容呢?
  • 此处省去一万字...

想解开这些疑惑,这就得深入理解一下HTTP请求、HTTP响应的内容了。

HTTP请求


HTTP请求格式

第一部分:动词 路径 协议/版本
第二部分:
key1:value1
key2:value2
Content-Type:xxxx/xxx
Host:www.xxxx.com
第三部分:
第四部分: 要上传的数据内容

  • 请求包含四部分,也可以只包含三部分。(第四部分可以为空的)

  • 第一部分:

    1. 动词,动词有 GET(获取)、POST(上传)、PUT(正题更新)、PATCH(区域更新)、DELETE(删除)、HEADOPTIONS
    2. 路径,如果你没有写路径,那么路径默认为 /
    3. 协议/版本,请求信息的协议和版本号
    4. 一般为第一行内容
  • 第二部分:

    1. 第二部分为请求元信息 ,中间用冒号隔开的信息列表。
    2. key1、key2为举例说明格式,无其他意义。
    3. Content-Type 标注了第 4 部分的格式。
  • 第三部分: 第三部分永远都是一个回车(\n)

  • 第四部分:要上传的数据内容,可以为空。

Chrome浏览器查看HTTP请求

我们就用访问百度这个网站的例子说明格式

  1. 打开浏览器(我都用的是Chrome);
  2. 直接右键点击选中检查(Ctrl+Shift+I) 或者直接按下F12键;
  3. 弹出浏览器的检查模式,在第一排导航中,找到 Network 选中;
  4. 输入输入网址 https://www.baicu.com 确定;
  5. 在检查模式刷新的列表中,找到排第一的www.baidu.com 点击;
  6. 点击之后进入,右边栏目headers中找到 Resquest Headers 点击展开
  7. 展开Resquest Headers内容后,然后点击旁边的 view source
  8. 这时,Resquest Headers内容就变为HTTP的请求内容
GET / HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: xxxxxxxx

好了,到此为止,就可以看到上面HTTP请求的前面三部分内容了。如果有第四部分,则在FormData或者Payload中。

如果想在深入了解,各个部分的代码是表示什么,第一部分的GET什么意思呀?第二部分的Host、connection等等什么意思呀?就得更加地深入学习HTTP了,查询文档和规范,看关于的HTTP书籍,看关于详解HTTP的博客等等,这里只浅解HTTP,让你理解什么是HTTP。

HTTP响应


HTTP响应格式

第一部分:协议/版本号 状态码 状态解释
第二部分:
key1:value1
key2:value2
Content-Length: 17931
Content-Type:xxx/xxx
第三部分:
第四部分: 要下载的数据内容

  • 状态码要背,是服务器对浏览器说的话
    ○ 1xx 不常见
    ○ 2xx 代表成功 ——200,普通成功;204,创建成功;
    ○ 3xx 表示资源不在这,去的地方找——301,永久不纯在。302,临时不纯在。
    ○ 4xx 表示你的操作有错误——用户方出错
    ○ 5xx 表示服务器端有错误——服务器放出错

  • 状态解释就是告诉你一下信息,比如成功了、失败了等等信息。

  • 第 2 部分中的 Content-Type 标注了第 4 部分的格式

  • 第 2 部分中的 Content-Type 遵循 MIME 规范

Chrome浏览器查看HTTP响应

继续拿访问百度来说明,

  1. 打开浏览器(我都用的是Chrome);
  2. 直接右键点击选中检查(Ctrl+Shift+I) 或者直接按下F12键;
  3. 弹出浏览器的检查模式,在第一排导航中,找到 Network 选中;
  4. 输入输入网址 https://www.baicu.com 确定;
  5. 在检查模式刷新的列表中,找到排第一的www.baidu.com 点击;
  6. 点击之后进入,右边栏目headers中在找到 Response Headers 点击展开
  7. 展开Response Headers内容后,然后点击旁边的 view source
  8. 这时,Response Headers内容就变为HTTP的请求内容
  9. 第四部分在response中。
HTTP/1.1 200 OK
Bdpagetype: 2
Bdqid: 0xba22dd350002b473
Cache-Control: private
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/html;charset=utf-8
Date: Mon, 04 Jun 2018 09:24:10 GMT
Expires: Mon, 04 Jun 2018 09:24:10 GMT
Server: BWS/1.1
Set-Cookie: BDSVRTM=206; path=/
Set-Cookie: BD_HOME=1; path=/
Set-Cookie: H_PS_PSSID=26525_1443_21081_26350_20930; path=/; domain=.baidu.com
Strict-Transport-Security: max-age=172800
X-Ua-Compatible: IE=Edge,chrome=1
Transfer-Encoding: chunked

以上,大概能够理解HTTP请求与响应的一个过程。


CURL

最后,介绍一个快速能够查看请求与响应过程的范式。直接用命令行查访问一个网站的请求和响应的过程,使用 curl 命令

curl命令是一种命令行工具,作用是发出网络请求,然后获取数据,显示在"标准输出"(stdout)上面。

——微风伏面

首先,尝试一下,使用curl 命令访问百度,在git bash(windows用户)中输入:

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

-s 静默模式,不输出任何东西
-v 参数可以显示一次 http 通信的整个过程,包括端口连接和 http request 头信息。

显示的信息只找到 >< 开头的行, > 表示请求的命令行,<表示响应的命令行。*号表示注释。


> GET / HTTP/1.1
> Host: www.baidu.com
> User-Agent: curl/7.55.0
> Accept: */*
>

< HTTP/1.1 200 OK
< Accept-Ranges: bytes
< Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
< Connection: Keep-Alive
< Content-Length: 2443
< Content-Type: text/html
< Date: Mon, 04 Jun 2018 10:15:26 GMT
< Etag: "58860402-98b"
< Last-Modified: Mon, 23 Jan 2017 13:24:18 GMT
< Pragma: no-cache
< Server: bfe/1.0.8.18
< Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
<

以上为以使用命令curl,访问一个网站的请求与响应的命令行。相对于使用浏览器操作步骤查看来说,使用命令行,只需要输入curl的命令内容,更加快捷。当前,前提是你得学会使用命令行。

curl更深入学习


好了,HTTP粗浅了解,到这里就结束了~想要更加深入学习HTTP,则需要付出更多的学习时间和精力。

你可能感兴趣的:(HTTP请求与相应)