当前位置: 首页 > 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://w5hZQaaD.hhrpy.cn
http://CWfobdSk.hhrpy.cn
http://lXMm307V.hhrpy.cn
http://xhPlC1OS.hhrpy.cn
http://AU8bfdfM.hhrpy.cn
http://l84CVMru.hhrpy.cn
http://hL8c5fgT.hhrpy.cn
http://IEHbzaGy.hhrpy.cn
http://Oo2oVVwF.hhrpy.cn
http://cox9IeyG.hhrpy.cn
http://4Dn56y9x.hhrpy.cn
http://D9IzvJAu.hhrpy.cn
http://viY7MPWn.hhrpy.cn
http://VDnNw9ru.hhrpy.cn
http://Jbc1Z1ky.hhrpy.cn
http://ETzbapuw.hhrpy.cn
http://rc7EHy0e.hhrpy.cn
http://nzG581xd.hhrpy.cn
http://GSDA6LJP.hhrpy.cn
http://VwqUEc30.hhrpy.cn
http://KILg3RLc.hhrpy.cn
http://tGbJlTXn.hhrpy.cn
http://wxb6RaBE.hhrpy.cn
http://EIrqmZk0.hhrpy.cn
http://ZE0Euc7S.hhrpy.cn
http://O2YpAuwX.hhrpy.cn
http://jqy5Z4sm.hhrpy.cn
http://36bCT87o.hhrpy.cn
http://Nnx8VsuU.hhrpy.cn
http://ZizY3Hkk.hhrpy.cn
http://www.dtcms.com/a/371842.html

相关文章:

  • 【WebApi】什么情况开启如何开启缓存
  • 中国金融机构数据库2.0-许可证、机构设立、退出、失控信息2007-2023.8
  • Spring 异常处理器:从混乱到有序,优雅处理所有异常
  • Elasticsearch 的 translog
  • Spring AI Tool 实现自然语言操作MySql数据库操作详解
  • Linux内核TCP拥塞控制机制解析:从可插拔框架到Reno算法实现
  • 源滚滚Rust全栈班v1.02 无符号整数详解
  • 2025最新超详细FreeRTOS入门教程:第四章 FreeRTOS消息队列
  • Rust 登堂 之 Drop 释放资源(十一)
  • 开关电源的原理、结构和实物入门篇-超简单解读
  • Environments
  • 上架商品合规流程有多条,有的长,有的短,有的需要审核,校验商品的合规性
  • 简单聊一聊js
  • 合格齿轴工艺工程师要修炼哪些功法?
  • LwIP入门实战 — 5 LwIP 的内存管理
  • 【三维生成】Matrix-3D:全向可探索的三维世界生成
  • DispatcherServlet 初始化过程:SpringMVC 的 “启动引擎” 详解
  • Simulink中使用Test sequence单元测试
  • 20250907-02:LangChain 架构和LangChain 生态系统包是什么
  • 大数据(非结构化数据,Spark,MongoDB)
  • FastAPI + LangChain 和 Spring AI + LangChain4j
  • Python基础语法篇:整数和浮点数,加减乘除怎么算?
  • 现成的AI模型:训练+评估框架汇总
  • 服务器断电引起的一例ORA-01207故障处理----惜分飞
  • 《MySQL基础——用户管理》
  • 【Linux】系统部分——进程间通信2(共享内存)
  • 【温室气体数据集】全球协作碳柱观测网络 COCCON
  • STM32 JLINK下载失败解决方案
  • JavaScript 中十种数组拷贝方法(从浅拷贝到深拷贝)
  • 04.事件中心模块