请求和响应

145 阅读5分钟

WWW的发明

1989年-1992年, Tim Berners-Lee(李爵士), 发明了WWW(World Wide Web), 一种适用于全世界的网络, 其次还发明了第一个服务器, 第一个浏览器, 第一个网页, 发明了互联网的雏形

主要包含以下三个概念:

  1. URL, 俗称网址(还有URI, URN)
  2. HTTP, 两个电脑直接传输内容的协议
  3. HTML, 超级文本, 用来做页面跳转

URL的作用是能让你访问一个页面, HTTP的作用是让你能下载这个页面, HTML的作用是让你能看懂这个页面

URL

一个URL通常由以下几部分组成, 其实还有个端口,只是浏览器给隐藏掉了,默认是80端口

baidu.comwww.baidu.com 不是同一个域名, 但是都有同一个二级域名

.com 是顶级域名, baidu 是二级域名, www 是三级域名

DNS

Domain(域) Name(名) System(系统)

  • 输入域名

访问域名: 我问路由, 然后路由去问电信该域名的ip是多少, ip是会变的, 因为百度的服务器有几万台.

  • 输出IP

电信会帮你解析该域名的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请求的内容

  1. GET / HTTP/1.1 : GET代表动词(GET, POST, PUT,DELETE , PATCH, HEAD, OPTIONS); /代表路径,当网址后面加上绝对路径时会显示,不加则显示/;HTTP/1.1代表协议/版本
  2. 第二部分是图中所有的key:value, 2-5行都是
  3. 第三部分是回车
  4. 第四部分为空

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

上图就是GET请求的响应内容

  1. 第一部分: HTTP/1.1 协议/版本, 200状态码, OK状态解释
  2. 第二部分: key:value
  3. 第三部分: 回车
  4. 第四部分: 要下载的内容,百度首页的HTML, 由第二部分的Content-Type决定, 如果将第二部分Content-Type的value改成text/htlm,将会报错

POST

上图出现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请求

以www.baidu.com为例

  1. Chrome浏览器输入www.baidu.com访问
  2. 右键检查,选择NetWork,刷新页面
  3. 选中第一个响应
  4. 查看Headers中的Request Headers, 点击view source

  1. 如上图可以看到请求的三部分

  2. 如果有请求的第四部分,那么在 FormData 或 Payload 里面可以看到

使用Chrome查看GET请求的响应

同样以www.baidu.com为例

  1. Chrome浏览器输入www.baidu.com访问
  2. 右键检查,选择NetWork,刷新页面
  3. 选中第一个响应
  4. 查看Headers中的Response Headers, 点击view source

  1. 如上图可以看到响应的三部分

使用Chrome发POST请求

同样以www.baidu.com为例, 需要先退出百度账号的登录,然后进行登录, 因为登录是POST的请求

  1. 登录之前先选中NetWork的Preserve log, 防止页面更新,看不到POST请求

  1. 登录, 选中?login的响应
  2. 查看对应的请求和响应