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

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

响应体

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

http://www.xdnf.cn/news/1485217.html

相关文章:

  • Archon01-项目部署
  • SQLAlchemy ORM-表与表之间的关系
  • Python快速入门专业版(九):字符串进阶:常用方法(查找、替换、分割、大小写转换)
  • Text2Sql.Net架构深度解析:从自然语言到SQL的智能转换之道
  • 2025算法八股——大模型开发——指令微调
  • 跳转原生系统设置插件 支持安卓/iOS/鸿蒙UTS组件
  • 安卓学习 之 ProgressBar(进度条)控件
  • Android 热点开发的相关api总结
  • Python-LLMChat
  • 《数据结构全解析:栈(数组实现)》
  • Dockerfile解析器指令(Parser Directive)指定语法版本,如:# syntax=docker/dockerfile:1
  • 【Java实战㉛】解锁Spring框架实战:深入IOC容器的奇妙之旅
  • 从0开始制做一个Agent
  • CMake构建和调试简单程序(windows)
  • YOLO11实战 第009期-基于yolo11的咖啡叶病害目标检测实战文档(yolo格式数据免费获取)
  • C++进阶——多态
  • 简述ajax、node.js、webpack、git
  • ncnn-Android-mediapipe_hand 踩坑部署实录
  • 【数据结构】经典 Leetcode 题
  • Java安全体系深度研究:技术演进与攻防实践
  • 嵌入式Secure Boot安全启动详解
  • JSP到Tomcat特详细教程
  • C#中的托管资源与非托管资源介绍
  • Docker启动失败 Failed to start Docker Application Container Engine.
  • ZYNQ SDK软件在线调试
  • Flutter SDK 安装与国内镜像配置全流程(Windows / macOS / Linux)
  • HTML 中的 CSS 使用说明
  • 华为HCIP-Datacom-Core Technology H12-831 书籍目录
  • 一款没有任何限制的免费远程手机控制手机的软件简介
  • linux Kbuild详解关于fixdep、Q、quiet、escsq