目录

​一、HTTP 介绍​

​二、HTTP 特点​

​三、请求消息数据格式​

​1、请求行​

​2、请求头​

​3、请求空行​

​4、请求体(正文)​

​四、响应消息数据格式​

​1、响应行​

​2、响应头​

​3、响应空行​

​4、响应体​

​五、一次完整http请求的过程 ​



一、HTTP 介绍

HTTP(Hyper Text Transfer Protocol)即超文本传输协议,是浏览器和服务器之间进行“沟通”的一种规范,客户端通过请求服务器发送请求消息给服务器;服务器端通过响应发送响应消息给客户端,实现客户端和服务器端之间的通信。

目前有1.0 和 1.1 两个版本,1.0 的版本每一次请求响应都会断开连接再建立新的连接,1.1 的版本可以服用链接

二、HTTP 特点
  • 基于 TCP/IP 的高级协议
  • 无状态的协议:每次请求之间相互独立,不能交换数据
  • 默认端口号:80
  • 基于请求/响应模型的:一次请求对应一次响应
三、请求消息数据格式

1、请求行

格式:请求方式 请求URL 请求协议/版本

eg:GET /mySubmit.html HTTP/1.1

  • 请求方式:HTTP协议协议有 7 种请求方式,常用的有两种:GET 和 POST,他们的主要区别有:
  • GET:
  1. 请求参数在请求行中,在URL后
  2. 请求的URL长度有限
  3. 不太安全
  • POST:
  1. 请求的参数在请求体中
  2. 请求的URL没有长度限制
  3. 相对较安全

2、请求头

  • 格式:请求头名称:请求头值

    Host: localhost:8080
    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Firefox/68.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
    Accept-Encoding: gzip, deflate
    Referer: http://localhost:8080/mySubmit.html
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 11
    Connection: keep-alive
    Cookie: Idea-f4f5aed6=f93a91f4-613a-47ea-85c5-ab40a7eb0b35
    Upgrade-Insecure-Requests: 1
    Cache-Control: max-age=0
  • 常见的请求头:
  • User-Agent:浏览器告诉服务器,要访问所使用的浏览器的版本信息,可以在服务器端获取该头的信息,解决浏览器的兼容性问题
  • Referer:能够告诉服务器,当前请求从哪里来,作用:
  • 防止盗链
  • 统计工作

3、请求空行

空行,用于分隔 POST 请求的请求头和请求体的

4、请求体(正文)

封装 POST 请求消息的请求参数

四、响应消息数据格式

1、响应行

格式:协议/版本 响应状态码 状态码描述

  • 响应状态码:服务器告诉客户端浏览器本次请求和响应的一个状态,状态码都是三位数字,一般是1xx、2xx、3xx、4xx、5xx 这五类
  • 1xx:服务器接收客户端消息,但没有接收完成,等待一段时间后,发送1xx状态码
  • 2xx:表示成功
  • 3xx:表示重定向
  • 302:重定向
  • 304:访问缓存
  • 4xx:客户端错误
  • 404:请求路径没有对应的资源
  • 405:请求的方式没有对应的doxxx方法
  • 5xx:服务器端错误
  • 500:服务器内部出现异常

2、响应头

  • 格式:头名称:值
    HTTP/1.1 200 
    Accept-Ranges: bytes
    ETag: W/"147-1567070212093"
    Last-Modified: Thu, 29 Aug 2019 09:16:52 GMT
    Content-Type: text/html
    Content-Length: 147
    Date: Thu, 29 Aug 2019 09:21:17 GMT
  • 常见响应头
  • Content-Type:服务器告诉客户端本次响应数据格式以及编码格式
  • Content-disposition:服务器告诉客户端以什么格式打开响应体数据
  • in-line:默认值,在当前页面打开
  • attachment:以附件形式打开响应体,如文件下载

3、响应空行

4、响应体

数据:

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>LSTAR</title>

</head>

<body>

我的世界!

</body>

</html>

五、一次完整http请求的过程 

在HTTP工作开始之前,客户端首先要通过网络与服务器建立连接,该连接是通过 TCP 来完成的,该协议与 IP 协议共同构建 Internet,即著名的 TCP/IP 协议族,因此 Internet 又被称作是 TCP/IP 网络。HTTP 是比 TCP 更高层次的应用层协议,根据规则,只有低层协议建立之后,才能进行高层协议的连接,因此,首先要建立 TCP 连接,一般 TCP 连接的端口号是80。

  1. 进行DNS域名解析(浏览器缓存、系统缓存、hosts、DNS服务器)
  2. 建立 TCP 连接
  3. 客户端发送请求命令
    例如:GET /sample/hello.jsp HTTP/1.1
  4. 客户端发送请求头信息
    以头信息的形式向服务器发送一些的信息,之后客户端发送了一空白行来通知服务器,它已经结束了该头信息的发送
  5. 服务器应答
    例如: HTTP/1.1 200 OK
    响应的第一部分是协议的版本号和响应状态码
  6. 服务器返回响应头信息
    正如客户端会随同请求发送关于自身的信息一样,服务器也会随同响应向用户发送关于它自己的数据及被请求的文档;
  7. 服务器向客户端发送数据
    服务器向客户端发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以 Content-Type 响应头信息所描述的格式发送用户所请求的实际数据;
  8. 服务器关闭 TCP 连接

一旦服务器向客户端返回了请求数据,它就要关闭 TCP 连接,然后如果客户端或者服务器在其头信息加入了这行代码 Connection:keep-alive ,TCP 连接在发送后将仍然保持打开状态,于是,客户端可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。

 ​