JavaServlet之http协议(二)-程序员宅基地

技术标签: JavaServlet  

HTTP/1.0与HTTP/1.1的区别
1.0一次请求,建立连接后,只能请求一次,请求完后,则断开连接
1.1一次请求,建立连接后,可以请求多次,每次请求完之后,不断开连接


一个请求行
7种请求方式,只需学习GET和POST
如果用户没有设置,默认都是GET,表单一般是POST,一般除了表单是POST外,其他的都是GET
<form action="/.../..." method="POST">
</form>


多个请求头


Accept:text/html,image/*
告诉服务器,客户机支持的数据类型为文本/网页,各种格式的图片,*/*表示浏览器支持各种数据类型。
Accept-Charset:ISO-8859-1
告诉服务器,客户机采用的编码


Accept-Encoding:gzip,compress
告诉服务器,客户机支持的压缩格式


Accept-Language:en-us,zh-cn
告诉服务器,客户机的语言环境(操作系统语言)


Host:
想访问的主机名


If-Modified-Since:Tue,11 Jul 2000 18:23:51 GMT
资源的缓存时间


Referer:http://www.it315.org/index.jsp
客户机告诉服务器,他是从那个资源(超链接)过来,用于防盗链


User-Agent:Mozilla/4.0(compatible;MSIE 5.5;Windows NT 5.0)
客户机的软件环境,哪个版本的浏览器,操作系统


Cookie
客户机可以向服务器带点数据


Connection:close/Kepp-Alive
保持客户机与服务器的连接


Date:Tue,11 Jul 2000 18:23:51 GMT
当前的日期时间
请求的主机和请求主机的环境信息


空行


实体内容








HTTP响应
一个状态行
HTTP/1.1 200 OK 状态码  状态说明
状态码表示服务器对请求的处理结果,三位十进制数,分为5类
302:你请求我,我叫你去找别人(重定向)location头指定你去找谁
307、304:和缓存有关的,叫客户机直接拿缓存资源。
403:访问权限不够
404:访问资源不存在
500:服务器端出问题


多个响应头
描述服务器的基本信息,根据这些信息通知客户机如何处理这些数据
客户端如何处理是根据服务器带来的响应信息
从而控制浏览器的行为
Server:Microsolt-IIS/5.0
告诉浏览器服务器的类型


Location:http://www.sina.com.cn/index.jsp
这个头配合302状态码,实现重定向
请求重定向:浏览器就请求两次了,登录界面


response.setStatus(302);
response.setHeader("location","/.../.../index.html");


Content-Encoding/Accept-Encoding;gzip
响应压缩         浏览器支持压缩格式
String str = "待压缩数据";
ByteArrayOutputStream bout = new ByteArrayOutputStream();
GzipOutputStream gout = new GzipOutputStream(bout);//包装流一般会有缓冲
gout.write(data.getBytes());//数据不满,不会将数据传给底层流。
gout.flush();
gout.close();
byte gzip[] = bout.toByteArray();


response.setHeader("Content-Encoding","gzip");
response.setHeader("Content-Length",gzip.length);
response.getOutputStream().write(gzip);




Content-Length:80
告诉浏览器会送数据的长度


Content-type
告诉浏览器会送数据的类型




response.setHeader("content-type","image/bmp");
getServletContent().getResourceAsStream("/1.bmp");
int len = 0;
byte buffer[] = new byte[1024];
OutputStream out = response.getOutputStream();


Last-Modified:服务器告诉浏览器当前资源缓存时间
Refresh:服务器告诉浏览器隔多久定时刷新一下
response.setHeader("refresh","3;http://www.sina.com.cn");


Content-disposition:告诉浏览器以下载方式打开数据
response.setHeader("content-disposition","attachment;filename=3.jpg";


Transfer_Encoding:chunked:告诉浏览器数据是以快传送的
ETag:缓存相关的头 服务器根据每个web应用给个串做标识符
如果服务器web应用有更动,ETag头的标识符会发生改变,
不一致,服务器则给新的,否则浏览器读取缓存,做到实时更新。
Expires:告诉浏览器把会送的资源缓存多长时间,-1或0则不缓存。
Cache-control:no-cache
Pragna:no-cache
控制浏览器不要缓存数据,股票肯定不能要缓存


Connection:close、Keep-Alive


Date:日期时间


Range:断点下载。
Range:bytes=1000-2000
传输范围从1000到2000字节
Range:bytes=1000-
传输web资源中第1000个字节以后的所有内容
Range:bytes=1000
传输最后1000个字节


Accept-Ranges:这个字段说明web服务器是否支持Range,支持,则返回
Accept-Ranges:bytes,如果不支持,则返回Accept-Ranges:none
Content-Range:指定了返回的web资源的字节范围,这个字段值的格式是:
例子:Content-Range:1000-3000/5000(总资源5000,会送的是3000-5000)


public class RangeDemo{
public static void main(String[] args){
URL url = new URL("http://localhost:8080/ServletDemo/a.txt");
HttpURLConnection conn = url.openConnection();
conn.setRequestProperty("Range","bytes=5-");
InputStream in = conn.getInputStream();
int len = 0;
byte[] buffer = new byte[1024];
FileOutputStream out = new FileOutputStream("c:\\a.txt",true);
while((len=in.read(buffer))!=-1){
out.write(buffer,0,len);
}
in.close();
out.flush();
out.close();
conn.close();
}
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/QQ1130141391/article/details/12523773

智能推荐

Python可视化matplotlib&seborn14-普通热力图heatmap_python matplotlib 热力图浅色-程序员宅基地

文章浏览阅读2.1k次,点赞2次,收藏21次。详细介绍python seaborn绘制热图。_python matplotlib 热力图浅色

最好的产品经理社区或者讨论圈有哪几个?_软件产品经理交流社区-程序员宅基地

文章浏览阅读1.8k次。本文将从社区、公众号(产品分析、深度互联网评论)、大佬博客、科技媒体、豆瓣书单等多个方面来阐述目前国内产品经理最好的一些讨论圈和内容,欢迎收藏~产品社区人人都是产品经理官网: http://www.woshipm.com“人人都是产品经理”应该是产品经理日常逛得最多的垂直社区,它里面的内容也主要以产品和运营为主,很多知名的产品经理KOL都会在上面发布文章。职景的学员也经常会把自己的产品分析报告上传发布到“人人都是产品经理”上。这中间也有一些有趣的事,比如两个人上传同一篇文章,只是因为排版格式的_软件产品经理交流社区

西门子PLC与IFIX软件以太网通讯_ifix与西门子plc连接-程序员宅基地

文章浏览阅读4.9k次,点赞2次,收藏16次。摘要IFX组态监控软件与西门子S7-200、S7-300系列PLC通讯,通常采用以太网通讯方式,IFIX软件中,采用S7A驱动的S7TCP/IP的通讯方式。西门子PLC采用第三方工业通讯桥接器实现以太网通讯。方案实施介绍本文以S7 TCP驱动(S7A)连接1台S7300,1台S7200为例:一、配置以太网通讯桥接器的参数用西门子S7TCP驱动来通讯,需要注意参数“S7TCP目标PLC地址”,需要填入PLC的站地址。例:S7-300,IP地址:192...._ifix与西门子plc连接

linux jstack 分析,使用top和jstack分析高CPU问题-程序员宅基地

文章浏览阅读431次。通常我们所说的 CPU 使用率过高,这里面其实隐含着一个用来比较高与低的基准值,比如 JVM 在峰值负载下的平均 CPU 利用率为 40%,如果 CPU 使用率飙到 80% 就可以被认为是不正常的。典型的 JVM 进程包含多个 Java 线程,其中一些在等待工作,另一些则正在执行任务。在单个 Java 程序的情况下,线程数可以非常低,而对于处理大量并发事务的互联网后台来说,线程数可能会比较高。对于..._对于 cpu 的问题,最重要的是要找到是哪些线程在消耗 cpu,通过线程栈定位到问题代

TypeScript手册翻译系列1-基础类型-程序员宅基地

文章浏览阅读111次。为什么80%的码农都做不了架构师?>>> ..._typescript 文档翻译

基于Jenkins的DevOps流水线实践教程|2020全新制作|端到端研发效能提升-程序员宅基地

文章浏览阅读319次。讲师介绍课程寄语我认为Jenkins是对我这些年运维经验的总结,起初我们运维同学都是编写脚本完成一些自动化的操作。而有了Jenkins我们可以将我们的运维经验与Jenkins设计理念融合..._基于jenkins的devops工程实践

随便推点

window下编译lua源码,编译lua的库文件,编译lua解释器,编译lua编译器_lua库和源码一起编译-程序员宅基地

文章浏览阅读448次。网上有很多博客讲如何在windows下编译lua源文件。两上大概是有两种方案:一种是用VS来编译,一种是自己写批处理文件,直接编译。附上以上两种方法的博客:借助VS开发在src文件夹下写批处理_lua库和源码一起编译

国内外优秀的计算机视觉团队汇总_知乎 大连理工大学李培华-程序员宅基地

文章浏览阅读2.1k次。本帖还在更新中,国内外优秀的计算机视觉团队有很多,我这里只是列举了自己从知乎、CSDN等网站上收集到的,排名不分先后,如有遗漏,还请谅解。同时欢迎小伙伴回帖补充,我会更新到本帖,谢谢~感谢极市平台微信公众号的粉丝Alan、Andy、陈、蓝色格调、亚辉、邵帅、城邑、SuperMAN和知乎好友:Shihua Huang的补充贡献最后更新于2020/7/22,已累计更新 10次国内高校研究团队北京清华大学:龙明盛,黄高,艾海舟,张长水(Big eyes laboratory 大眼睛实验室),._知乎 大连理工大学李培华

IntelliJ IDEA 无法预览 Markdown 文件的解决思路_idea markdown预览-程序员宅基地

文章浏览阅读1.4w次,点赞8次,收藏2次。文章目录一、问题描述二、解决思路一、问题描述  在项目开发中,一般情况都需要写一个 readme.md 来介绍项目的整体情况。但是有些同事的 IntelliJ IDEA 确无法显示 Markdown 的文件内容预览,无疑为团队开发交流形成了阻碍。二、解决思路确认 IntelliJ IDEA 是否关联了 .md 文件设置面板 Editor File Types Markdown 查看是否以及注册了 .markdown 或者 .md 的文件格式,如果没有请加上查看 Mark_idea markdown预览

IDL学习——处理自带经纬度文件的遥感影像,以哨兵5P数据为例_envi_glt_doit-程序员宅基地

文章浏览阅读2.7k次,点赞7次,收藏31次。@TOC欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计 ,将会带来全新的写作体验;在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;增_envi_glt_doit

MySQL date_format()日期格式_date_format可以使用的日期格式-程序员宅基地

文章浏览阅读2k次。DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据。DATE_FORMAT(date,format) format参数的格式有%a 缩写星期名%b 缩写月名%c 月,数值%D 带有英文前缀的月中的天%d 月的天,数值(00-31)%e 月的天,数值(0-31)%f 微秒%H 小时 (00-23)%h 小时 (01-12)%I 小时 (01-12)%i 分..._date_format可以使用的日期格式

shell中条件判断if中的-a到-z的意思_shellif -z是什么-程序员宅基地

文章浏览阅读8.7k次。[-a file] 如果file存在则为真 [-b file] 如果file存在且是一个块特殊文件则为真 [-c file] 如果file存在且是一个字特殊文件则为真 [-d file] 如果file文件存在且是一个目录则为真 -d前的!是逻辑非 例如: if [ ! -d $lcd_path/$par_date ] 表示后面的那个目录不存在,则执行后面的then操作 [-e fil_shellif -z是什么