超文本传输协议(英语:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议[1]。HTTP是万维网的数据通信的基础。
这一篇文章会简单介绍HTTP的请求与响应,并在其中穿插curl命令的使用。
一、HTTP请求
一个简单的栗子
首先我们来看看一个很简单的请求:
GET / HTTP/1.1
Host: www.baidu.com
User-Agent: curl/7.54.0
Accept: */*
这就是我们平时打开百度时向服务器提交的请求。用curl命令表示为:
curl -s -v -- "https://www.baidu.com"
或者发送一个POST请求:
curl -X POST -d "hello" -s -v -H -- "https://www.baidu.com"
其中 -d "hello"
表示向服务器提交的数据。explainshell。
请求内容格式
动词 路径 协议/版本
Key1: value1
Key2: value2
Key3: value3
Content-Type: application/x-www-form-urlencoded
Host: www.baidu.com
User-Agent: curl/7.54.0
要上传的数据
- 请求最多包含四部分,最少包含三部分。(第四部分可以为空)
- 第一部分格式通常为
动词 路径 协议/版本
。 - 第二部分中的
Content-Type
标注了第 4 部分的格式 - 第三部分永远都是一个回车(\n)
- 在第一部分中,动词有
GET
POST
PUT
PATCH
DELETE
HEAD
OPTIONS
等,路径包括「查询参数」,但不包括「锚点」,如果你没有写路径,那么路径默认为 /。 -
GET
与POST
的主要区别是前者是向指定的资源发出“显示”请求,后者是向指定资源提交数据,请求服务器进行处理。
用Chrome开发者工具查看 HTTP 请求内容
- 打开开发者工具中的Network,并清空记录。
- 在地址栏输入地址。
-
展开Request Headers,并点击 view source 就可以看到请求内容。
请求内容
二、HTTP响应
一个简单的栗子
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: Sun, 02 Dec 2018 11:59:44 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=/
{ [1048 bytes data] //这里是返回的内容
以上是www.baidu.com服务器响应的内容。
响应内容的格式
协议/版本号 状态码 状态解释
Key1: value1
Key2: value2
Content-Length: 17931
Content-Type: text/html
要下载的内容
- 状态码简单解析wiki解释:
- 1xx 请求已被服务器接收,继续处理(不常用)
- 2xx 请求已成功
- 3xx 表示重定向
- 4xx 表示客户端请求错误
- 5xx 表示服务器错误
- 状态解释没什么用
- 第二部分中的 Content-Type 标注了第 4 部分的格式并遵循 MIME 规范。
- 第三部分回车。
- 第四部分就是要下载内容。
用Chrome开发者工具查看 HTTP 响应内容
- 打开开发者工具中的Network,并清空记录。
- 在地址栏输入地址。
- 展开Response Headers,并点击 view source 就可以看到响应的前两部分。
-
点击Tab栏上的 Response 或者 Preview就可以看到响应的第四部分内容。
响应内容前两部分
网友评论