关于HTTP网络协议

时间:2024-10-20 17:23:44

1. 网络协议包

为什么要有包的概念?

在网络中传递信息都是以二进制形式存在的,接收方(服务器或浏览器)接收到请求或响应数据时,第一时间就是解析二进制数据。
有时传输信息的数据量比较巨大,导致接收方很难获取相应数据。

网络协议包是一组有规律的二进制数据,在这组数据存在固定空间,每一个空间专门存放特定信息,这样接收方在接收网络协议包之后就可以到固定空间得到对应信息。例如

【0000(ip地址)0000(端口号)0000(资源文件名)0000】

网络协议包出现极大降低了接收方对接收二进制数据编译难度

1.1 HTTP请求协议包

  1. 请求行
    请求地址、请求方式

  2. 请求头
    get请求参数信息、cookie信息

  3. 空白行
    没有内容,起到隔离作用

  4. 请求体
    post请求参数信息

1.2 HTTP响应协议包

  1. 状态行
    HTTP状态码(200、404…)

  2. 响应头
    content-type:指定解析二进制数据的编译器
    location:重定向的地址
    cookie:共享信息

  3. 空白行
    没有内容,起到隔离作用

  4. 响应体
    返回结果的二进制码

2. get和post

get post
请求参数大小 不能超过4k 无限制
URL可见性 参数在URL中可见 参数在URL中不可见
请求参数保存 拼接URL 放在请求体
缓存性 可以缓存返回内容 不能缓存返回内容
安全性 较差,因为参数都在URL中 较好,但是不能防抓包
后退/刷新 无感知 重新提交请求
数据包* 产生1个TCP数据包 产生两个TCP数据包

*数据包:对于get请求,浏览器会把HTTP的header和请求参数一起发送出去,服务器直接响应200,返回数据。对于post请求,浏览器先发送header,服务器响应100,浏览器再发送请求参数,服务器响应200,返回数据。在网络环境良好的情况下,发一次数据包和两次数据包的时间差别几乎可以忽略不计。并不是所有浏览器都会在post发送两次包,比如Firefox(火狐)的post请求只发送一次。

3. HTTP状态码

三位数字组成的一个符号,展示请求处理的情况
以下列举一些常见的状态码

1xx:接收的请求还在处理

HTTP状态码 说明
100 继续索要文件

2xx:请求正常处理完毕

HTTP状态码 说明
200 正常处理
204 成功处理,但是没有资源返回
206 范围请求

3xx:需要进行附加操作完成请求

HTTP状态码 说明
301 永久性重定向
302 临时性重定向
303 使用get请求发送新url

4xx:客户端请求出错

HTTP状态码 说明
400 请求报文有语法错误
401 未经许可,需要http认证
403 无访问权限
404 服务器找不到请求资源
405 请求方式(get post)无法受理

5xx:服务器处理出错

HTTP状态码 说明
500 服务器后端代码有bug
503 服务器超负荷或停机维护
504 网关超时

4. HTTP和HTTPS

4.1 什么是HTTPS?

HTTP(HyperText Transfer Protocol,超文本传输协议),是以明文方式发送信息的,如果黑客截取了web浏览器和服务器之间的传输报文,就可以直接获取其中的信息。所以,HTTP是不安全的。

HTTPS是以安全为目标的HTTP通道,其安全基础是SSL(Secure Sockets Layer)
在这里插入图片描述

4.2 SSL协议

SSL协议位于TCP/IP与各种应用层协议之间,为数据通讯提供安全支持。


在这里插入图片描述
SSL协议分为两层:

  1. SSL记录协议
    它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。
  2. SSL握手协议
    它建立在 SSL 记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

4.3 HTTPS设计目标

  1. 数据保密性
    保证数据内容在传输过程中不会被第三方查看。
  2. 数据完整性
    及时发现被第三方篡改的内容。
  3. 身份校验安全性
    保证数据到达用户期望的目的地。

4.4 HTTP和HTTPS的区别

  1. HTTPS协议需要用到CA申请证书(Certificate Authority,证书颁发机构),需要一定的费用。
  2. HTTP是超文本传输协议,明文传输;HTTPS是具有安全性的SSL加密传输。
  3. HTTP和HTTPS的连接方式不同,用的端口也不同,前者是80,后者是443。
  4. HTTP的连接是无状态的,HTTPS的连接是有状态的。
    无状态:数据包的发送、传输和接收都是相互独立的

4.5 HTTPS缺点

  1. HTTPS协议握手阶段比较费时,可能会导致页面加载缓慢。
  2. HTTPS连接缓存没有HTTP高效。
  3. SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名。
  4. SSL协议加密算法和SSL交互次数将占用一定的计算资源和服务器成本。