HTTP协议初探

2023-11-15

       发现网络协议的知识对后台开发人员来说,还是非常重要的,所以特地去了解了以下,并作学习笔记,方便自己查阅。
HTTP协议详解
       HTTP就是一个基于应用层的通信规范:双方要进行通信,大家都要遵守一个规范——HTTP协议。HTTP协议从WWW服务器传输超文本到本地浏览器,可以使浏览器更加高效。HTTP协议不仅保证计算机正确快速地传输超文本文档,还能确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。   
                      图1:HTTP协议在OSI模型中的位置
     HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP通常承载于TCP协议之上,有时也承载于TLS或SSL协议之上,这时候,就成了HTTPS。默认HTTP的端口号为80,HTTPS的端口号为443.
     HTTP协议是一个无状态协议,同一个客户端的这次请求和上次请求没有对应关系,会使TCP连接频繁建立和断开,交互效率不高。
     SPDY协议是Google推出的协议,优化了浏览器和服务器之间的通信,支持流复用,具备优先级的请求、主动发起请求、强制SSL安全传输等先进的特性。
HTTP协议工作
     浏览网页是HTTP协议的主要应用,但不代表HTTP协议只能应用于网页的浏览。只要通信的双方都遵守HTTP协议,其就有用武之地,比如腾讯QQ、迅雷等软件都使用HTTP协议(当然还包括其他的协议)。
     1)客户机与服务器建立连接。
     2)建立连接后,客户机发送一次一个请求给服务器。格式为:前边是统一资源标识符(URL)、中间是协议版本号,后边是MIME信息(包括服务器信息、实体信息和可能的内容)。
     3)服务器接到请求后,给予相应的响应信息。格式为:首先是一个状态行(包括信息的协议版本号、一个成功或错误的代码),然后是MIME信息(包括服务器信息、实体信息和可能的内容)。
     4)客户端接收服务器返回的信息并显示在用户的显示屏上,然后客户机与服务器断开连接。
1.请求
     在发起请求前,需要先建立连接。
     连接是一个传输层的实际环流,它建立在两个相互通信的应用程序之间。不论是request还是response的header中包含了值为close的connection,都表明当前正在使用的TCP连接在请求处理完毕后会被断掉,以后client再进行新的请求必须建立新的TCP连接。
     HTTP请求由三部分组成:请求行、消息报头、请求正文。请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,格式如下:
     Method Request-URI HTTP-Version CRLF
     
     Method:请求方法。
             Request-URI:一个统一资源标识符。
             HTTP-Version:请求的HTTP协议版本。
             CRLF:回车和换行(除了作为结尾的CRLF外,不允许出现单独的CR或LF字符)。
     
     请求方法(所有方法全为大写):
             GET:向特定的资源发出请求。注意:GET方法应该只用在读取数据,不应当被用于产生“副作用”的操作中,就是说,它仅仅是获取资源信息, 就像数据库查询一样,不会修改,增加数据,不会影响资源的状态。
             POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
             HEAD:向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。
             PUT:向指定资源位置上传其最新内容。 
             DELETE:请求服务器删除Request-URI所标识的资源。 
             TRACE:回显服务器收到的请求,主要用于测试或诊断。 
             CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
             OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送'*'的请求来测试服务器的功能 性。
2.响应
     在接收和解释请求信息后,服务器返回一个HTTP响应消息。HTTP由三个部分组成,分别是:状态行、消息报头、响应正文。
     状态行格式:
     HTTP-Version Status-Code Reason-Phrase CRLF
     参数说明:
             HTTP-Version:服务器HTTP协议的版本。
             Status-Code:服务器发回的响应状态代码。
             Reason-Phrase:状态代码的文本描述。
     状态代码由三位数字组成,第一个数字定义了响应的类别:
             1xx:指示信息——请求已接收,继续处理。
             2xx:成功——请求已被成功接收、理解、接受。
             3xx:重定向——要完成请求必须进行更进一步的操作。
             4xx:客户端错误——请求由语法错误或请求无法实现。
             5xx:服务器端错误——服务器未能实现合法的请求。
     常见状态代码、状态描述和说明如下:
             200 OK:客户端请求成功。
             400 Bad Request:客户端请求有语法错误,不能被服务器所理解。
             401 Unauthorize:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。
             403 Forbidden:服务器收到请求,但是拒绝提供服务。
             404 Not Found:请求资源不存在,例如输入了错误的URL。
             500 Internal Server Error:服务器发生不可预期的错误。
             503 Server Unavailable:服务器不能处理客户端的请求,一段时间后可能恢复正常。
             例如,响应信息”HTTP/1.1 200 OK(CRLF)“,表示响应请求到达服务器后被成功识别,返回成功标记。响应正文就是服务器返回的资源的内容。
3.报头
     HTTP消息报头包括普通报头、请求报头、响应报头、实体报头。
     组成形式:
          名字+:+空格+值
     PS:消息报头域的名字是不区分英文大小写的。
            1)普通报头中有少数报头域用于所有的请求和响应消息,但并不用于被传输的实体,只用于传输的消息(如缓存控制、连接控制等)。
            2)请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息(如UA头、Accept等)。
            3)响应报头定义了关于实体正文和请求所标识的资源的元信息,例如有无实体正文。
     比较重要的几个报头:
     Host:头域指定请求资源的Internet主机和端口号,必须表示请求URL的原始服务器或网关的位置。
     User-Agent:简称UA,内容包含发出请求的用户信息。通过UA包括包含浏览器者的信息,主要是浏览器的名称版本和所用的操作系统。
     Accept:告诉服务器可以接受的文件格式。
     Cookie:Cookie分两种,一种是客户端向服务器端发送的,使用Cookie报头,用来标记一些信息;另一种是服务器发送给浏览器的,报头为Set-Cookie。二者的主要区别是Cookie报头的value里可以有多个Cookie值,并且不需要显式指定domain等。而Set-Cookie报头里一条记录只能有一个Cookie的value,需要指明domain、path等。
     Cache-Control:指定请求和响应应遵循的缓存机制。
     Referer:头域允许客户端指定请求URI的源资源地址,Referer通常是流量统计系统用来记录来访者地址的参数。
     Content-Length:内容长度。
     Content-Range:响应的资源范围。可以在每次请求中标记请求的资源范围,在连接断开重连时,客户端只请求该资源未下载的部分,而不是重新请求整个资源,实现断点续传。迅雷就是基于这个原理,使用多线程分段读取网络上的资源,最后再合并。
     Accept-Encoding:指定所能接受的编码方式。
     自定义报头:在HTTP消息中,也可以使用一些在HTTP1.1正式规范里没有定义的头字段,这些头字段称为自定义的HTTP头或者扩展头。
参考资料:《PHP核心技术与最佳实践》   列旭松 陈文 著
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HTTP协议初探 的相关文章

随机推荐

  • 如何开具SSCI论文的检索证明?

    在学术界中 无论是学位申请 奖学金申请 还是职称评审 都必须附上SSCI论文的检索报告 那么 如何开具SSCI论文检索证明呢 一种方法是自行前往所在学校或当地查新机构开具 另一种方法则是委托专业人员代为开具 作者需要了解可用于开具论文检索报
  • OpenFeign 基本介绍和原理了解

    了解 OpenFeign OpenFeign 组件的前身是 Netflix Feign 项目 后来 Feign 项目被贡献给了开源组织 才有了今天使用的 Spring Cloud OpenFeign 组件 OpenFeign 提供了一种声明
  • postman面试_使用Postman做接口测试

    Postman是一个接口测试工具 在做接口测试的时候 Postman相当于一个客户端 它可以模拟用户发起的各类HTTP请求 将请求数据发送至服务端 获取对应的响应结果 从而验证响应中的结果数据是否和预期值相匹配 并确保开发人员能够及时处理接
  • 小程序在线更新,发布后提示有新版本

    在小程序onLaunch时候查看是否有新版本 onLaunch function 小程序更新 const updateManager uni getUpdateManager updateManager onCheckForUpdate f
  • 怎么把jfif改成png格式?三招送给你

    怎么把jfif改成png格式 在我们实际办公的过程中 其电脑网页存储的图片格式可能就是jfif格式 很多人对于jfif格式较为陌生 且在一些应用场景无法直接打开jfif格式的图片进行操作 编辑 对我们办公效率造成了一些影响 在此过程中 需要
  • Python、PHP和Java下的反序列化漏洞复现实例

    环境准备 这篇文章旨在用于网络安全学习 请勿进行任何非法行为 否则后果自负 python反序列化 p83 CTF夺旗 Python考点SST 反序列化 字符串 正经人 的博客 CSDN博客 php反序列化 p84 CTF夺旗 PHP弱类型
  • vue注册全局指令

    Vue directive focus 只调用一次 指令第一次绑定到元素时调用 在这里可以进行一次性的初始化设置 bind el binding console log bind el binding el触发的元素 console log
  • BeanFactoryAware

    在使用spring编程时 常常会遇到想根据bean的名称来获取相应的bean对象 这时候 就可以通过实现BeanFactoryAware来满足需求 代码很简单 Service public class BeanFactoryHelper i
  • 免费开源的高精度OCR文本提取,支持 100 多种语言、自动文本定位和脚本检测,几行代码即可实现离线使用(附源码)

    免费开源的高精度OCR文本提取 支持 100 多种语言 自动文本定位和脚本检测 几行代码即可实现离线使用 附源码 要从图像 照片中提取文本吗 是否刚刚拍了讲义的照片并想将其转换为文本 那么您将需要一个可以通过 OCR 光学字符识别 识别文本
  • uniapp引入图表ucharts方法

    Ucharts官网 https demo ucharts cn HBuilderX插件市场 https ext dcloud net cn 进入HBuilderX插件市场安装ucharts插件 进入ucharts官网找到需要的图表复制代码
  • 设计模式 简单工厂,策略模式,几种基本原则,Unity基础

    学习笔记 感受设计演变过程中蕴含的大智慧 体会乐于怒的程序人生中值得回味的一幕幕 设计模式来自于建筑领域 作为软件工程的一个分支 是在软件工程实践过程中 程序员们总结出的良好的编程方法 第一种模式 简单工厂模式 图片来源 点这里 上面是简单
  • RAM IP core(2)

    例化5种RAM IP core 1 单端口RAM Single port RAM RAM参数设置如上图所示 输入输出位宽都为8位 深度为16 采用一级输出寄存器 读写模式为no change 用COE文件对RAM进行初始化 关于COE文件的
  • BurpSuit在不同浏览器中配置代理

    BurpSuit配置代理 一 BurpSuit代理基础知识 通常情况下 用户通过浏览器浏览网页 通过浏览器 客户端 与服务器进行交互 既相互进行通信 若要想分析客户端和服务器交互的具体信息 就需要一个人当个中介 中间人 可以拦截两个人的信息
  • HTML5基础知识总结

    文章目录 01 HTML5基础 了解HTML5 新语义标签 网页布局结构标签及兼容处理 多媒体标签及属性介绍 新表单元素及属性 智能表单控件 表单属性 HTMl5中的API 获取页面元素及类名操作和自定义属性 文件读取 获取网络状态 获取地
  • sql union 列的字段不一样的时候

    转载于 https www cnblogs com shenzhichipingguo p 8916705 html
  • 69-Sqrt(x)

    题目 Implement int sqrt int x Compute and return the square root of x 分析 这个题里面是有许多陷阱的 首先确定用二分法处理这个问题 然而0 x之间的num的平方有可能会溢出
  • Apifox接口测试教程(一)接口测试的原理与工具

    前言 掌握了http协议 就掌握了接口测试 笔者在网络上看过不少接口测试教程 一上来就开始讲怎么操作工具 而不告诉读者为什么要这么操作 读者可能照猫画虎成功了 也可能操作失败了但不知为何出错 因此 本文作为接口测试的入门第一课首先会给大家了
  • 静态代码分析工具(一)—Scitools Understand

    一 概述 Understand是一个用来进行静态的软件分析 软件度量 软件可视化的工具 二 软件使用 1 安装 安装的是Understand 5 1 安装及另起可用网上很多资源 2 新建工程 创建工程名称 路径 选择语言 注意 在C C 后
  • (cLion、RubyMine、PyCharm、WebStorm、PhpStorm、Appcode、Clion、Idea) 万能破解,获取自己的注冊码...

    听说cLion的ide编写c c 很的棒 今天下载了一个仅仅有30天的使用时间 作为程序猿破解它 下载破解文件 点击下载 password 7biu 解压压缩包 然后打开命令行 cd 到解压文件夹 运行例如以下命令 java jar bui
  • HTTP协议初探

    发现网络协议的知识对后台开发人员来说 还是非常重要的 所以特地去了解了以下 并作学习笔记 方便自己查阅 HTTP协议详解 HTTP就是一个基于应用层的通信规范 双方要进行通信 大家都要遵守一个规范 HTTP协议 HTTP协议从WWW服务器传