网络通信协议(4)HTTP协议

前言

记录在学习网络通信过程中的一些理解

前面学习了网络通信的大致过程及传输层最著名的两个协议:TCP协议、UDP协议
下面学习离我们程序员最近的一个协议:HTTP协议,它位于应用层

目录

  1. 了解HTTP协议
  2. 网络通信的过程
  3. HTTP报文结构
  4. 请求报文
    4.1. 请求行
    4.2. 首部字段
  5. 响应报文
    5.1. 状态行
    5.2. 响应首部字段
  6. HTTP协议基础
  7. 总结

了解HTTP协议

HTTP(HyperText Transfer Protocol)全称超文本传输协议

它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII码形式给出;而消息内容则具有一个类似MIME的格式;就是提供了发布和接收HTML文件的规范

万维网WWW的快速发展,得益于背后有一系列的协议和标准,这就是Web协议族,其中应用层重要的协议就是HTTP协议

HTTP协议的大致内容:
在这里插入图片描述

网络通信的过程

在这里插入图片描述

我们在访问一个网页时,大致的过程:

  1. 只知道网址,不知道IP地址,而连接服务器仅认识IP地址,可以通过DNS协议获得IP地址
  2. HTTP协议生成针对目标Web服务器的HTTP请求报文
  3. TCP协议分割HTTP报文,三次握手建立连接保证传输
  4. IP协议、以太网协议找到目标服务器并连接
  5. TCP接收并拼接数据包
  6. HTTP处理请求,并通过相同的方式发出响应信息

客户端发送请求到接收到服务器响应,就是一个访问网页的内部运行的过程,我们需要知道HTTP协议的请求与响应的内容

HTTP报文结构

HTTP协议传输的数据叫HTTP报文,请求端(客户端)发送的叫请求报文,响应端(服务器端)发送的对请求的响应叫响应报文

HTTP报文一般分成两段:报文首部和报文主体,中间通过空行(CR+LF)分隔

在这里插入图片描述

报文首部一般保存的是一些说明信息(客户端、服务器需要处理的请求、响应的内容和属性)

报文主体保存的是应该发送的数据(客户端一般不使用)

也可以分成:开始行(用于区分是请求报文还是响应报文)、首部行(一些键值对,用以说明一些信息)、实体主体(请求报文一般不用,响应报文也可能不用)

请求报文

在这里插入图片描述
在这里插入图片描述

请求行

请求报文开始行(请求行)由三个内容组成:方法、URL、版本

方法

写过Web就肯定用过,get\post方法,常用方法一共有8种:
在这里插入图片描述

在Web编程时就使用过get、post方法(xmlHttp)
get方法直接往URL串后放数据,方便但是安全性差

xmlhttp.open("GET","/store/getTrySetUpStore?id=" +storeid +"&name="+storename,true);

post方法更推荐,不仅安全性强,而且可以往规定一些服务器信息

xmlHttp.open("POST", "/store/getTrySetUpStore", true);
xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlHttp.send("id=" + storeid + "&name=" + storename);

URL
URL就是资源地址
HTTP协议的统一资源定位符将从因特网获取信息的五个基本元素包括在一个简单的地址中

例如:https://blog.csdn.net/key_768/category_9740252.html?id=111

在这里插入图片描述
https,是协议(现在很多网站选择了https协议:http协议的加强版,在HTTP的基础上增加了数据加密);
blog.csdn.net,是域名(简化了www);
域名后面会有一个端口号,一般会省略
在这里插入图片描述
/key_768/category_9740252.html,是路径(URI:直接定位到对应的资源);
?id=111,网址后面加参数,一般查询时会在URL有一个后缀(get方法)

版本
HTTP协议已经经历了挺多版本了
在这里插入图片描述
最常用的还是1.0、1.1版本,毕竟HTTP协议规范太多了。要普及新版本还是需要挺长时间的

首部字段

首部字段包含了大部分报文相关的信息
首部字段格式是: 字段名:字段值
字段名对字段值可以一对一、一对多
一对多根据浏览器内部的处理机制判断优先处理顺序

HTTP/1.1协议定义了47种首部字段
一般首部字段可以分为四种:
在这里插入图片描述
请求报文中报文首部的首部字段:请求首部字段+通用首部字段+实体首部字段
在这里插入图片描述

这里先学习通用首部字段请求首部字段实体首部字段

通用首部字段(HTTP1.1)9种:

请求报文和响应报文都会使用的首部字段
在这里插入图片描述

请求首部字段(HTTP1.1)19种:

在这里插入图片描述

实体首部字段(HTTP1.1)10种:

针对实体部分的首部字段,补充了一些与实体有关的信息
在这里插入图片描述

常用的首部字段:

  1. User-Agent
    属于请求首部字段,HTTP客户端程序的信息

在这里插入图片描述
把我客户端的一些信息:例使用的是Firefox浏览器 传输给服务器

  1. Host
    请求资源的服务器
    在这里插入图片描述
  2. Accept
    可处理的媒体类型
    在这里插入图片描述text/html都很熟悉的网页类型

使用的火狐浏览器,web开发者的网络选项可以看到这些信息

在这里插入图片描述
请求主体一般都不使用的,最多放一点参数
在这里插入图片描述

响应报文

在这里插入图片描述
响应报文与请求报文结构类似,由状态行、首部行、实体组成

状态行

状态行由状态码原因短语HTTP 版本组成
在这里插入图片描述

版本

和请求报文的版本一样,表示的是使用的HTTP协议版本

状态码

状态码都很熟悉,比如万恶的404就是响应报文反馈给浏览器的

其实状态码有很多,对应不同的状态

  • 2开头(请求成功)表示成功处理了请求的状态代码
    200-206
    200(成功):服务器已成功处理了请求
    201(已创建) 请求成功并且服务器创建了新的资源
    等等
  • 3开头(请求被重定向)表示要完成请求,需要进一步操作
    300-307
    300:(多种选择)服务器可根据请求者选择一项操作,或提供操作列表供请求者选择
  • 4开头(请求错误)这些状态代码表示请求可能出错,妨碍了服务器的处理
    400-417
    404:(未找到) 服务器找不到请求的网页
  • 5开头(服务器错误)处理请求时服务器发生了内部错误
    500-505
    500:(服务器内部错误) 服务器遇到错误,无法完成请求

状态码的原因短语

对于状态码表示的状态出现可能的原因
常见的状态码都有,当然也有没有的
和状态码一一对应

200:OK
404:Not Found
500:Internal Server Error
等等

响应首部字段

响应报文中报文首部结构:响应首部字段+通用首部字段+实体首部字段
在这里插入图片描述
前面把三种字段都展示了,还有最后一种,响应首部字段
响应首部字段有8种:
在这里插入图片描述

除了这47种首部字段,还有一些非正式的首部字段,统一归纳在RFC4229 HTTP Header Field Registrations中

为Cookie服务的首部字段:

在这里插入图片描述在这里插入图片描述

其他首部字段:

P3P:利用 P3P(The Platform for Privacy Preferences,在线隐私偏好平台)技术,可以让 Web 网站上的个人隐私变成一种仅供程序可理解的形式,以达到保护用户隐私的目的

DNT:DNT ( Do Not Track ),意为拒绝个人信息被收集,是表示拒绝被精准广告追踪的一种方法
可取值0 :同意被追踪 1 :拒绝被追踪

等等

实体

响应报文的实体一般都是html文件,返回一个网页给用户

在这里插入图片描述

HTTP协议基础

  • 通信方法

前面学习的请求报文、响应报文,HTTP协议通信就是通过请求与响应完成通信

在HTTP协议中,必定是有一个客户端,一个服务器,客户端发出请求报文,服务器响应,即先从客户端发出通信,服务端响应通信

  • 持久化连接

HTTP早期是每次HTTP通信就会断开TCP连接,随着Web的发展,可能需要多次HTTP通信,TCP连接(三次握手)浪费资源,到了HTTP/1.1 中,所有的连接默认都是持久连接,只要任意一端没有明确提出断开连接,则保持 TCP 连接状态

  • 管线化

持久连接使得多数请求以管线化方式发送成为可能,管线化就是能做到同时并行发送多个请求,非阻塞式网络通信

  • 无状态协议

协议不对请求和响应的之间的通信状态进行保存,不持久化处理通信,是为了更快地处理大量事务,确保协议的可伸缩性,而特意把 HTTP 协议设计成如此简单的
随着Web发展,很多业务需要对通信保存,于是引进了Cookie技术

  • Cookie技术

Cookie 是服务端传给客户端浏览器的一小部分数据,可为无状态的HTTP协议提供前后请求间的上下文会话
Cookie存放在客户端Cookie 分为内存Cookie和硬盘Cookie,内存Cookie在浏览器关闭时就删除,硬盘Cookie有一个过期时间

在这里插入图片描述
即服务器设置响应报文头部字段 Set-Cookie 字段,返回响应报文,客户端便会在请求报文头部字段 Cookie 中带上上次服务端的 cookie 信息进行请求

可以通过在响应报文头字段 Set-cookie 中设置 ExpiresMax-Age 来控制 cookies 的存活时间

Cookie的作用是保存一些缓存信息,请求报文带上Cookie,服务器就知道这个请求来自哪个客户端

Cookie是保存在客户端的,安全性差,还有种技术叫Session,与Cookie作用类似,保存在服务器

  • Session
    Session机制是一种服务器端的机制,服务器创建Session ID标识客户端

具体机制:
在这里插入图片描述
因为Session一般保存在Cookie,当Cookie被禁止时,可以通过URL重写实现
(这些在JavaEE中再仔细学习)

总结

  1. HTTP协议是应用层协议,是现在网络发展的重要基石
  2. HTTP协议规定了客户端发送什么请求给服务器,以及服务器响应什么信息,即请求报文及响应报文
  3. 报文分为报文首部、报文主体,中间通过空行(CR+LF)隔开,也可以分为开始行、首部行、实体
  4. 请求报文开始行由方法、URL、版本组成,首部行由通用首部字段、请求首部字段、实体首部字段组成,一般没有实体或者实体是一些参数
  5. 响应报文开始行由状态码、原因短语、版本组成,首部行由通用首部字段、响应首部字段、实体首部字段组成,实体大多是HTML文件
  6. 首部字段HTTP1.1定义了47种,还有一些非正式的,如Cookie,P3P,DNT等
  7. HTTP协议基础:通信规定了由客户端发出请求报文,服务器发出响应报文;HTTP协议是无状态;现在的HTTP协议是持久的,管线化;Cookie、Session解决了无状态特点的问题,Cookie存储在客户端,Session存储在服务器
发布了95 篇原创文章 · 获赞 25 · 访问量 4194

猜你喜欢

转载自blog.csdn.net/key_768/article/details/104632745