热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

HTTP请求与响应机制:基础概览

在Web浏览过程中,HTTP协议通过请求和响应报文实现客户端与服务器之间的通信。当用户访问一个网页时,浏览器会发送一个HTTP请求报文至服务器,服务器接收到请求后,会生成并返回一个HTTP响应报文。这两种报文均包含三个主要部分:起始行、头部字段和消息体,确保了数据的有效传输和解析。

HTTP的报文分为请求报文和响应报文,打开一个web页面后,浏览器将发起一个HTTP请求报文,HTTP服务器收到请求后将回送一个响应报文。

报文的基本结构

HTTP的请求和响应报文都由三个部分组成:对报文进行描述的起始行(start line)、包含属性的首部(header)块、以及可选的包含数据的主体(body)部分。

请求报文和响应报文在语法上有些差别,下面是请求报文的格式:

  


下面是响应报文的格式:

  


1)方法(method)
客户端希望服务器对资源执行的动作。

2)请求URL(request-URL)
命名了所请求资源,或者URL路径组件的完整URL。

3)版本(ersion)
报文所使用的HTTP版本,格式为:
 HTTP/.
目前使用的是1.1版本。

4)状态码(status)
描述了请求过程中所发生的情况。

5)原因短语(reason-phrase)
状态码的可读版本,只对人类有意义。

6)首部(header)
HTTP/1.1要求有效的请求或响应报文中必须包含特定的首部,每个首部都包含一个名字,后面跟着一个冒号(:),然后是一个可选的空格,然后是一个值,最后是一个换行(CRLF)。首部由一个空行结束。

7)实体(entity-body)
包含由任意数据组成的数据框,报文可以不包含实体部分。

下面看一个具体的例子,请求报文:

GET /test/hi-there.txt HTTP/1.1
Accept: text/*
Host: www.joes-hardware.com

响应报文:

HTTP/1.1 200 OK
Content-type: text/plain
Content-length: 19

Hi! I'm a message!
方法

常用的HTTP方法包括:
 GET:从服务器获取一份文档
 HEAD:只从服务器获取文档的首部
 POST:向服务器发送需要处理的数据
 PUT:将请求的主体部分存储在服务器上
 TRACE:对可能经过代理服务器传送到服务器上去的报文进行跟踪
 OPTIONS:决定可以在服务器上执行哪些方法
 DELETE:从服务器上删除一份文档
注意并不是每个服务器都实现了所有的方法。

状态码

状态码用于告诉客户端,发生了什么事情,状态码的分类如下:
 100~199:信息提示
 200~299:成功
 300~399:重定向
 400~499:客户端错误
 500~599:服务器错误
下面列举了一些最常见的状态码:

 200 OK:成功。请求的所有数据都在响应主体中
 401 Unauthorized:需要输入用户名和密码
 404 Not Found:服务器无法找到所请求URL对应的资源

首部

首部是一些名/值对的列表,向请求和响应报文中添加一些附加信息。
HTTP规范定义了几种首部字段,应用程序也可以随意发明自己所用的首部。HTTP首部可以分为以下几类:
 1)通用首部;
 --既可以出现在请求报文中,也可以出现在响应报文中
 2)请求首部;
 3)响应首部;
 4)实体首部;
 --描述主体的长度和内容,或者资源自身
 5)扩展首部。
 --规范中没有定义的新首部
常用的首部如下:
 Date:Tue,3Oct 1997 02:16:03 GMT ------服务器产生响应的日期
 Content-length:15040 ------实体的主体部分包含了15040字节的数据
 Content-type:image/gif ------实体的主体部分是一个GIF图片
 Accept:image/gif,image/jpeg,text/html ------客户端可以接收GIF图片和JPEG图片以及HTML
长的首部行可以分为多行,提高可读性,多出来的每行前面要有一个空格或制表符(tab),如:
 Server: Test Server
  Version 10 ------以一个空格或者制表符开始


推荐阅读
  • Python处理Word文档的高效技巧
    本文详细介绍了如何使用Python处理Word文档,涵盖从基础操作到高级功能的各种技巧。我们将探讨如何生成文档、定义样式、提取表格数据以及处理超链接和图片等内容。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 深入理解Redis的数据结构与对象系统
    本文详细探讨了Redis中的数据结构和对象系统的实现,包括字符串、列表、集合、哈希表和有序集合等五种核心对象类型,以及它们所使用的底层数据结构。通过分析源码和相关文献,帮助读者更好地理解Redis的设计原理。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 本文介绍如何使用布局文件在Android应用中排列多行TextView和Button,使其占据屏幕的特定比例,并提供示例代码以帮助理解和实现。 ... [详细]
  • 本文详细介绍了如何准备和安装 Eclipse 开发环境及其相关插件,包括 JDK、Tomcat、Struts 等组件的安装步骤及配置方法。 ... [详细]
  • 深入解析Nginx中的Location指令及其属性
    本文将详细探讨Nginx配置文件中关键的location指令,包括其三种匹配方式(精准匹配、普通匹配和正则匹配),以及如何在实际应用中灵活运用这些匹配规则。此外,还将介绍location下的重要子元素如root、alias和proxy_pass,并解释相关参数的使用方法。 ... [详细]
  • 本文详细介绍了在 Windows 2000 系统中启用 TELNET 服务时需要注意的 NTLM 配置问题,帮助用户解决常见的身份验证失败错误。 ... [详细]
  • 本文详细介绍了Ionic框架的使用方法及其与Angular的集成。Ionic框架是一个强大的前端开发工具,适用于构建跨平台的移动应用程序。文章将探讨如何引入必要的CSS和JavaScript文件,并解释bundle.js中包含的核心功能,如路由等。 ... [详细]
  • 本文详细探讨了HTML表单中GET和POST请求的区别,包括它们的工作原理、数据传输方式、安全性及适用场景。同时,通过实例展示了如何在Servlet中处理这两种请求。 ... [详细]
  • 采用IKE方式建立IPsec安全隧道
    一、【组网和实验环境】按如上的接口ip先作配置,再作ipsec的相关配置,配置文本见文章最后本文实验采用的交换机是H3C模拟器,下载地址如 ... [详细]
author-avatar
wyf叶子_594
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有