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协议的更多相关文章

  1. Web开发之Tomcat&Servlet

    <!doctype html>01 - JavaEE - Tomcat&Servlet figure:first-child { margin-top: -20px; } #wri ...

  2. Vim下的Web开发之html,CSS,javascript插件

    Vim下的Web开发之html,CSS,javascript插件   HTML 下载HTML.zip 解压HTML.zip,然后将里面的所有文件copy到C:\Program Files\Vim\vi ...

  3. 移动web开发之rem适配布局

    移动web开发之rem适配布局 方案: 页面布局文字能否随着屏幕大小变化而变化 流式布局和flex布局主要针对于宽度布局,那高度如何布局? 怎样让屏幕发生变化的时候元素高度和宽度等比例缩放? 1. r ...

  4. android开发之http协议

    http协议学习系列 1. 基础概念篇 1.1 介绍 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会(World Wide Web C ...

  5. Web开发之Cookie and Session

    会话 什么是会话? 简单说:用户开一个浏览器,点击多个超链接,访问服务器的多个web资源,然后关闭浏览器,整个过程就称之为一个会话. 会话过程要解决什么问题 每个用户在使用浏览器与服务器进行会话的过程 ...

  6. Web开发之RSET API

    REST介绍 如果要说什么是REST的话,那最好先从Web(万维网)说起. 什么是Web呢?读者可以查看维基百科的词条(http://zh.wikipedia.org/zh-cn/Web),具体的我就 ...

  7. .NET Web开发之.NET MVC框架

    摘要:MVC是一种架构设计模式,该模式主要应用于图形化用户界面(GUI)应用程序.那么什么是MVC?MVC由三部分组成:Model(模型).View(视图)及Controller(控制器). MVC概 ...

  8. web开发之Servlet 一

    因为最近在研究公司一套新的框架,发现这套框架的底层是对Struts2,Spring 封装后的WEB应用框架,而我发现如果仅仅是利用这个框架开发,确实很容易快速上手,做业务来说是没有问题的,但我觉得如果 ...

  9. Web开发之404小结

    404算是Web工程里最常见的错误代号了.今天做一个小结: 场景:[Tomcat运行正常,但无法访问自己建的项目:404] 结果:在URL拼写正确的情况下,无法访问目标工程任何页面 信息:[404]: ...

随机推荐

  1. 利用模块加载回调函数修改PE导入表实现注入

    最近整理PE文件相关代码的时候,想到如果能在PE刚刚读进内存的时候再去修改内存PE镜像,那不是比直接对PE文件进行操作隐秘多了么? PE文件在运行时会根据导入表来进行dll库的"动态链接&q ...

  2. 突破类型限制的“数据透视图”(Excel技巧集团)

    Excel中,图表一共16个大类,但是数据透视图却被"阉"了好几个-- 这也就是说,数据透视图无法与上图中高亮标出的图表类型并存了? 确实如此,但并不绝对,因为我们可以在" ...

  3. 阿里云ilogtail收集自建Kubernetes容器日志文件

    背景 1,k8s属于自建. 2,需要收集应用服务容器里面指定目录的日志. 3,计划收集所有私有云php和nginx日志. 4,日志格式化处理. 思考 1,一个私有云一个Project,还是统一放入一个 ...

  4. python 银行管理系统

    这是一个使用python连接mysql的例子 涉及到类的使用 import pymysql import function as f def mysql(): db=pymysql.connect(h ...

  5. JS设置网站所有字体变为繁体字

    引入chinese.js var zh_default='n';var zh_choose='t';var zh_expires=7;var zh_class='zh_click';var zh_st ...

  6. DevOps实战(Docker+Jenkins+Git)

    基于Docker+Jenkins+Git的CI/CD实战 与上一篇随笔:基于 Jenkins+Docker+Git 的CI流程初探 有所不同,该内容更偏向于实际业务的基础需求. 有几点需要注意: 该实 ...

  7. c(++)可变参数之格式化字符串

    0.序言 使用printf函数,其参数就是可变参数.下面将使用 C语言  的库函数实现可变参数的函数 . 用途(欢迎补充): A.记录日志,可能需要将变量格式化输出到日志文件. B.格式化字符串,显示 ...

  8. 【LeetCode】893. Groups of Special-Equivalent Strings 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  9. 【剑指Offer】字符流中第一个不重复的字符 解题报告(Python)

    [剑指Offer]字符流中第一个不重复的字符 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interv ...

  10. OverFeat:Integrated Recognition, Localization and Detection using Convolutional Networks

    目录 概 主要内容 Sermanet P., Eigen D., Zhang X., Mathieu M., Fergus R., LeCun Y. OverFeat:integrated recog ...