HTTP请求与响应简介

超文本传输协议(英语:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。

HTTP是一个客户端(用户)和服务端(网站)之间请求和应答的标准,通常使用TCP协议。通过使用网页浏览器、网络爬虫或者其它的工具,客户端发起一个HTTP请求到服务器上指定端口(默认端口为80)。

通常,由HTTP客户端发起一个请求,创建一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态,比如"HTTP/1.1 200 OK",以及返回的内容,如请求的文件、错误消息、或者其它信息。

(概述来自Wikipedia——超文本传输协议)

HTTP请求

以chrome开发者工具查看HTTP请求示例。步骤如图。

2019-06-26_185329.png

点击view source后,显示如下:

GET / HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36
(以下省略

HTTP请求的格式:(对比上方)

1 动词 路径 协议/版本
2 Key1: value1
2 Key2: value2
2 Key3: value3
2 Content-Type: application/x-www-form-urlencoded
2 Host: www.baidu.com
2 User-Agent: curl/7.54.0
3
4 要上传的数据

(每行开头数字为所属部分)

  • 第一部分:
    • 动词有 GET POST PUT PATCH DELETE HEAD OPTIONS 等
    • 路径包括「查询参数」,但不包括「锚点」
  • 第二部分:
    • 键值对 key:value
    • Content-Type (如果有的话) 标注了第 4 部分的格式
  • 第三部分:
    • 永远都是一个回车(\n)
  • 第四部分:
    • 是否有要上传的数据,没有则该部分被省略

HTTP响应

2019-06-26_191922.png

点击view source后,显示如下:

HTTP/1.1 200 OK
Bdpagetype: 1
Bdqid: 0x9bf2690a000accbd
Cache-Control: private
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/html
Cxy_all: baidu+ae5f8f98ba5e93163b5f38163b056cb5
Date: Wed, 26 Jun 2019 10:47:42 GMT
(以下省略

HTTP响应的格式:(对比上方)
1 协议/版本号 状态码 状态 解释
2 Key1: value1
2 Key2: value2
2 Content-Length: 17931
2 Content-Type: text/html
3
4 要下载的内容

其中,状态码(部分)简介如下:

状态码 含义
1XX消息 请求已被接受,需要继续处理。
2XX成功 请求已成功被服务器接收、理解、并接受。
200 OK 请求已成功
3XX重定向 客户端采取进一步的操作才能完成请求。
301 Moved Permanently 被请求的资源已永久移动到新位置。
302 Found 要求客户端执行临时重定向。
4XX客户端错误 客户端可能发生了错误,妨碍了服务器的处理。
400 Bad Request 由于明显的客户端错误,服务器不能或不会处理该请求。
403 Forbidden 服务器已经理解请求,但是拒绝执行它。
404 Not Found 请求失败,请求所希望得到的资源未被在服务器上发现,但允许用户的后续请求。
5XX服务器错误 表示服务器无法完成明显有效的请求。
500 Internal Server Error 通用错误消息,服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。
502 Bad Gateway 作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。

命令行中curl命令的使用

语法:curl -[参数] -- [url]

常用参数:
-d, --data 以HTTP POST方式传送数据
-s, --silent 静音模式
-v, --verbose 显示更详细的信息
-H, --header 自定义头信息传递给服务器
-X, --request 指定命令(例如POST)

请求示例:curl -X POST -s -v -- "https://www.baidu.com"
效果如图。可注意到 > 后的请求内容,及 < 后的响应内容。

2019-06-26_194324.png

你可能感兴趣的:(HTTP请求与响应简介)