HTTP协议中的请求消息与响应消息


概念

Hyper Text Transfer Protocol 超文本传输协议

传输协议 : 定义了客户端和服务器通信时,发送数据的格式

特点

  1. 基于 TCP/IP 的高级协议
  2. 默认端口号:80
  3. 基于请求/响应模型的:一次请求对应一次响应
  4. 无状态的:每次请求之间相互独立,不能交互数据

历史版本

  • 1.0:每一次请求响应都会建立新的连接
  • 1.1:复用连接

请求消息数据格式

  1. 请求行

    • 格式:

      请求方式 请求 url 请求协议/版本

      Get /login.html HTTP/1.1
    • 请求方式:

      Http 协议中有 7 种请求方式,常用的两种:

      • GET:

        1. 请求参数在请求行中,在 url 后
        2. 请求的 url 长度有限制
        3. 不太安全
      • POST:

        1. 请求参数在请求体中
        2. 请求的 url 长度没有限制
        3. 相对安全
  2. 请求头

    客户端告诉浏览器一些信息

    • 格式:

      请求头名称:请求头值

    • 常见的请求头:

      • User-Agent:浏览器告诉服务器,访问所使用的浏览器版本信息

        可以在服务器端获取该头的信息,解决浏览器的兼容性问题

      • Referer:告诉服务器,我(当前请求)从哪里来

        作用:防盗链;统计工作

  3. 请求空行

    空行,就是用于分割 POST 请求的请求头和请求体的

  4. 请求体(正文)

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

POST /login.html HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.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/login.html
Connection: keep-alive
Upgrade-Insecure-Requests: 1

username=zhangsan

响应消息数据格式

  1. 响应行

    • 格式:

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

    • 响应状态码:服务器告诉客户端浏览器本次请求和响应的状态

      1. 状态码都是三位数字
      2. 分类:
        • 1xx:服务器接收客户端消息,但是没有接收完成,等待一段时间后,发送 1xx 状态码
        • 2xx:成功。代表:200
        • 3xx:重定向。代表:302(重定向),304(访问缓存)
        • 4xx:客户端错误。代表:404(请求路径没有对应的资源),405(请求方式没有对应的 doXxx()方法)
        • 5xx:服务器错误。代表:500(服务器内部出现异常)
  2. 响应头

    • 格式:

      响应头名称:值

    • 常见的响应头:

      1. Content-Type:服务器告诉客户端本次相应数据格式以及编码格式

      2. Content-disposition:服务器告诉客户端以什么格式打开响应体数据

        值:

        • in-line:默认值,在当前页面内打开
        • attachment;filename=xxx:以附件形式打开响应体。文件下载
  3. 响应空行

  4. 响应体

    响应体内容就是传输的数据

HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Length: 101
Date: Wed, 06 Jun 2018 07:08:42 GMT

<html>
	<head>
		<title>$Title$</title>
	</head>
	<body>
	hello , response
	</body>
</html>

HTTP状态码

  • 2XX Success(成功状态码) 请求正常处理完毕

    • 200 OK:表示从客户端发送给服务器的请求被正常处理并返回
    • 204 NO Content:表示客户端发送给客户端的请求得到了成功处理,但在返回的响应报文中不含实体的主体部分(没有资源可以返回)
  • 3XX Redirection(重定向) 需要进行附加操作以完成请求

    • 301 Moved Permanently:永久性重定向,表示请求的资源被分配了新的URL,之后应使用更改的URL;
    • 302 Found:临时性重定向,表示请求的资源被分配了新的URL,希望本次访问使用新的URL;
      301与302的区别:前者是永久移动,后者是临时移动(之后可能还会更改URL)
    • 303 See Other:表示请求的资源被分配了新的URL,应使用GET方法定向获取请求的资源;
      302与303的区别:后者明确表示客户端应当采用GET方式获取资源
    • 304 Not Modified:表示客户端发送附带条件(是指采用GET方法的请求报文中包含if-Match、If-Modified-Since、If-None-Match、If-Range、If-Unmodified-Since中任一首部)的请求时,服务器端允许访问资源,但是请求为满足条件的情况下返回改状态码;
    • 307 Temporary Redirect:临时重定向,与303有着相同的含义,307会遵照浏览器标准不会从POST变成GET;(不同浏览器可能会出现不同的情况);
  • 4XX Client error(客户端错误) 客户端请求出错,服务器无法处理请求

    • 400 Bad Request:表示请求报文中存在语法错误;
    • 401 Unauthorized:未经许可,需要通过HTTP认证;
    • 403 Forbidden:服务器拒绝该次访问(访问权限出现问题)
    • 404 Not Found:表示服务器上无法找到请求的资源,除此之外,也可以在服务器拒绝请求但不想给拒绝原因时使用;
    • 405 : 服务器不支持对应http方法get/post
  • 5XX Server error(服务器错误) 服务器处理请求出错

    • 500 Inter Server Error:表示服务器在执行请求时发生了错误,也有可能是web应用存在的bug或某些临时的错误时;
    • 503 Server Unavailable:表示服务器暂时处于超负载或正在进行停机维护,无法处理请求;

HTTPS

HTTP + SSL 在 HTTP 的基础上通过传输加密和身份认证保证了传输过程的安全性。

HTTPS数据加密,可保证数据私密性、完整性,防止中间人攻击。

image-20230818104104662

流程

  1. 浏览器将自己支持的一套加密算法发给服务器,同时发一个浏览器随机数
  2. 服务器向浏览器发送选择的加密算法、服务器生成的随机数、服务器数字证书
  3. 浏览器收到证书后对证书的CA签名进行验证,如果验证通过,会从证书中拿到服务器的公钥
  4. 浏览器对浏览器随机数+服务器随机数进行处理,生成预备主密码
  5. 浏览器用服务器的公钥对预备主密码进行加密,发给服务器。
  6. 服务器收到后使用自己的私钥解密出预备主密钥
  7. 浏览器和服务器分别使用预备主密钥和两个随机数,生成共享主密钥
  8. 二者使用共享主密钥,使用对称加密算法加密数据

文章作者: Wujiu
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Wujiu !
  目录