HTTP协议(二)

HTTP协议(二)


请求访问文本或图像等资源的一端成为客户端,而提供资源相应的一端成为服务器。应用HTTP协议时,必定是一端担任客户端角色,另一端担任服务器端角色。HTTP协议请求肯定是先从客户端开始建立通信的,服务器端在没有接收到请求之前不会发送响应。

举个简单的例子,那我们学校的教务系统举例,我使用火狐的httpfox插件去获取到请求

请求

请求头

Request-Line: 请求行,其中GET表示本次请求是GET类型,/student/html/s_index.htm 是请求访问的资源对象。HTTP/1.1表示我用的协议方案是HTTP/1.1版本

Host: 访问的主机是 yjsiw.hfut.edu.cn

User-Agent:表示我的个人信息,用的是Mac OS X 10.11版本的电脑,使用Firefox的浏览器访问的

Accept:表示告知服务器,客户端可以接受的数据类型,例如text/html格式等等

Accept-Language:表示告知服务器,客户端可以接收的语言类型,如中文,英文

Accept-Encoding:表示告知服务器,客户端可以接受的编码类型

Referer:是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器藉此可以获得一些信息用于处理。

Cookie:给服务器发送的Cookie

Connection:链接状态 keep:alive

Upgrade-insecure-Requests:“升级不安全请求(upgrade-insecure-requests)”,即在启用升级非安全请求后,HTTP会被作为HTTPS对待。许多传统网站的页面可能包含了HTTP资源请求,在启用HTTPS后页面的HTTP请求仍然给中间人劫持和监听留下了空间。然而网站开发者无需担心,浏览器会自动帮你完成安全升级

响应

响应头

Status-Line:状态行,用于告知客户端,请求的响应状态等信息,200表示服务器处理请求成功,其他的状态码,稍后的几篇博客将会介绍。OK表示200状态码的原因短语。

Content-Length:表示返回内容的长度

Content-Type:表示返回内容的类型

Last-Modified:在浏览器第一次请求某一个URL时,服务器端的返回状态会是200,内容是客户端请求的资源,同时有一个Last-Modified的属性标记此文件在服务器端最后被修改的时间。

Accept-Ranges:它允许服务器指明:将在给定的偏移和长度处,为资源组成部分的接受请求。该头标的值被理解为请求范围的度量单位。例如Accept-Ranges: bytes或Accept-Ranges: none

Etag:一种实体头标,它向被发送的资源分派一个唯一的标识符。对于可以使用多种URL请求的资源,Etag可以用于确定实际被发送的资源是否为同一资源。例如:ETag: ‘of86db99d97c71:5fo’

Server:服务器运行系统为Microsoft-IIS/6.0

X-Powered-By:X表示这个头是一个扩展报头,即不符合HTTP标准。Powered-By:告诉HTTP客户端引擎的请求/响应处理。

Date:提供日期和时间标志,说明报文是什么时间创建的

HTTP是不保存状态的协议

HTTP是一种不保存状态,即无状态协议,HTTP协议自身不对请求和响应之间的通信状态进行保存,这是为了更快的处理大量事务,确保协议的可伸缩性。HTTP协议虽然是无状态的协议,但是确通过cookie达到有状态。

告知服务器意图的HTTP方法

GET:获取资源

POST:传输实体主体,虽然GET方法也可以传输实体的主体,但一般不用GET方法进行传输,而是用POST方法。虽说POST的功能与GET很相似,但POST的主要目的并不是获取响应的主体内容。

PUT:传输文件,要求在请求报文的主体中包含文件内容,然后保存到请求URI指定的位置,但是鉴于HTTP/1.1的PUT方法自身不带验证机制,任何人都可以上传文件,存在安全性问题,所以一般WEB网站不使用该方法,若配合WEB应用程序的验证机制,或架构设计采用REST(REpresentational State Transfer,表征状态转移)标准的同类WEB网站,就可能会开放使用PUT

HEAD:获取报文首部

DELETE:删除文件,与PUT相反,也具有不安全性

OPTIONS:询问支持的方法,用来查询针对请求URI指定的资源支持的方法

TRACE:追踪路径,让WEB服务器将之前的请求通信环回给客户端的方法。客户端可以通过TRACE方法可以查询发送出去的请求是怎么样被加工修改的,但是TRACE方法本来就不常用,因为容易引起XST(Criss0Site Tracing,跨站追踪)攻击。

CONNECT:要求用隧道协议连接代理,要求在与代理服务器通信时简历隧道,实现用隧道协议进行TCP通信。主要使用SSL(安全套接层)和TLS(传输层安全)协议把通信内容加密后经过网络隧道传输。

持久连接节省通信量

HTTP协议的初始版本中,每进行一次HTTP通信就要断开一次TCP连接。在以前通信量较小的情况下,这样使用没有多大问题,可是随着HTTP的普及,文档中包含大量的图片情况多了起来。所以每次请求一个页面,可能随后还要请求这个页面里面的其他资源,例如图片等,每次请求都会造成无谓的TCP连接建立和断开,增加通信量的开销。

为了解决上述问题,HTTP采用了keep-alive的方法,持久连接的特点是,只要任意一端没有明确提出断开连接,则保持TCP连接状态。

HTTP/1.1中所有的连接默认都是持久连接

持久连接使得多数请求以管线化方式发送成为可能,以前发送请求后需要等待并收到响应,才能发送下一个请求,管线化技术出现后,不用等待响应也可以直接发送下一个请求。

持久连接通过减少TCP的建立和断开的开销,从而使得WEB页面的显示速度提高。管线化,通过同一时间发送多个请求,达到WEB页面的显示速度提高。

使用Cookie的状态管理

Cookie技术是为了解决HTTP协议无状态问题而产生。Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。Cookie会根据从服务器端发送的响应报文内的一个叫做set-Cookie的首部字段信息,通知客户端保存Cookie。当下次客户端再去往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。服务器端发现客户端发送过来的Cookie后,回去检查究竟是从哪个客户端发送过来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值