HTTP

HTTP协议详解:从基础到实战
本文详细解析了HTTP1.0、1.1的工作流程,包括域名解析、TCP三次握手,阐述了HTTP请求和响应的格式、常用状态码,以及HTTP1.1与1.0的区别。深入讲解了HTTP运行方式,重点介绍了HTTPS。

1.HTTP 概述

在这里插入图片描述
链路层:用来处理网络的硬件部分,如硬件驱动,网卡,光纤
网络层:用来处理在网络上流动的数据包。协议是IP协议,又分为IPv4和IPv6两种 loT
传输层:目前有两种协议。一种是TCP协议,一种是UDP协议。
应用层:HTTP协议所处的位置,FTP,DNS、HTTP

2.HTTP协议工作流程

一次完整的HTTP事务
在这里插入图片描述
服务器上的监听80端口的应用程序

2.1域名解析

在这里插入图片描述

2.2域名解析过程

在这里插入图片描述

2.3 TCP三次握手过程

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

2.3.1 第一次:pc–>服务器

建立TCP连接后发起HTTP请求 http请求报文
在这里插入图片描述

2.3.2 第二次:服务器–>pc

服务器端响应HTTP请求 (回复http响应报文),浏览器得到HTML代码
在这里插入图片描述

2.3.3 第三次:pc–>服务器

浏览器拿到HTML文档后,开始解析HTML代码。
当遇到JS/CSS/图片等静态资源时,会自动向服务器端再请求下载
在这里插入图片描述
最后一步,浏览器利用自己内部的工作机制,把请求到的HTML代码和静态资源进行渲染,渲染最后,呈现给用户
在这里插入图片描述

3.HTTP协议简介

3.1 简介

  • WEB浏览器与WEB服务器之间的一问一答的交互过程必须遵循一定的规则,这个规则就是HTTP协议
  • HTTP是**HyperText Transfer Protocol(超文本传输协议)**的简写,它是TCP/IP协议族的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程及数据本身的格式
  • HTTP协议的版本(HTTP/1.0、HTTP/1.1, https
  • HTTP协议是学习 WEB开发的基石,不深入了解HTTP协议,就不能说掌握了WEB开发,更无法管理和维护一些复杂的WEB站点

3.2 HTTP事务

HTTP事务 = 请求命令 + 响应结果
在这里插入图片描述

3.3 报文流

在这里插入图片描述

4.HTTP请求报文和响应报文的格式

4.1 HTTP 请求

在这里插入图片描述

  1. Web服务器通过客户端发送过来的这些请求信息,就可以确定向请求者回送什么资源,以及根据客户端的环境信息采用什么方式进行回送等。
  2. KeepAlive出现的原因:(1)当一个客户端向服务器发送http请求时,两者之间会建立一个tcp连接 (2)然后服务器发回响应信息同时关闭连接。(3)如果请求的的页面中含有别的资源连接,比如图片、flsah等,就会再次创建连接。(4)KeepAlive的作用就是在第一次创建连接时,服务器会把这个tcp连接保持一段时间(服务器端会有一个keepaliveTime的最大时间,超过时间就断开连接)。这样就不会频繁的去建立tcp连接,同一次请求中的信息传递都可以使用同一个tcp连接
  3. KeepAlive的工作原理:在HTTP1.0和HTTP1.1协议中都有对KeepAlive的支持。其中(1)HTTP1.0需要在request中增加“Connection: keep-alive” header才能够支持,(2)HTTP1.1默认支持。(可利用抓包工具查看)

4.1.1 请求报文例子

在这里插入图片描述

4.1.2 请求报文的格式

在这里插入图片描述

4.1.3 HTTP请求的细节——请求行

4.1.3.1 请求行

  • 格式:请求方式 资源路径 HTTP版本号
  • 举例:GET /temp3o116.shtml HTTP/1.1
  • 请求方式:GET、POST、HEAD(只请求响应的首部)、OPTIONS(允许客户端查看服务器的性能)、DELETE(请求服务器删除指定的页面)、PUT(从客户端向服务器传送的数据取代指定的文档的内容)
  • 用户如没有设置默认情况下浏览器向服务器发送的都是get请求,例如在浏览器直接输地址访问,点超链接访问等都是get,用户如想把请求方式改为post,可通过更改表单的提交方式实现。

4.1.3.2 GET方式

  • 如请求方式为GET方式,则可以在请求的URL地址后以?的形式带上交给服务器的数据,多个数据之间以&进行分隔,例如:

  • GET /mail/1.html?name=abc&password=xyz HTTP/1.1

  • GET方式的特点:在URL地址后附带的参数是有限制的,其数据容量通常不能超过1K。

    4.1.3.3 POST方式

  • 如请求方式为POST方式,则可以在请求的正文内容中向服务器发送数据,Post方式的特点:传送的数据量无限制

4.1.4 HTTP请求的细节——请求头

4.1.4.1概念

请求头字段用于客户端在请求消息中向服务器传递附加信息,主要包括客户端可以接受的数据类型MIME类型、压缩方法、语言以及发出请求的超链接所属页面的URL地址等信息

4.1.4.2 常用请求头

  • Accept:浏览器可接受的 MIME类型 / (大类型)/(小类型)
  • Accept-Charset: 浏览器通过这个头告诉服务器,它支持哪种字符集
  • Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip
  • Accept-Language: 浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。 可以在浏览器中进行设置
  • Host:初始URL中的主机和端口
  • Referer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面 (防盗链)
  • Content-Type:内容类型
  • If-Modified-Since: Wed, 02 Feb 2011 12:04:56 GMT 服务器利用这个头与服务器的文件进行比对,如果一致,则告诉浏览器从缓存中直接读取文件
  • User-Agent:浏览器类型
  • Content-Length:表示请求消息正文的长度
  • Connection:表示是否需要持久连接。如果服务器看到这里的值为“Keep -Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接
  • Cookie:这是最重要的请求头信息之一
  • Date:Date: Mon, 22 Aug 2011 01:55:39 GMT请求时间GMT

4.1.5 HTTP消息头(HTTP请求或相应的头部的公共规则)

  • 使用消息头,可以实现HTTP客户机服务器之间的条件请求和应答,消息头相当于服务器和浏览器之间的一些暗号指令

  • 每个消息头包含一个头字段名称,然后依次是冒号、空格、值、回车和换行符
    如: Accept-Encoding: gzip, deflate

  • 消息头字段名是不区分大小写的,但习惯上讲每个单词的第一个字母大写

  • 整个消息头部分中的各行消息头可按任何顺序排列

  • 许多请求头字段都允许客户端在值部分指定多个可接受的选项,多个选项之间以逗号分隔

  • 有些头字段可以出现多次

4.2 HTTP 响应

在一个HTTP响应中,WEB服务器通过响应头向web客户端描述客户端的请求成功与否,以及它所发送的数据类型等一些信息,客户端通过这些信息,进而可以知道如何对数据进行处理

在这里插入图片描述

4.2.1 响应报文例子

在这里插入图片描述

4.2.2 响应报文的格式

在这里插入图片描述

4.2.3 HTTP响应的细节——状态行

  • 格式: HTTP版本号 状态码 原因叙述
    举例:HTTP 1.1 200 OK
  • 状态码用于表示服务器对请求的各种不同处理结果和状态,它是一个三位的十进制数。响应状态码分为5类,使用最高位为1到5来进行分类如下所示:
    在这里插入图片描述
    注意:
  • 206 分段下载请求成功
  • 304 Not Modified 继续使用浏览器缓存
  • 302 Found 重定向
Location: http://pcookie.cnzz.com/app.gif?&cna=vYvqD87xkFcCAbclCvWfEvhZ

HTTP/1.1 301 Moved Permanently  重定向

Location: http://cn.bing.com/

4.2.4 HTTP响应的细节——常用状态码

  • 200(正常)
    表示一切正常,返回的是正常请求结果
    206 表示分段的请求OK
  • 301、302/307(临时重定向)
    指出被请求的文档已被临时移动到别处,此文档的新的URL在Location响应头中给出
  • 304(未修改)
    表示客户机缓存的版本是最新的,客户机可以继续使用它,无需到服务器请求
  • 404(找不到)
    404服务器上不存在客户机所请求的资源。
    400 服务器不支持这种请求方式
  • 500(服务器内部错误)
    服务器端的程序发生错误

4.2.5 HTTP响应细节——常用响应头

响应头字段用于向客户端传递附加信息

  • Location: http://www.cskaoyan.com/指示新的资源的位置
  • Server: apache tomcat 指示服务器的类型
  • Content-Encoding: gzip 服务器发送的数据采用的编码类型
  • Content-Length: 80 告诉浏览器正文的长度
  • Content-Language: zh-cn服务发送的文本的语言
  • Content-Type: text/html; 服务器发送的内容的MIME类型
  • Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT文件的最后修改时间
  • Refresh: 1;url=http://www.cskaoyan.com指示客户端刷新频率。单位是秒
  • Content-Disposition: attachment; filename=aaa.zip指示客户端保存文件
  • Set-Cookie: SS=Q0=5Lb_nQ; path=/search服务器端发送的Cookie
  • Expires: 0:(代表不缓存)
  • Cache-Control: no-cache (1.1) :(代表不缓存)
  • Connection: close/Keep-Alive
  • Date: Tue, 11 Jul 2000 18:23:51 GMT

4.2.6 HTTP消息头(HTTP请求或相应的头部的公共规则)

5.HTTP运行方式

5.1 HTTP1.0的基本运行方式

在这里插入图片描述

5.2 HTTP1.1与HTTP1.0的比较

  • 在一个TCP连接上可以传送多个HTTP请求和响应
  • 多个请求和响应过程可以重叠
  • 增加了更多的请求头和响应头,比如Host、If-Unmodified-Since请求头等
    在这里插入图片描述

5.3 HTTPS

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值