Java教程

计算机网络 6.HTTP协议

本文主要是介绍计算机网络 6.HTTP协议,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

HTTP协议

HTTP协议的概念和作用

​ HTTP(HyperText Transfer Protocol)超文本协议传输协议,是互联网上应用最为广泛的一种网络协议,所有WWW文件都必须遵守这个标准,设计HTTP是为了提供一种发布和接收HTML页面的方法

​ HTTP是一个客户端与服务器端请求和应答的标准(TCP),就是客户端按一定规则向服务器发送数据,而服务器也按一定规则回应数据,客户端是终端用户,服务器端是网站,通过使用Web浏览器、网络爬虫或其他工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请求

​ HTTP协议是一种无状态的,以请求/响应方式运行的协议,它使用可扩展的语义和自描述消息格式,与基于网络的超文本信息系统灵活的互动

​ HTTP协议是一种应用层协议

特点:

  • 无状态:不会存储用户的信息
  • 可扩展的语义:可以在协议的基础上添加内容,比如头部的字段
  • 自描述:消息类型可以是文本、图片、音视频
  • 超文本信息系统:HTML

​ 在Web应用中,服务器把网页传给浏览器,实际就是把网页的HTML代码发送给浏览器,浏览器解析后显示出来,浏览器和服务器之间的传输应用层协议就是HTTP

  • HTML是一种用来定义网页的文本
  • HTTP是用来在网络上传输HTML文本的协议,用于浏览器和服务器的通信

Elements:查看或修改HTML元素的属性、CSS属性、监听事件、断点等

Console:控制台一般用于执行一次性代码,查看JavaScript对象,查看调试日志或异常信息

Sources:查看和调试页面HTML文件源码、JavsScript源码、CSS源码,给JS代码添加断点等

Network:查看header等与网络连接相关的信息

​ Network中的每一项就是一次请求/响应过程,点击项可以查看本次请求/响应的报文信息


request - response 模式

浏览器 ← TCP连接 → 服务器
发送请求 →
← 做出响应
← 断开TCP连接 →

​ HTTP协议分为两部分:请求协议、响应协议,接收请求的一端一定要响应对方

​ 不管是请求还是响应,HTTP协议都是由一个一个简单的协议项组成,报文中每个协议项都单独占用一行

​ 协议名:协议内容(值)

HTTP报文格式

HTTP协议的请求报文和响应报文的结构基本相同,由三大部分组成:

  • 起始行(start line):描述请求或响应的基本信息
  • 头部字段集合(header):使用 key:value 形式更详细的说明报文
  • 空行
  • 消息正文(entity):实际传输的数据,可以是本文、图片、音视频等二进制数据,GET请求方式没有此部分

请求协议报文格式(request)

​ 请求报文中传递参数的方式:URL(GET),request Body(POST)

​ 请求行:分为三个部分

METHOD 空格 URL 空格 VERSION 换行
  • 请求方式:如 GET/POST/HEAD/PUT ,表示对资源的操作
  • 请求路径:通常是一个 URL ,标记了请求方式要操作的资源的路径
  • 协议版本:表示报文使用的 HTTP 协议版本

请求行单独占一行;请求路径不包含域名

​ 请求头:请求头是所有当前需要用到的协议项的集合

​ 协议项就是浏览器在请求服务器的时候事先告诉服务器的一些信息,即事先约定

​ 常见的请求头有:

​ host:当前URL中要请求的服务器主机名(域名)

​ accept-encoding:声明浏览器支持的压缩编码类型,如gzip

​ accept_charset:浏览器支持的字符集

​ referer:表示此次请求来自哪个网址

​ accept-language:可接收的语言类型,有权重之分

​ cookie:如果当前请求的服务器在浏览器中设置了cookie,当浏览器再次请求该服务器时会传递此数据

​ user-agent:用户代理,当前发起请求的浏览器内核信息

​ accept:浏览器可接收的数据类型,如txt/html,image/img

​ content-length(POST):当前要提交数据的长度(字节)

​ if-modified-since(GET):请求某个资源文件时,询问此资源文件是否被修改过

​ 空行:分隔请求头和请求主体

​ 请求主体:浏览器发送给服务端的数据

​ 参数格式:?参数1=值1&参数2=值2&参数3=值3&......

​ 二进制数据,如图片

GET和POST的区别
  • GET是从服务器上获取数据,POST是向服务器传送数据

  • GET把参数加到URL中,POST把数据加到表单中

  • GET传送的数据量较小,不能大于2KB,POST传送的数据量大

  • GET安全性较低,POST更安全,但GET执行效率更好

做数据查询时使用GET方式,做数据添加、修改、删除或数据包含机密信息时使用POST方式

响应协议报文格式(response)

​ 响应行:分为三个部分

VERSION 空格 STATUS CODE 空格 REASON 换行
  • 协议版本:表示报文使用的 HTTP 协议版本

  • 状态码:三位数,用代码表示处理的结果

    • 2xx:请求被成功接收;200:请求已成功
    • 3xx:重定向,要完成请求需要进一步操作;301:永久重定向,302:临时重定向
    • 4xx:客户端错误;403:收到请求但拒绝提供此服务,404:请求资源不存在,408:请求超时
    • 5xx:服务器错误;500:服务器发生不可知的错误,503:服务器当前不能处理请求,一段时间后可能恢复
  • 状态描述:作为数字状态码的补充,是更详细的解释文字

​ 响应头:需要用到的协议项的集合

​ 常见的响应头有:

​ server:服务器主机信息

​ date:响应时间

​ last-modified:文件最后修改时间

​ content-length:响应主体的长度(字节)

​ content-type:响应内容的数据类型,如text/html,image/png

​ location:重定向,解析到此项时立即跳转,不会再解析后面的内容

​ refresh:重定向(刷新),解析到此项时准备跳转,刷新一般有时间限制,到时间才跳转

​ content-encoding:文件编码格式

​ cache-control:缓存控制,no-cached:不要缓存

​ 空行:分隔响应头和响应主体

​ 响应主体:服务器返回给浏览器的数据


HTTP头字段

​ 头字段 key:value 的形式,最后用CRLF换行表示字段结束。如前后端分离时经常遇到要协商传输数据的类型,"Content-type:application/json",HTTP头字段非常灵活,不仅可以使用标准里的 Host、Content 等已有头,也可以添加自定义头

头字段注意事项:

  • 字段名不区分大小写,字段名里不允许出现空格,可以使用连字符 ‘ - ’ ,不能使用下划线 ‘ _ ’ ,(有的服务器不能解析带 ‘ _ ’ 的字段),字段名后面必须紧接 ‘ : ’ , ‘ : ’ 后的字段前可以有多个空格
  • 字段的顺序没有意义,可以任意排序不会影响语义
  • 字段原则上不能重复,除非字段本身语义允许

HTTP请求的完整过程

  1. 用户在浏览器输入地址后回车

  2. 先到本地DNS查找域名对应的IP地址,如果本地DNS中没有找到,再到DNS服务器查

  3. 首先从浏览器缓存中查看,如下可以查看浏览器中域名对应IP的解析

chrome://net-internals/
  1. 解析域名对应的IP地址后,浏览器就可以发起与服务器的三次握手

  2. 连接建立之后就开始组装HTTP请求报文,并发送报文

  3. 服务器收到请求报文之后开始解析报文,生成响应数据,发送响应数据

  4. 浏览器收到响应后,开始渲染页面


这篇关于计算机网络 6.HTTP协议的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!