HTTP请求与响应简析

简介

HTTP是一种文件传输协议,规定浏览器与服务器的传输规则,主要有请求与响应两部分。

命令行发送get请求

$ curl -v -- "https://www.baidu.com"
复制代码

如上就是curl发送get请求的写法,你会看到如下内容

* Rebuilt URL to: www.baidu.com/
*   Trying 104.193.88.123...
* TCP_NODELAY set
* Connected to www.baidu.com (104.193.88.123) port 80 (#0)
> GET / HTTP/1.1
> Host: www.baidu.com
> User-Agent: curl/7.54.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: 2381
< Content-Type: text/html
< Date: Sat, 13 Oct 2018 03:25:42 GMT
< Etag: "588604eb-94d"
< Last-Modified: Mon, 23 Jan 2017 13:28:11 GMT
< Pragma: no-cache
< Server: bfe/1.0.8.18
< Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
<
<!DOCTYPE html>
<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=https://ss1.bdstatic.com/5eN1bjq8AAUYm2zgoY3K/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head> <body link=#0000cc>
复制代码

以上内容中分别是什么意思呢?

  1. 星号*开头的书注释
  2. 大于号>开头的是请求信息
  3. 小于号<开头的是响应信息
  4. 后面的是响应内容

命令行发送post请求

$ curl -X POST -v -- "https://www.baidu.com"
复制代码

内容如下

> POST / HTTP/1.1
> Host: www.baidu.com
> User-Agent: curl/7.54.0
> Accept: */*
> Content-Length: 5
> Content-Type: application/x-www-form-urlencoded
>
* upload completely sent off: 5 out of 5 bytes
< HTTP/1.1 302 Found
< Connection: Keep-Alive
< Content-Length: 17931
< Content-Type: text/html
< Date: Fri, 19 Apr 2019 07:44:58 GMT
< Etag: "54d97487-460b"
< Server: bfe/1.0.8.18
<
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<style data-for="result" id="css_result">
复制代码

请求头Header

发送请求的时候,一般需要把服务器需要的数据传送过去,可以在命令中加入 -H "xxx: yyy" 到请求头中,注意:加入请求头的内容必需是 key: value 的形式

$ curl -X POST -v -H "xxx:yyy" -- "https://www.baidu.com"
复制代码
> POST / HTTP/1.1
> Host: www.baidu.com
> User-Agent: curl/7.54.0
> Accept: */*
> xxx:yyy
>
< HTTP/1.1 302 Found
< Connection: Keep-Alive
< Content-Length: 17931
< Content-Type: text/html
< Date: Fri, 19 Apr 2019 07:51:58 GMT
< Etag: "54d97488-460b"
< Server: bfe/1.0.8.18
<
复制代码

请求的内容中就多了一行>xxx:yyy

请求格式

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 要上传的数据
复制代码
  1. 首先请求至少包含三部分(如果要发送数据,数据就是第四部分)
  2. 第一部分包括了用什么方法(动词,路径(请求的网站)用什么版本(版本)的什么协议(协议)
  3. 第二部分包括了请求内容(请求头)
  4. 第三部分是一个回车换行符,用来分割第二部分和第四部分
  5. 第四部分是发送的数据

注意

  1. 这里的路径包括「查询参数」,但不包括「锚点」
  2. 可用的请求方法有 GET POST PUT PATCH DELETE HEAD OPTIONS 等
  3. 如果你没有写路径,那么路径默认为 /
  4. 第二部分中的 Content-Type 标注了第 4 部分的格式

响应格式

1 协议/版本号 状态码 状态解释
2 Key1: value1
2 Key2: value2
2 Content-Length: 17931
2 Content-Type: text/html
3
4 要下载的内容
复制代码
  1. 第一部分首先说明我用什么版本(版本)的什么协议(协议),状态码以及解释
  2. 第二部分包括了响应的信息,但是不是主要内容,只是此次响应的基本信息
  3. 第三部分也是一个回车换行符,用来分割第二部分和第四部分
  4. 第四部分才是响应的内容,一般为JSON数据或者HTML页面

用Chrome浏览器发送HTTP请求

  1. 打开Network
  2. 地址栏输入地址
  3. 在Network点击, 查看request,点击「view source」
  4. 你会看到请求的前三部分
  5. 如果有第四部分, 可以在FormData或Payload中看到

用Chrome浏览器查看HTTP响应

  1. 打开Network
  2. 地址栏输入地址
  3. 选中第一个响应
  4. 查看 Response Headers,点击「view source」
  5. 你会看到响应的前两部分
  6. 查看 Response 或者 Preview,你会看到响应的第 4 部分

转载于:https://juejin.im/post/5cb988d7f265da036d79b74f

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值