HTTP原理

HTTP基本原理

URI和URL

URI全称为统一资源定位符,是用于唯一表示互联网上资源的字符串,可以把它理解为网络资源的身份证。

URL和URN是URI的两种实现方式。URL不仅标识资源,并且指定了访问该资源的方式。URN只是命名了资源,但没有指定如何访问它。在互联网中,都是使用URL多,使用URN少。

URL也有其统一的格式:

复制代码
scheme://[username:password@]host[:port][/path][?query][#fragment]

其中中括号代表非必要部分。

  • scheme:协议。也被称为protocol
  • username,password:用户名和密码。
  • hostname:主机地址。可以是域名或IP。
  • port:端口。
  • path:路径。
  • query:查询。用于查询某类资源。如果有多个查询,则用&隔开。
  • fragment:片段。是对资源描述的部分补充,可以理解为资源内部的书签。用作单页面路由和HTML锚点。

HTTP和https

http和https是超文本传输协议,是基于TCP的协议。

http请求过程

http请求过程:客户端发送请求给服务器,服务器解析这个请求,然后发送响应包给客户端,客户端对响应包里的页面源代码进行解析,进而将网页呈现出来。

请求消息

request,由四部分内容组成

  • 请求方法
  • 请求的网址
  • 请求头
  • 请求体

前两个就是请求行中的内容。

复制代码
请求行 :请求方法 | 空格 | URL | 空格 | 协议版本 | \r\n
------
消息头 : 字段名:值\r\n
        .
        .
        .
        .
------
空行
------
消息体

请求方法

请求方法用于标识客户端请求服务端的方式,一般有get和post两种。

在浏览器输入url并回车,就发起了一个get请求,请求的参数包含在了url里。post请求一般会在提交表单时发起,数据通常以表单的形式传输,而不会体现在url中。

get和post的区别:

  • get的请求参数包含在url中,参数可以url中看到:而post请求的url不会包含数据,而是存储在请求体中
  • GET请求提交的数据最多只有1024字节,POST则没有限制。

登录和传输文件时都是用post方式。

请求的网址

它可以唯一确定客户端想请求的资源。

请求头

HTTP请求头(Request Headers)是客户端(如浏览器或应用程序)在发送HTTP请求时附加的元信息,用于向服务器传递请求的上下文、客户端能力、偏好设置等关键信息。它们以键值对的形式存在,对于服务器正确理解和处理请求至关重要。

请求头字段名 主要作用与说明 示例值或常见内容
Host 指定请求的目标服务器域名和端口(HTTP/1.1必需),在虚拟主机环境中尤为重要。 Host: www.example.com:8080
User-Agent 标识客户端软件信息(如浏览器类型、版本、操作系统)。服务器可据此返回适配内容。 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36...
Accept 告知服务器客户端能够处理的响应内容类型(MIME类型)及优先级。 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language 指示客户端偏好的自然语言。 Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
Accept-Encoding 指明客户端支持的内容压缩编码方式,用于减少传输数据量。 Accept-Encoding: gzip, deflate, br
Content-Type 在POST、PUT等有请求体的方法中,指定请求体的媒体类型(MIME类型)。 Content-Type: application/json Content-Type: application/x-www-form-urlencoded
Content-Length 在POST、PUT等有请求体的方法中,指明请求体的字节长度。 Content-Length: 348
Authorization 携带身份验证凭证,如Bearer Token或Basic认证信息。 Authorization: Bearer eyJhbGciOiJ...
Cookie 将之前服务器通过Set-Cookie响应头设置的Cookie信息发送回服务器,常用于维持会话状态。 Cookie: sessionId=abc123; username=john
Referer 表示当前请求的来源页面URL,可用于分析流量来源或进行安全判断(注意拼写是"Referer")。 Referer: https://www.google.com/
Origin 指示跨域请求的来源(协议+域名+端口),主要用于CORS场景。 Origin: https://www.example.com
Connection 控制本次网络连接的行为,如keep-alive(保持连接)或close(关闭连接)。 Connection: keep-alive
Cache-Control 向服务器指示客户端希望的缓存行为。 Cache-Control: no-cache Cache-Control: max-age=3600

请求头是请求的重要请求部分,在写爬虫时通常需要设定请求头。

请求体

其中的内容一般时POST请求中的表单数据。对于GET请求,一般为空。

请求头中的Conten-Type字段说明了请求体中资源的类型。Content-Length说明了请求体的大小

响应消息

是有服务器返回给客户端的数据。可以分为三个部分:

  • 响应状态码

  • 响应头

  • 响应体

    状态行:协议版本 | 空格 | 响应代号 | 空格 | 代号描述 | \r\n

    消息头
    .
    .
    .
    .

    空行

    消息体

响应状态码

HTTP 响应状态码是服务器对客户端请求处理结果的标识,由三位数字组成。第一位数字定义了状态码的类别,共分五类。了解状态码有助于快速定位和解决问题。

状态码 类别 状态码英文名 含义描述 常见场景
100 信息响应 (1xx) Continue 服务器已收到请求部分,客户端应继续发送剩余部分。 客户端发送较大请求体前,先征询服务器意愿。
101 Switching Protocols 服务器应客户端请求,正在切换协议。 从 HTTP 升级到 WebSocket。
200 成功 (2xx) OK 请求已成功处理 GET 或 POST 请求成功。
201 Created 请求成功且创建了新资源。 POST 请求创建了新用户或新文章。
204 No Content 请求成功,但响应无内容。 DELETE 请求成功,或更新操作无需返回数据。
206 Partial Content 服务器成功处理了部分 GET 请求。 大文件下载或断点续传。
301 重定向 (3xx) Moved Permanently 请求的资源已永久移动到新位置 网站更换域名。
302 Found 请求的资源临时从不同 URI 响应。 用户未登录时访问需认证页面,临时重定向到登录页。
304 Not Modified 资源未修改,客户端可使用缓存。 协商缓存有效时。
307 Temporary Redirect 临时重定向,且请求方法和消息主体不变。 临时维护时跳转,要求保持原请求方法(如 POST)。
400 客户端错误 (4xx) Bad Request 请求语法错误,服务器无法理解 参数错误、格式无效。
401 Unauthorized 请求需要身份验证。 未提供或无效的身份验证凭证(如 token)。
403 Forbidden 服务器理解请求,但拒绝执行。 权限不足。
404 Not Found 服务器找不到请求的资源 URL 地址错误、资源已删除。
405 Method Not Allowed 请求方法(如 POST、GET)不被允许。 尝试用 PUT 方法访问只支持 GET 的接口。
429 Too Many Requests 客户端发送请求过多。 服务器限流。
500 服务器错误 (5xx) Internal Server Error 服务器内部错误,无法完成请求 服务器代码异常、配置错误。
502 Bad Gateway 作为网关或代理的服务器从上游收到无效响应。 反向代理的后端服务无响应或返回无效信息。
503 Service Unavailable 服务器暂时无法处理请求(过载或维护)。 服务器维护、临时过载。
504 Gateway Timeout 网关或代理服务器未及时从上游收到响应。 后端服务处理超时。

希望这个表格能帮助你更好地理解和应用 HTTP 状态码。

响应头

HTTP 响应头是服务器在返回响应时附带的一系列字段,它们为客户端提供了如何处理响应的重要信息。下面是一个常见响应头字段及其作用的表格。

响应头字段 作用描述 常见示例值或说明
Cache-Control 控制缓存行为,指定资源是否可缓存及缓存时间。 max-age=3600 (缓存1小时), no-cache (可缓存但需验证), no-store (禁止缓存)
Content-Type 指示响应体的媒体类型(MIME类型)和字符编码。 text/html; charset=UTF-8, application/json
Content-Length 指示响应体的字节长度。 Content-Length: 348
Content-Encoding 指示对响应体应用的编码方式,如压缩算法。 gzip, deflate
Content-Disposition 建议浏览器如何处理内容,如内联显示或作为附件下载(可指定文件名)。 attachment; filename="file.pdf"
Date 提供响应生成的日期和时间。 Date: Wed, 21 Oct 2015 07:28:00 GMT
Expires 指定响应内容的过期时间(HTTP/1.0的缓存方式)。 Expires: Thu, 01 Dec 1994 16:00:00 GMT
Last-Modified 指示资源的最后修改时间,用于缓存验证。 Last-Modified: Tue, 15 Nov 2010 12:45:26 GMT
ETag 提供资源的特定版本标识符,用于缓存验证和条件请求。 ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"
Location 在重定向(3xx状态码)或创建新资源(201状态码)时,指定新资源的位置。 Location: https://example.com/new-page
Server 描述处理请求的服务器软件信息。 Server: Apache/2.4.1 (Unix) Server: nginx
Set-Cookie 由服务器发送,用于在客户端存储一条Cookie信息。 Set-Cookie: sessionId=abc123; Path=/; HttpOnly
Access-Control-Allow-Origin 指定哪些外域可访问资源(跨源资源共享,CORS)。 * (允许所有域), https://example.com (允许特定域)
Connection 控制本次传输完成后网络连接是保持开启还是关闭。 keep-alive (保持连接), close (关闭连接)
X-Frame-Options 指示是否允许浏览器在 <frame>, <iframe>, <object> 中渲染页面,有助于防止点击劫持。 DENY (禁止), SAMEORIGIN (同源可嵌入)

响应体

做爬虫请求网页时,要解析的内容就是响应体。

me>, ``, ``中渲染页面,有助于防止点击劫持。 |DENY(禁止),SAMEORIGIN` (同源可嵌入) |

响应体

做爬虫请求网页时,要解析的内容就是响应体。

相关推荐
hazy1k5 小时前
STM32H750 RTC介绍及应用
网络·stm32·实时音视频
没书读了5 小时前
考研复习-计算机网络-第三章-数据链路层
网络·计算机网络·考研
zhao3266857515 小时前
2025年代理IP三强横评:LoongProxy、神龙海外动态IP代理、全民HTTP怎么选?看完这篇不踩坑
网络协议·tcp/ip·http
on the way 1235 小时前
多线程之HardCodedTarget(type=OssFileClient, name=file, url=http://file)异常
网络·网络协议·http
WhoisXMLAPI6 小时前
WhoisXML API再次荣登2025年美国Inc. 5000快速成长企业榜单
网络·安全
阿sir1987 小时前
ZYNQ 自定义IP
服务器·网络·tcp/ip
星马梦缘8 小时前
计算机网络4 第四章 网络层——网络间的通信问题(省际之间如何规划信件运输路线)
网络·计算机网络·路由·ip地址·子网掩码·icmp·ipv4/ipv6
hsjkdhs9 小时前
万字详解网络编程之socket
网络·tcp/ip·udp·socket
想睡hhh10 小时前
HTTPS协议——对于HTTP的协议的加密
http·https