请求和响应
WWW的发明
1989年-1992年, Tim Berners-Lee(李爵士), 发明了WWW(World Wide Web), 一种适用于全世界的网络, 其次还发明了第一个服务器, 第一个浏览器, 第一个网页, 发明了互联网的雏形
主要包含以下三个概念:
- URL, 俗称网址(还有URI, URN)
- HTTP, 两个电脑直接传输内容的协议
- HTML, 超级文本, 用来做页面跳转
URL的作用是能让你访问一个页面, HTTP的作用是让你能下载这个页面, HTML的作用是让你能看懂这个页面
URL
一个URL通常由以下几部分组成, 其实还有个端口,只是浏览器给隐藏掉了,默认是80端口
imagebaidu.com 和 www.baidu.com 不是同一个域名, 但是都有同一个二级域名
.com 是顶级域名, baidu 是二级域名, www 是三级域名
DNS
Domain(域) Name(名) System(系统)
- 输入域名
访问域名: 我问路由, 然后路由去问电信该域名的ip是多少, ip是会变的, 因为百度的服务器有几万台.
- 输出IP
image image电信会帮你解析该域名的ip, 帮你解析的服务器就是DNS服务器
DNS服务器会存储资源, 例如主机记录, 别名记录, IP主机记录等
请求与响应
- Server : 服务器,也就是你的电脑。
- Client :客户端,也就是你的浏览器。
- HTTP :服务器和浏览器之间通信的协议,指导如何进行沟通。
- 浏览器负责发起请求
- 服务器在80端口接收请求
- 服务器负责返回内容(响应)
- 浏览器负责下载响应内容
curl请求的使用
curl是 一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称url为下载工具。
列举几种常用的带参数的curl命令
curl "http://example.com" -o filename # 将下载的内容写到文件中 output
curl "http://example.com" > filename # 同上
curl -O "http://example.com/filename" # 下载文件(.jpg, .png等),并保留远程文件名 remote-name
curl -L "http://example.com/filename" # Location redirects 重定向
curl -s -v -H -- "http://example.com/filename"
# -s 静音模式,不显示下载进度等其他的东西;
# -v verbose 用于打印更多信息,包括发送的请求信息,这在调试脚本是特别有用;
# -H 自定义header头信息传递给服务器, 添加响应头
# GET 请求
curl -d 'name=yjjtt' "http://example.com/filename" # -d data,POST请求传递数据
curl -X POST -d 'name=yjjtt' "http://example.com/filename" # -X 指定POST request, -d data
# 其他的自行google linux curl就好了
curl 请求
- 请求最多包含四部分, 最少包含三部分, 第四部分可以为空, 第四部分是要上传的数据
- 第三部分永远是一个回车
- 第一部分的路径不包含锚点, 如果没有写路径默认为/
- 第二部分的Content-Type标注了第四部分的格式
具体参照下面的例子来分析:
GET
命令行输入该命令,curl -s -v -H "yjjtt: xxx" -- "https://www.baidu.com"
上图就是curl请求的内容
- GET / HTTP/1.1 :
GET
代表动词(GET, POST, PUT,DELETE , PATCH, HEAD, OPTIONS);/
代表路径,当网址后面加上绝对路径时会显示,不加则显示/
;HTTP/1.1
代表协议/版本 - 第二部分是图中所有的key:value, 2-5行都是
- 第三部分是回车
- 第四部分为空
POST
命令行输入该命令,curl -X POST -s -v -H "yjjtt: xxx" -- "https://www.baidu.com"
- GET和POST的请求格式一样
请求的格式
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 /n回车
4 要上传的数据
curl响应
- 响应包含四部分, 第四部分为要下载的内容, 可以很长很长
- 状态码要背, 是服务器对浏览器说的话
200 普通成功 204 创建成功
301 滚 永久不存在 location会告诉新地址
302 临时不存在
404 页面不存在, 浏览器错误
502 服务器错误 server taskcenter start/stop
- 第二部分的Content-Type 标注了第四部分的格式
- 第 2 部分中的 Content-Type 遵循 MIME 规范
GET
image上图就是GET请求的响应内容
- 第一部分:
HTTP/1.1
协议/版本,200
状态码,OK
状态解释 - 第二部分: key:value
- 第三部分: 回车
- 第四部分: 要下载的内容,百度首页的HTML, 由第二部分的Content-Type决定, 如果将第二部分Content-Type的value改成
text/htlm
,将会报错
POST
image上图出现302 状态码, 是因为百度首页不支持POST, 所以第五部分会返回很抱歉,您要访问的页面不存在!
- GET和POST请求对应的响应可以一样,也可以不一样
- 响应的第四部分很长很长
响应的格式
1 协议/版本 状态码 状态解释
2 key1: value1
2 key2: value2
2 key3: value3
2 Content-type: text/html
2 Host: www.baidu.com
2 Content-Length: 17931
3 /n回车
4 要下载的内容
使用Chrome发GET请求
- Chrome浏览器输入www.baidu.com访问
- 右键检查,选择NetWork,刷新页面
- 选中第一个响应
- 查看Headers中的Request Headers, 点击view source
-
如上图可以看到请求的三部分
-
如果有请求的第四部分,那么在 FormData 或 Payload 里面可以看到
使用Chrome查看GET请求的响应
同样以www.baidu.com为例
- Chrome浏览器输入www.baidu.com访问
- 右键检查,选择NetWork,刷新页面
- 选中第一个响应
- 查看Headers中的Response Headers, 点击view source
- 如上图可以看到响应的三部分
使用Chrome发POST请求
同样以www.baidu.com为例, 需要先退出百度账号的登录,然后进行登录, 因为登录是POST的请求
- 登录之前先选中NetWork的Preserve log, 防止页面更新,看不到POST请求
- 登录, 选中?login的响应
- 查看对应的请求和响应