当前位置: 首页 > news >正文

HTTP协议(Linux进阶第一章)

什么是HTTP协议?
超文本传输协议(HTTP)是在互联网上应用最为广泛的一种网络协议。所有的WWW服务器都
基于该协议,HTTP设计最初的目的是提供一种发布Web页面和接受Web页面的方法。

1、HTTP详解

1.1.TCP协议与HTTP协议

TCP协议主要用于数据传输控制,而HTTP协议主要用于应用层面的数据交互。HTTP属于应用层协议,是建立在TCP协议基础之上的,HTTP协议以客户端请求和服务器端响应为标准,浏览器通常称之为客户端,而Web服务器称之为服务器。客户端打开任意一个端口向服务端的指定端口(默认80)发起HTTP请求,首先会先发起TCP三次握手,TCP三次握手的目的是建立可靠的数据连接通道,TCP三次握手通道建立完毕,进行HTTP数据交互。
HTTP协议从诞生之初到现在经历了若干个版本,其中最主要的版本为:HTTP 1.0、HTTP 1.1,
其中HTTP 1.0是第一个得到广泛应用的版本,而HTTP 1.1为当前使用的主流版本。

1.2. HTTP请求方法

在HTTP通信中,每个HTTP请求报文都包含一个方法。用以告诉Web服务器端需要执行什么具体的动作,这些动作包括:获取指定Web页面、提交内容到服务器、删除服务器上的资源文件等,这些HTTP请求报文中包含的方法被称为HTTP请求方法。常用的HTTP请求方法见下表:

1.3. HTTP状态码

1.3.1.HTTP状态码介绍

HTTP状态码(HTTP Status Code)是用来表示Web服务器响应HTTP请求状态的数字代码。每当Web客户端向Web服务器发送一个HTTP请求时,Web服务器都会返回一个状态响应代码。这个状态码是一个三位数字代码,作用是告知Web客户端此次的请求是否成功,或者是否要采取其他的动作方式。HTTP 1.1版本中的状态码可以分为5大类,如下表:HTTP响应的状态码种类很多,但是在实际工作场景中,经常遇到的状态码却不多,生产场景中常见的重要状态码及对应的作用如下:

1.3.2.HTTP状态码的命令行查看

[root@www ~]# curl -I 127.0.0.1HTTP/1.1 200 OKDate: Thu, 16 May 2024 13:51:56 GMTServer: Apache/2.4.6 (CentOS)Last-Modified: Thu, 16 May 2024 13:51:05 GMTETag: "25-6189286be189b"Accept-Ranges: bytesContent-Length: 37Content-Type: text/html; charset=UTF-8

1.4. HTTP协议原理及重点分析

HTTP协议属于OSI模型中的第7层应用层协议,HTTP协议的重要应用就是WWW服务应用,下面就以WWW服务应用为例介绍HTTP协议的通信原理,HTTP协议进行通信时,需要有客户端(终端用户)和服务器端(Web服务器),在Web客户端向Web服务器发送请求报文之前,先要通过TCP/IP协议在Web客户端和服务器之间建立一个TCP/IP连接。整个HTTP协议请求的工作流程如下:终端客户在Web浏览器地址栏输入访问地址“http://www.chengdu.org/index.html”。1. Web浏览器请求DNS服务器把域名www.chengdu.com转换成Web服务器的IP地址,此处的解析过程就是DNS解析的原理流程。
2. Web浏览器将端口号(默认是80)从访问地址(URL)中解析出来。
3.Web浏览器通过解析后的IP地址及端口号与Web服务器之间建立一条TCP连接。
4.建立TCP连接后,Web浏览器向Web服务器发送一条HTTP请求报文,请求报文内容格式及信息细节前面已经讲过了,此处不再赘述。
5. Web服务器响应并读取浏览器的请求信息,然后返回一条HTTP响应报文。
6.Web服务器关闭HTTP连接,关闭TCP连接,Web浏览器显示访问的网站内容到屏幕。

1.5.Linux下实践观察HTTP协议的通信过程

可以使用Linux下的curl、wget、tcpdump(wireshark)、fiddler等工具根据原理实践查看通信的过程。这里以curl为例讲解如下:

[root@www ~]# curl -v 127.0.0.1* About to connect() to 127.0.
http://www.lqws.cn/news/492553.html

相关文章:

  • C#最佳实践:为何优先使用属性而非字段
  • 基于LangChain的带摘要存储对话系统实战
  • 原生微信小程序网络请求与上传接口封装实战指南
  • 编程语言的设计之道:从底层控制到表达自由
  • 深入解析 Flutter Bloc 在 AppBar 中的实战应用
  • 如何下载并配置acolite进行Landsat等遥感数据的大气校正
  • 设计模式 | 单例模式
  • Apache SeaTunnel Flink引擎执行流程源码分析
  • Neo4j.5.X社区版创建数据库和切换数据库
  • 如何在直播SDK中实现高性能面具贴纸渲染?底层架构与优化方案详解
  • 量子机器学习前沿:量子神经网络与混合量子-经典算法
  • 华为云 Flexus+DeepSeek 征文|文案魔盒・Emoji 菌:基于华为云 CCE 集群 Dify 大模型,创意文案智能生成助手
  • kubernetes(k8s)集群部署(超详细)
  • 京东金融API支付链路剖析:白条分期接口的安全加固方案
  • 深度学习:PyTorch卷积神经网络(CNN)之图像入门
  • 文件输入输出
  • LNMP一键自动化部署
  • RISC-V 指令集拓展类别
  • Redis反序列化失败问题
  • NW896NX769美光固态芯片NX790NX793
  • Lamp和友点CMS一键部署脚本(Rocky linux)
  • Flink维表应用:从思考到实践的全面解析
  • Linux切换中文输入法
  • 使用.detach()代替requires=False避免计算图错误
  • GPIO-LED驱动
  • STM32学习笔记
  • 深入浅出Node.js后端开发
  • 可信计算的基石:TPM技术深度解析与应用实践
  • 2025.06.23【甲基化】methylKit:甲基化测序数据分析安装与详细使用教程
  • 常用终端命令(Linux/macOS/bash 通用)分类速查表