Web开发之HTTP协议
HTTP响应消息
- 一个HTTP响应代表服务器向客户端回送的数据。
- 一个完整的HTTP响应包括如下内容:
一个状态行、若干消息头、以及响应正文,其中的一些消息头和正文都是可选的,消息头和正文内容之间要用空行隔开。
例如:
HTTP/1.1 200 OK //状态行
Server: Microsoft-IIS/5.0 //消息头,以下都是
Date: Thu, 13 Jul 2000 05:46:53 GMT
Content-Length: 2291
Content-Type: text/html
Cache-control: private //消息头,以上都是
//空格隔开
<HTML> //实体内容
<BODY>
……
- 状态行:用于描述服务器对请求的处理结果
- 消息头:用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理等一会儿它回送的数据
- 实体内容:代表服务器向客户端回送的数据
HTTP响应的细节——常用状态码
- 200(正常)
表示一切正常,返回的是正常请求结果 - 302/307(临时重定向)
指出被请求的文档已被临时移动到别处,此文档的新的URL在Location响应头中给出。 - 304(未修改)
表示客户机缓存的版本是最新的,客户机可以继续使用它,无需到服务器请求。 - 404(找不到)
服务器上不存在客户机所请求的资源。 - 500(服务器内部错误)
服务器端的程序发生错误
HTTP协议
规定了客户端和服务端交流时的数据格式
特点
请求和响应都由三部分组成
请求信息
- 请求行
- 请求的方式
- 请求的资源地址
- 请求协议
- 请求头部分
- 头名称
- 头值
- 请求正文
- 只有请求的类型是post才会有
响应信息
- 响应行
- 响应协议
- 状态码
- 状态信息
- 响应头信息
- 响应头
- 头值
- 响应正文
post和get的区别
- get方式请求参数会附加在url后,而post是看不到的,post相对安全
- get方式对提交的数据大小有限制(1k),post方式对数据大小没有限制
请求头信息(主要)
Accept: 浏览器告诉服务端, 浏览器可接受的MIME类型
MIME类型: 相当于操作系统下的文件类型。
由大类型和小类型组成: text/html;
对应的关系在conf/web.xml中查询Referer: 浏览器告诉服务端,当前页面从哪里来的。
用处: 1. 用来记录广告的信息 2. 防盗链
响应头信息
Location (重定向): 服务端用来告诉浏览器,请求需要重定向.(必须结合状态吗302使用)
response.setStatus(302);
//设置响应头
response.setHeader(“Location”,”servlet/ServletDemo2.java”);Content-Encoding: 服务端用来告诉浏览器,服务器对数据采用的编码
String s = “aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa”;
byte[] bs = s.getBytes();
System.out.println(“压缩前的长度:” + bs.length);
//创建一个字节数组输出流
ByteArrayOutputStream baos = new ByteArrayOutputStream();//希望用Gzip压缩一下,然后发送
//创建一个压缩流,包装了一下输出流
GZIPOutputStream gzip = new GZIPOutputStream(baos);
//将数据进行压缩
gzip.write(bs);
gzip.close();//从压缩流中拿出数据
bs = baos.toByteArray(); //压缩后的数据
System.out.println(“压缩后的长度:” + bs.length);//通知浏览器发送的数据是gzip
response.setHeader(“Content-Enconding”, “gzip”);
response.getOutputStream().write(bs);Content-Type: 服务端用来告诉浏览器,你要用哪个码表来解析二进制数据
String s = “末日没有进行曲”;
//通知浏览器的Content-Type(告诉让其这个编码解析,以及发送这个编码的内容)
response.setHeader(“Content-Type”, “text/html;charset=UTF-8”);
response.getWrite.write(s);Last-Modified : 服务端用来告诉浏览器,访问资源的最后修改时间
Refresh:服务端用来告诉浏览器,多长时间刷新一次
//隔2s时间刷新自己
response.setHeader(“Refresh”, “2”);
response.getWrite.write(“number-” + new Random().netInt);//隔2s时间刷新到其他资源
response.setHeader(“Refresh”, “2;url=/servlet/ServletDemo2”);Content-Disposition: 服务端用来告诉浏览器,以下载文件的方式打开文件
//拿到图片路径
String path = this.getServletContext().getRealPath(“/WEB-INF/classes/1.gif”);//创建一个输入流对象
FileInputStream is = new FileInputStream(path);
byte[] bs = new byte[1024];
int b = 0;//创建一个输出流对象
ServletOutputStream os = response.getOutputStream();//通知浏览器不要直接显示,而要下载
response.setHeader(“Content-Disposition”, “attachment;filename=1.gif”);//读取数据发送数据
while((b = is.read(bs) != -1){
os.write(bs,0,b);
}
is.close();
os.close();Expires: -1 : 服务端用来告诉浏览器,不要缓存
//通知浏览器不要缓存
response.setHeader(“Expires”, “-1”);
response.setHeader(“Cache-control”, “no-cache”);
response.setHeader(“Pragma”, “no-cache”);response.getWriter().write(“Hello world!”);
Web开发之HTTP协议的更多相关文章
- Web开发之Tomcat&Servlet
<!doctype html>01 - JavaEE - Tomcat&Servlet figure:first-child { margin-top: -20px; } #wri ...
- Vim下的Web开发之html,CSS,javascript插件
Vim下的Web开发之html,CSS,javascript插件 HTML 下载HTML.zip 解压HTML.zip,然后将里面的所有文件copy到C:\Program Files\Vim\vi ...
- 移动web开发之rem适配布局
移动web开发之rem适配布局 方案: 页面布局文字能否随着屏幕大小变化而变化 流式布局和flex布局主要针对于宽度布局,那高度如何布局? 怎样让屏幕发生变化的时候元素高度和宽度等比例缩放? 1. r ...
- android开发之http协议
http协议学习系列 1. 基础概念篇 1.1 介绍 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会(World Wide Web C ...
- Web开发之Cookie and Session
会话 什么是会话? 简单说:用户开一个浏览器,点击多个超链接,访问服务器的多个web资源,然后关闭浏览器,整个过程就称之为一个会话. 会话过程要解决什么问题 每个用户在使用浏览器与服务器进行会话的过程 ...
- Web开发之RSET API
REST介绍 如果要说什么是REST的话,那最好先从Web(万维网)说起. 什么是Web呢?读者可以查看维基百科的词条(http://zh.wikipedia.org/zh-cn/Web),具体的我就 ...
- .NET Web开发之.NET MVC框架
摘要:MVC是一种架构设计模式,该模式主要应用于图形化用户界面(GUI)应用程序.那么什么是MVC?MVC由三部分组成:Model(模型).View(视图)及Controller(控制器). MVC概 ...
- web开发之Servlet 一
因为最近在研究公司一套新的框架,发现这套框架的底层是对Struts2,Spring 封装后的WEB应用框架,而我发现如果仅仅是利用这个框架开发,确实很容易快速上手,做业务来说是没有问题的,但我觉得如果 ...
- Web开发之404小结
404算是Web工程里最常见的错误代号了.今天做一个小结: 场景:[Tomcat运行正常,但无法访问自己建的项目:404] 结果:在URL拼写正确的情况下,无法访问目标工程任何页面 信息:[404]: ...
随机推荐
- Sentry 开发者贡献指南 - 前端 React Hooks 与虫洞状态管理模式
系列 Sentry 开发者贡献指南 - 前端(ReactJS生态) Sentry 开发者贡献指南 - 后端服务(Python/Go/Rust/NodeJS) 什么是虫洞状态管理模式? 您可以逃脱的最小 ...
- CF508A Pasha and Pixels 题解
Content 有一个 \(n\times m\) 的矩阵,一开始全部格子被染成白色. 接下来有 \(k\) 个操作,每一个操作表示把一个格子染成黑色.问第一次出现 \(2\times 2\) 的全部 ...
- CF1438A Specific Tastes of Andre 题解
Content 如果一个序列的和能够被它的长度整除,我们称这个序列是不错的.如果一个序列的所有的非空子序列都是不错的,我们就称这个序列是完美的.现在有 \(t\) 组询问,每组询问给定一个整数 \(n ...
- element UI遇到的问题
1. 在el-dialog中获取el-table的ref为undefined 问题:虽然设置了el-dialog的visible为true,但此时Dom并没有更新,因此在Dom更新前取不到el-tab ...
- 钉钉提供的内网穿透之HTTP穿透
此方法无需自行提供服务器和域名 官方地址:https://developers.dingtalk.com/document/resourcedownload/http-intranet-penetra ...
- linux 设备文件的操作
文件:包含数据,具有属性,通过目录中的名字被标识, 可以从文件读数据,可以向文件写数据. 设备也支持文件的操作. 每个设备都被当作一个文件,具有文件名,i-节点号,文件所有者,权限位的集合,最新修改时 ...
- soui(1)之一个半透明的窗口
一个样式 xml源码 <SOUI name="mainWindow" title="@string/title" bigIcon="ICON_L ...
- 【LeetCode】1400. 构造 K 个回文字符串 Construct K Palindrome Strings
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 统计奇数字符出现次数 日期 题目地址:https:// ...
- 【LeetCode】800. Similar RGB Color 解题报告(C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 遍历 日期 题目地址:https://leetcode ...
- 【LeetCode】373. Find K Pairs with Smallest Sums 解题报告(Python)
[LeetCode]373. Find K Pairs with Smallest Sums 解题报告(Python) 标签: LeetCode 题目地址:https://leetcode.com/p ...