HTTP的简单的解析
HTTP
中文全称为超文本传输协议是一种为分布式,合作式,多媒体信息系统服务,面向应用层的协议。它是一种通用的,不分状态(stateless)的协议,除了诸如名称服务和分布对象管理系统之类的超文本用途外,还可以通过扩展它的请求方式,错误代码和报头来完成许多任务。HTTP的一个特点是数据表示方式的典型性和可协商性允许独立于传输数据而建立系统。
简单地阅读了HTTP/1.1的中文版原文,因为英文版不能理解,其中我印象最深的是它的请求应答机制,真正的体现写这个协议的智慧,用并不太繁杂的规定,去定义一个十分复杂的协议,还包含后来的发展,其包容性都十分完备,兼容性是相比较其他同类协议的最大优点吧,对其一些进行了摘要:
请求URI就是统一资源标识符,用来标识要请求的资源。
Request-URI = absoluteURI | abs_path
上面两种请求URI方式可根据实际的请求方式选择使用。
绝对URI(absoluteURI)格式只在代理(proxy)在产生请求时使用。代理的责任是将
请求向前推送,并将回应返回。如果请求是GET或HEAD方式,而且之前的回应被缓存,
如果代理忽略标题域的过期信息限制,它可能使用缓存中的消息。注意,代理可能将请求推
送至另外一个代理,也可将请求直接送至绝对URI中所指定的目的服务器。为了避免请求
循环,代理必须能够识别它的所有服务器名,包括别名、本地变量及数字形式的IP地址。
下面是一个请求队列的例子:
GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.0
最普通的请求URI形式就是原始服务器或网关用来标识资源的方式。在这种方式下,
只有给出绝对路径的URI才能被传输(见3.2.1节)。例如,如客户端希望直接从原始服务
器上接收资源,它们将产生一个与主机"www.w3.org"80端口的TCP连接,并在完整请求之
后发送下面的命令:
GET /pub/WWW/TheProject.html HTTP/1.0
注意绝对路径不可以为空,如果URI中没有内容,也必须加上一个"/"(server root)。
请求URI以编码字符串方式传输,有些字符可能在传输过程中被转义(escape),如变
成“%HEXHEX”形式。具体这方面内容请参见RFC1738[4]。原始服务器在正确解释请求
之前必须对请求URI进行解码。
回应(Response)
在接收、解释请求消息后,服务器端返回HTTP回应消息。
Response = Simple-Response | Full-Response
Simple-Response = [ Entity-Body ]
Full-Response = Status-Line ; Section 6.1
*( General-Header ; Section 4.3
| Response-Header ; Section 6.2
| Entity-Header ) ; Section 7.1
CRLF
[ Entity-Body ] ; Section 7.2
当请求是HTTP/0.9的或者服务器端只支持HTTP/0.9时,只能以Simple-Response方式
回应。如果客户端发送HTTP/1.0完整请求后,接收到的回应不是以状态行(Status-Line)
开头的,客户端将其视为简单回应,并相应对其进行分析。注意,简单请求只包括实体主体,
它在服务器端关闭连接时终止。
6.1 状态行(Status-Line)
完整回应消息的第一行就是状态行,它依次由协议版本、数字形式的状态代码、及相应
的词语文本组成,各元素间以空格(SP)分隔,除了结尾的CRLF外,不允许出现单独的
CR或LF符。
Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF
状态行总是以协议版本及状态代码开头,如:
"HTTP/" 1*DIGIT "." 1*DIGIT SP 3DIGIT SP
(如,"HTTP/1.0 200")。
这种表示方式并不足以区分完整请求和简单请求。简单回应可能允许这种表达式出现在
实体主体的开始部分,但会引起消息的误解。因为大多数HTTP/0.9的服务器都只能回
应"text/html"类型,在这种情况下,不可能产生完整的回应。
HTTP的简单的解析的更多相关文章
- Android Studio下的简单网页解析
Android Studio下的简单网页解析 一.导入数据 导入前添加依赖 implementation 'org.jsoup:jsoup:1.11.3' 使用字符串导入 String html = ...
- js的简单模板解析
在编程中总是会遇见很多动态生成的东西,一般我们都是通过简单的html拼接起来的 function createHtml(name, phone, addr, email, imageSrc){ var ...
- C++写一个简单的解析器(分析C语言)
该方案实现了一个分析C语言的词法分析+解析. 注意: 1.简单语法,部分秕.它可以在本文法的基础上进行扩展,此过程使用自上而下LL(1)语法. 2.自己主动能达到求First 集和 Follow 集. ...
- Gson+GsonFormat+Postman简单粗暴解析json
现在有时候之前的项目需要返回来修改bug看到以下这段代码 if (test != null) { JSONTokener jsonParser = new JSONTokener(test); JSO ...
- java 20 - 4 IO流概述和一个简单例子解析
IO流的分类: 流向: 输入流 读取数据 输出流 写出数据 数据类型: 字节流 字节输入流 读取数据 InputStream 字节输出流 写出数据 OutputStream 字符流 字符 ...
- HTTP简单的解析协议
1.HTTP定义的协议 官方的定义: WWW这是Internet作为传输介质的应用.WWW主变速器单元是在线Web网页.WWW它正在给客户/server计算模型,由Web浏览器Webse ...
- SAXReader简单实例解析HTML
转载自:http://blog.csdn.net/seayqrain/article/details/5024068# 使用SAXReader需要导入dom4j-full.jar包. dom4j是一个 ...
- 2018 Multi-University Training Contest 1 部分简单题解析
Preface ACM系列赛第一站,没有进前200还是很伤的. 主要是T2当时没写出来就GG了,后来看了下其实不是很难. 题目按照比赛时我们A的顺序讲,其实我都是被陈潇然大佬和ZWC带飞的. T1 M ...
- BIOS简单设置 解析“集成显卡”内存占用问题
很多使用集成显卡的用户会发现,在系统信息窗口中,内存容量和实际不一样.比如系统内存显示4GB,可用3.48G之类.这不可用的一部分内存到哪去了? 其实减少的这部分内存是被集成显卡占用当做显存使用了.而 ...
随机推荐
- 解决vue单页路由跳转后scrollTop的问题
作为vue的初级使用者,在开发过程中遇到的坑太多了.在看页面的时候发现了页面滚动的问题,当一个页面滚动了,点击页面上的路由调到下一个页面时,跳转后的页面也是滚动的,滚动条并不是在页面的顶部 在我们写路 ...
- python全栈开发 * 进程理论 进程创建 * 180724
一.进程理论 1.进程是资源分配的最小单位. 2.进程调度就是多个进程在操作系统的控制下被CPU执行,去享用计算机的资源. 先来先服务 短作业优先 时间片轮转 多级反馈队列 3.进程调度的过程是不能够 ...
- day16 十六、包、循环导入、导入模块
一.包的概念 包:一系列模块的集合体.包通过文件夹管理一系列功能相近的模块 重点:包中一定有一个专门用来管理包中所有模块的文件 包名:存放一系列模块的文件夹的名字 包名(对象)存放的是管理模块的那个文 ...
- asp.net mvc ef 性能监控调试工具 MiniProfiler
MiniProfiler是一款针对.NET, Ruby, Go and Node.js的性能分析的轻量级程序.可以对一个页面本身,及该页面通过直接引用.Ajax.Iframe形式访问的其它页面进行监控 ...
- linux加固
1. 账号和口令 1.1 禁用或删除无用账号 减少系统无用账号,降低安全风险. 操作步骤 使用命令 userdel <用户名> 删除不必要的账号. 使用命令 passwd -l <用 ...
- CSS中的display属性(none,block,inline,inline-block,inherit)
css中的display属性(none,block,inline,inline-block,inherit) display属性是我们在前端开发中常常使用的一个属性,其中,最常见的有: none bl ...
- 初步了解Fork/Join框架
框架介绍 Fork/Join框架是Java 7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个子任务,最终汇总每个子任务的执行结果以得到大任务结果的框架.Fork/Join框架要完成两件事 ...
- html5中JavaScript删除全部节点
如果div里有这么些内容: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type ...
- git pull 冲突拉取不到新的代码
本地文件已经有冲突或者在pull的过程中拉取的文件和本地文件冲突时,拉取不到新的代码,git pull出现报错,如下: 这个时候,如果你有两种选择,如果你需要这些改动,那个你就需要手动解决冲突,然后a ...
- Spring框架第二天
## Spring框架第二天 ## ---------- **课程回顾:Spring框架第一天** 1. 概述 * IOC和AOP 2. 框架的IOC的入门 * 创建applicationContex ...