HTTP概要

文章目录

什么是HTTP?

HTTP,即Hypertext Transfer Protocol (超文本传输协议)

它是一个"请求-相应"的协议,用于客户端和服务器间交换信息

URL的结构

HTTP resources 通过URL来定位

URL,即 Uniform Resource Locators (统一资源定位符)

结构如下:

--scheme:[//[user:password@]host[:port]][/]path[?query][#fragment]

  • scheme, 方案
    • 指定用于访问资源的协议或方法
    • 如http, ftp, mailto, file, data, irc
  • 权限, 包括:
    • 身份验证部分(可选)
      • username
      • password
      • user:password@
    • host
      • registered name / IP address
      • 端口号(可选)
  • 路径
    • 资源在服务器上的相对路径
  • query, 可选的查询字符串
    • 包含资源的附加参数或信息
  • fragment(可选,片段标识符)
    • 指向资源的特定部分
    • #引入

例子: http://www.example.com/index.html

请求报文结构

复制代码
# request line, 请求行
GET / HTTP/1.1

# request header fields, 请求头首部
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-GB,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive

# 一个空行

# 可选的消息主题

请求方法

HTTP定义了用于指示对特定资源执行的期望操作的方法。

GET

GET方法请求获取指定资源的表示。使用GET的请求应仅用于检索数据,不应产生其他影响。(幂等

HEAD方法请求与GET请求相同的响应,但不包含响应体。(幂等

POST

POST方法请求服务器接受包含在请求中的实体作为URI标识的Web资源的新下级。

PUT

PUT方法请求将封装的实体存储在提供的URI下。(幂等

DELETE

DELETE方法删除指定的资源。(幂等

TRACE

TRACE方法回显接收到的请求,以便客户端可以查看中间服务器是否进行了哪些(如果有的话)更改或添加。(幂等

OPTIONS

OPTIONS方法返回服务器支持的指定URL的HTTP方法。这可用于通过请求'*'而不是特定资源来检查Web服务器的功能。(幂等

CONNECT

CONNECT方法将请求连接转换为透明的TCP/IP隧道,通常用于通过未加密的HTTP代理便于SSL加密通信(HTTPS)。

PATCH

PATCH方法对资源应用部分修改。

所有通用的HTTP服务器都要求至少实现GET和HEAD方法,并在可能的情况下也实现OPTIONS方法。

解释

一些方法(例如HEAD、GET、OPTIONS和TRACE)按照惯例被定义为"安全",这意味着它们仅用于信息检索,不应改变服务器的状态。

PUT和DELETE方法被定义为"幂等",这意味着多个相同的请求应具有与单个请求相同的效果,或者它返回的响应代码在后续请求中可能不同,但系统状态在每次都将保持相同。

由于HTTP是无状态协议,因此被规定为安全的GET、HEAD、OPTIONS和TRACE方法也应该是幂等的。

请求头字段

名称 描述 示例
Accept 响应中可接受的媒体类型。 Accept: text/html
Accept-Charset 可接受的字符集。 Accept-Charset: utf-8
Accept-Datetime 可接受的时间版本。 Accept-Datetime: Thu, 31 May 2007 20:35:00 GMT
Accept-Encoding 可接受的编码列表。 Accept-Encoding: gzip, deflate
Accept-Language 响应中可接受的人类语言列表。 Accept-Language: en-US
Cache-Control 用于指定在请求-响应链中所有缓存机制都必须遵守的指令。 Cache-Control: no-cache
Connection 当前连接的控制选项和逐跳请求字段的列表。不得与HTTP/2一起使用。 Connection: keep-alive Connection: Upgrade
Content-Encoding 数据使用的编码类型。 Content-Encoding: gzip
Content-Length 请求体的长度(以八位字节为单位)。 Content-Length: 348
Content-Type 请求体的媒体类型(用于POST和PUT请求)。 Content-Type: application/x-www-form-urlencoded
Cookie 服务器先前使用Set-Cookie(下文)发送的HTTP cookie。 Cookie: $Version=1; Skin=new;

响应报文结构

html 复制代码
HTTP/1.1 200 OK
Date: Mon, 23 May 2005 22:38:34 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 155
Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux)
ETag: "3f80f-1b6-3e1cb03b"
Accept-Ranges: bytes
Connection: close

<html>
   <head>
     <title>An Example Page</title>
   </head>
   <body>
     <p>
       Hello World, this is a very simple HTML document.
     </p>
   </body>
</html>

服务器向客户端发送的响应消息包括:

  • 一个状态行 ,包括协议版本,一个空格,响应状态码 ,另一个空格,可能为空的原因短语 ,一个回车符和一个换行符,例如:HTTP/1.1 200 OK

  • 零个或多个响应头字段,每个字段包括不区分大小写的字段名,一个冒号,可选的前导空格,字段值,一个可选的尾随空格,并以回车符和换行符结束,例如:

Content-Type: text/html

  • 一个空行,包括一个回车符和一个换行符;
  • 一个可选的消息主体。`

响应状态

在HTTP/1.0及以后的版本中,

HTTP响应的第一行被称为"状态行",包括一个数字状态码 (例如"404")和一个文本原因短语(例如"Not Found")。

状态码的第一个数字定义了它的类别:

  • 1XX(信息性):请求已收到,继续处理。
  • 2XX(成功):请求已成功接收、理解并接受。
  • 3XX(重定向):需要进一步采取措施以完成请求。
  • 4XX(客户端错误):请求包含错误的语法或无法满足。
  • 5XX(服务器错误):服务器未能满足显然有效的请求。

响应头字段

Field name Description Example
Accept-CH 请求HTTP客户端提示 Accept-CH: UA, Platform
Access-Control-Allow-Origin, Access-Control-Allow-Credentials, Access-Control-Expose-Headers, Access-Control-Max-Age, Access-Control-Allow-Methods, Access-Control-Allow-Headers 指定哪些网站可以参与跨源资源共享 Access-Control-Allow-Origin: *
Age 对象在代理缓存中存在的时间(以秒为单位) Age: 12
Allow 指定资源的有效方法。用于405方法不允许时 Allow: GET, HEAD
Content-Encoding 数据使用的编码类型。 Content-Encoding: gzip
Content-Language 所附内容的预期受众的自然语言或语言集合 Content-Language: da
Content-Length 响应体的长度(以八位字节为单位) Content-Length: 348
Content-Location 返回数据的备用位置 Content-Location: /index.htm
Content-Type 此内容的MIME类型 Content-Type: text/html; charset=utf-8

HTTP会话

3次握手

三次握手是TCP(传输控制协议)建立连接的过程。这个过程确保了客户端和服务器之间的可靠通信。三次握手的步骤如下:

三次握手是TCP(传输控制协议)建立连接的过程。这个过程确保了客户端和服务器之间的可靠通信。三次握手的步骤如下:

  1. 第一次握手(SYN)

    • 客户端向服务器发送一个TCP报文,其中设置了SYN(同步)标志位,表明客户端希望建立连接。
    • 客户端选择一个初始序列号(ISN)并包含在这个请求中。
  2. 第二次握手(SYN + ACK)

    • 服务器接收到客户端的SYN请求,并回应一个带有SYN和ACK标志位的TCP报文。
    • 服务器也选择一个初始序列号并包含在这个响应中。
    • 这时,服务器进入半开放状态,表示它已经准备好接受客户端的确认。
  3. 第三次握手(ACK)

    • 客户端接收到服务器的响应后,发送一个带有ACK标志位的TCP报文,表示连接已经建立。
    • 客户端和服务器都确认了对方的序列号,此时连接正式建立,双方可以开始进行数据传输。

无状态协议

HTTP协议不存储每次请求的状态.

Q: 那么如何维护用户的信息, 比如账号保持登陆?

A: 使用cookies

Cookies (HTTP Cookies)是一种在客户端和服务器之间传递信息的小型文本文件。它们由服务器在HTTP响应头中的"Set-Cookie "字段创建,并存储在客户端的浏览器中。之后,浏览器每次请求相同的域时都会将这些Cookies信息包含在HTTP请求头中的"Cookie"字段中。

相关推荐
scdifsn5 小时前
动手学深度学习12.7. 参数服务器-笔记&练习(PyTorch)
pytorch·笔记·深度学习·分布式计算·数据并行·参数服务器
玩转4G物联网8 小时前
零基础玩转物联网-串口转以太网模块如何快速实现与TCP服务器通信
服务器·网络·物联网·网络协议·tcp/ip·http·fs100p
jackson凌8 小时前
【Java学习笔记】SringBuffer类(重点)
java·笔记·学习
hie988949 小时前
HTTP常见的请求方法、响应状态码、接口规范介绍
http
huangyuchi.9 小时前
【Linux】LInux下第一个程序:进度条
linux·运维·服务器·笔记·进度条·c/c++
大写-凌祁10 小时前
论文阅读:HySCDG生成式数据处理流程
论文阅读·人工智能·笔记·python·机器学习
Unpredictable22210 小时前
【VINS-Mono算法深度解析:边缘化策略、初始化与关键技术】
c++·笔记·算法·ubuntu·计算机视觉
傍晚冰川11 小时前
FreeRTOS任务调度过程vTaskStartScheduler()&任务设计和划分
开发语言·笔记·stm32·单片机·嵌入式硬件·学习
一曝十寒11 小时前
那些常见的 HTTP 状态码
前端·http
Love__Tay12 小时前
【学习笔记】Python金融基础
开发语言·笔记·python·学习·金融