HTTP

  中文全称为超文本传输协议是一种为分布式,合作式,多媒体信息系统服务,面向应用层的协议。它是一种通用的,不分状态(stateless)的协议,除了诸如名称服务和分布对象管理系统之类的超文本用途外,还可以通过扩展它的请求方式,错误代码和报头来完成许多任务。HTTP的一个特点是数据表示方式的典型性和可协商性允许独立于传输数据而建立系统。

  简单地阅读了HTTP/1.1的中文版原文,因为英文版不能理解,其中我印象最深的是它的请求应答机制,真正的体现写这个协议的智慧,用并不太繁杂的规定,去定义一个十分复杂的协议,还包含后来的发展,其包容性都十分完备,兼容性是相比较其他同类协议的最大优点吧,对其一些进行了摘要:

请求URI(Request-URI)
 请求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的简单的解析的更多相关文章

  1. Android Studio下的简单网页解析

    Android Studio下的简单网页解析 一.导入数据 导入前添加依赖 implementation 'org.jsoup:jsoup:1.11.3' 使用字符串导入 String html = ...

  2. js的简单模板解析

    在编程中总是会遇见很多动态生成的东西,一般我们都是通过简单的html拼接起来的 function createHtml(name, phone, addr, email, imageSrc){ var ...

  3. C++写一个简单的解析器(分析C语言)

    该方案实现了一个分析C语言的词法分析+解析. 注意: 1.简单语法,部分秕.它可以在本文法的基础上进行扩展,此过程使用自上而下LL(1)语法. 2.自己主动能达到求First 集和 Follow 集. ...

  4. Gson+GsonFormat+Postman简单粗暴解析json

    现在有时候之前的项目需要返回来修改bug看到以下这段代码 if (test != null) { JSONTokener jsonParser = new JSONTokener(test); JSO ...

  5. java 20 - 4 IO流概述和一个简单例子解析

    IO流的分类:  流向: 输入流 读取数据  输出流 写出数据 数据类型:  字节流  字节输入流 读取数据 InputStream  字节输出流 写出数据 OutputStream  字符流  字符 ...

  6. HTTP简单的解析协议

    1.HTTP定义的协议 官方的定义:        WWW这是Internet作为传输介质的应用.WWW主变速器单元是在线Web网页.WWW它正在给客户/server计算模型,由Web浏览器Webse ...

  7. SAXReader简单实例解析HTML

    转载自:http://blog.csdn.net/seayqrain/article/details/5024068# 使用SAXReader需要导入dom4j-full.jar包. dom4j是一个 ...

  8. 2018 Multi-University Training Contest 1 部分简单题解析

    Preface ACM系列赛第一站,没有进前200还是很伤的. 主要是T2当时没写出来就GG了,后来看了下其实不是很难. 题目按照比赛时我们A的顺序讲,其实我都是被陈潇然大佬和ZWC带飞的. T1 M ...

  9. BIOS简单设置 解析“集成显卡”内存占用问题

    很多使用集成显卡的用户会发现,在系统信息窗口中,内存容量和实际不一样.比如系统内存显示4GB,可用3.48G之类.这不可用的一部分内存到哪去了? 其实减少的这部分内存是被集成显卡占用当做显存使用了.而 ...

随机推荐

  1. 矩阵取数问题(dp,高精)

    题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n×mn \times mn×m的矩阵,矩阵中的每个元素ai,ja_{i,j}ai,j​均为非负整数.游戏规则如下: 每次取数时须从每行各取走 ...

  2. Oracle 使用Dblink

    DBLINK数据库链接是一个数据库中的模式对象,使您可以访问另一个数据库上的对象. dblink限定符允许您引用除本地数据库以外的数据库中的对象,如果省略了dblink,那么Oracle假定您指的是本 ...

  3. 前端 jquery获取当前页面的URL信息

    以前在做网站的时候,经常会遇到当前页的分类高亮显示,以便让用户了解当前处于哪个页面.之前一直是在每个不同页面写方法.工程量大,也不便于修改.一直在想有什么简便的方法实现.后来在网上查到可以用获取当前U ...

  4. Excel GET.CELL说明

    GET是得到的意思CELL是单元格的意思  --->那么它的意思就是你想得到单元格的什么东西(信息)  函数定义:  GET.CELL(类型号,单元格(或范围))  其中类型号,即你想要得到的信 ...

  5. centOs6.5配置启动ssh

    .非root用户则执行su或su - 或su root或su - root切换为root用户 2.查看SSH是否安装(检查是否装了SSH包) 输入命令:rpm -qa | grep ssh 注:若没安 ...

  6. Memcache&Redis

    Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.减少数据库读取次数来提高网站速度 先在一台机器安装memcache 然后使用Python 安装pip3 i ...

  7. spark优化设置

    ->>>配置参数优化 SparkConf sc = new SparkConf().setAppName("com.sp.test.GroupTop3").set ...

  8. SPSS提示“列表中不允许存在字符串变量”的解决方法

    点击 查看 菜单->变量->将需要修改为数字类型的列属性改为数字,还可以更改小数位数

  9. javaScript放在head和body的区别

    JavaScript写在哪里? 内部:Html网页的<body></body>中: 内部:Html网页的<head></head>中: 外部:外部js文 ...

  10. wordpress调用the_excerpt()不带<p>标签

    我们知道wordpress调用摘要内容用<?php the_excerpt(); ?>就可以,但是它会自动添加一个p标签,例如<p>这里是description</p&g ...