简介

  1. 超文本传输协议(HTTP,HyperText Transfer Protocol)是一种应用层协议。rfc2616文档定义了HTTP/1.1版本,目前广泛被使用。
  2. HTTP协议通信默认建立在TCP协议之上,一般一个HTTP server在传输层上开放端口是80

请求方法

  1. OPTIONS:查询服务器的性能或者请求资源的需求
  2. GET:请求获取Request-URI所标识的资源
    1. 当请求体不携带数据时,请求报文的格式如下:
    GET /test HTTP/1.1
    Host: 112.124.40.1x
    User-Agent: PostmanRuntime/7.26.3
    Accept: */*
    Accept-Encoding: gzip, deflate, br
    Postman-Token: f0b537a9-ec3a-4b55-9fd3-4e849663b589
    
    
    1. 当请求体以form-data形式携带数据时,请求报文的格式如下
    GET /test HTTP/1.1
    Host: 112.124.40.1x
    User-Agent: PostmanRuntime/7.26.3
    Content-Length: 266
    Accept: */*
    Accept-Encoding: gzip, deflate, br
    Content-Type: multipart/form-data; boundary=--------------------------503095490044683101881136
    Postman-Token: 45ed2b17-0096-449d-9aba-25d1866eaab6
    
    ----------------------------503095490044683101881136
    Content-Disposition: form-data; name="name"
    
    nrv
    ----------------------------503095490044683101881136
    Content-Disposition: form-data; name="age"
    
    24
    ----------------------------503095490044683101881136--
    
    1. 当请求体以x-www-form-urlencoded形式携带数据时,请求报文的格式如下
    GET /test HTTP/1.1
    Host: 112.124.40.1x
    User-Agent: PostmanRuntime/7.26.3
    Content-Length: 15
    Accept: */*
    Accept-Encoding: gzip, deflate, br
    Content-Type: application/x-www-form-urlencoded
    Postman-Token: 86a3016b-a00b-4a10-b7f6-0a2544afb50f
    
    name=nrv&age=24
    
  3. HEAD:请求获取由Request-URI所标识的资源的响应头
  4. POST:在Request-URI所标识的资源后增加新的数据
    1. 当请求体以form-data形式携带数据时,请求报文的格式如下
    POST /test HTTP/1.1
    Host: 112.124.40.1x
    User-Agent: PostmanRuntime/7.26.3
    Content-Length: 266
    Accept: */*
    Accept-Encoding: gzip, deflate, br
    Content-Type: multipart/form-data; boundary=--------------------------250868630620014304134458
    Postman-Token: ac61dab9-57bd-420e-adea-66ad24f55bd2
    
    ----------------------------250868630620014304134458
    Content-Disposition: form-data; name="name"
    
    nrv
    ----------------------------250868630620014304134458
    Content-Disposition: form-data; name="age"
    
    24
    ----------------------------250868630620014304134458--
    
    1. 当请求体以x-www-form-urlencoded形式携带数据时,请求报文的格式如下
    POST /test HTTP/1.1
    Host: 112.124.40.1x
    User-Agent: PostmanRuntime/7.26.3
    Content-Length: 15
    Accept: */*
    Accept-Encoding: gzip, deflate, br
    Content-Type: application/x-www-form-urlencoded
    Postman-Token: c7159c3f-2d7d-45f9-b56e-dc23802609a0
    
    name=nrv&age=24
    
  5. PUT:请求服务器添加或修改一个资源,并用Request-URI作为其标识
  6. DELETE:请求服务器删除Request-URI所标识的资源
  7. TRACE:请求服务器回送收到的请求信息,主要用于测试或诊断
  8. CONNECT:保留给可以动态切换为隧道的代理使用

状态码

  1. 1xx:表示请求收到,正在处理中
  2. 2xx:表示请求成功处理
  3. 3xx:表示需要进行附加操作才能完成请求
  4. 4xx:表示客户端错误,不能处理客户端请求
  5. 5xx:表示服务端错误,处理请求出错

请求报文

请求报文由请求行、请求头、请求空行、请求体四个部分组成

1.请求行
  1. 请求行格式为请求方法名 空格 请求URI 空格 HTTP协议版本 CRLF
  2. 示例如下:其中请求方法为POST,HTTP协议版本为HTTP/1.1
POST /api/4/envelope/?sentry_key=423672e28e394864b3bb81271a8d538f&sentry_version=7&sentry_client=sentry.javascript.angular-ivy%2F7.112.2 HTTP/1.1

2.请求头
  1. 请求头格式如下
字段名: 字段值 CRLF
...
字段名: 字段值 CRLF
  1. 示例如下:
Accept: */*
Accept-Encoding: gzip, deflate, br, zstd
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Cache-Control: no-cache
Connection: keep-alive
Content-Length: 487
Content-Type: text/plain;charset=UTF-8
Host: client-report.zsxq.com
Origin: https://wx.zsxq.com
3.请求空行
  1. 请求空行由回车换行符组成
4.请求体
  1. 如果请求体不为空的话,请求体包含向服务端发送的请求数据

响应报文

1.响应行
  1. 响应行格式为协议版本 空格 状态码 空格 状态码描述 CRLF
  2. 示例如下:其中HTTP协议版本为HTTP/1.1,状态码为200,表示成功响应
HTTP/1.1 200 OK
2.响应头
  1. 响应头格式如下
字段名: 字段值 CRLF
...
字段名: 字段值 CRLF
  1. 示例如下:
Server: nginx
Date: Sun, 28 Apr 2024 15:03:02 GMT
Content-Type: application/json
Content-Length: 2
Connection: keep-alive
3.响应空行

响应空行由回车换行符组成

4.响应体

如果响应头中存在Content-Length字段,且大于0,则响应体包含向客户端发送的响应数据

常见的请求头字段

  1. User-Agent:用于标识HTTP client的身份信息,可以根据不同的HTTP客户端使用的浏览器不同,响应不同的数据
  2. Referer字段:告诉服务器当前请求从哪里来。这个字段的作用是防盗链以及执行一些统计工作
  3. Content-Length:指定请求体的大小
  4. Host:指定请求资源的IP地址和端口号
  5. Accept-Encoding:指定允许接收的编码格式,常用的值有gzip、deflate、br

常见的响应头字段

  1. Content-Type:服务器告诉客户端本次响应数据格式及编码格式,例如text/plain;charset=UTF-8
  2. Content-disposition:服务器告诉客户端以什么格式打开响应体数据。其默认值有in-line表示在当前页面内打开,attachment;filename=xxx;以附件形式打开响应体,一般用于文件下载
  3. Content-Length:指定响应体的大小
  4. Content-Encoding:指定响应体的编码格式
  5. Connection:值有两种,close和keep-alive。close表示通知消息发送方响应数据后就关闭连接,keep-alive表示建立长连接。
  6. Transfer-Encoding:常见值为chunked,通知对端数据是分块传输的

特点

  1. 无状态:为了保持HTTP协议的简单性,HTTP协议本身不会对通信状态进行持久化处理。然而,在许多应用场景中,需要保持用户登录的状态或记录用户购物车中的商品。由于HTTP是无状态协议,所以必须引入一些技术来记录管理状态,例如Cookie。在请求头中会存在一个字段Cookie,维护着某种状态信息。
  2. 无连接:服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。早期这么做的原因是请求资源少,追求快。在HTTP1.0版本中每一次请求响应都会建立新的连接,即请求头的Connection字段值为close;在HTTP1.1版本中对连接进行复用,将请求头的Connection字段值设置为Keep-Alive实现长连接

问题:get和post请求方法的区别:

  1. 在实际应用中,GET请求方法通常会将向服务端发送的数据放在URI后,以问号分割URI和传输的数据,参数之间以&符号相连。发送的数据会出现在请求报文的请求行中;POST方法通常将提交的数据放在HTTP包的请求体中。
  2. GET提交的数据大小有限制(因为浏览器的输入框或者服务端解析请求报文对URL的长度有限制),而POST方法提交的数据没有限制。