Http协议

基础概念

  1. 什么是Http协议
    客户端连上web服务器后,若想获得web服务器中的某个web资源,需遵守一定的通讯格式,HTTP协议用于定义客户端与web服务器通迅的格式。
    HTTP是HyperText Transfer Protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程。

  2. Http 1.0和http 1.1的区别
    在HTTP1.0协议中,客户端与web服务器建立连接后,只能获得一个web资源。
    HTTP1.1协议,允许客户端与web服务器建立连接后,在一个连接上获取多个web资源。

  3. Http请求
    客户端连上服务器后,向服务器请求某个web资源,称之为客户端向服务器发送了一个HTTP请求。一个完整的HTTP请求包括如下内容:

    • 请求行
    • 请求头
    • 请求的内容,如果没有,就是空白字符

其中的一些消息头和实体内容都是可选的,消息头和实体内容之间要用空行隔开。

GET(请求的方式) /books/java.html(请求的目标资源) HTTP/1.1(请求采用的协议和版本号)
Accept: */*(客户端能接收的资源类型)
Accept-Language: en-us(客户端接收的语言类型)
Connection: Keep-Alive(维护客户端和服务端的连接关系)
Host: localhost:8080(连接的目标主机和端口号)
Referer: http://localhost/links.asp(从来于哪里)
User-Agent: Mozilla/4.0(客户端版本号的名字)
Accept-Encoding: gzip, deflate(客户端能接收的压缩数据的类型)
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT(缓存时间)
Cookie(客户端暂存服务端的信息)
Date: Tue, 11 Jul 2000 18:23:51 GMT(客户端请求服务端的时间)

总结:想让浏览器有何种行为,服务端只能通过响应头的方式来设置

  1. Http响应
    一个HTTP响应代表服务器向客户端回送的数据,它包括:
    • 响应行
    • 响应头
    • 响应的内容,如果没有,就是空白字符

其中的一些消息头和实体内容都是可选的,消息头和实体内容之间要用空行隔开。

HTTP/1.1(响应采用的协议和版本号) 
Location: http://www.baidu.com(服务端需要客户端访问的页面路径)
Server:apache tomcat(服务端的Web服务端名)
Content-Encoding: gzip(服务端能够发送压缩编码类型)
Content-Length: 80(服务端发送的压缩数据的长度)
Content-Language: zh-cn(服务端发送的语言类型)
Content-Type: text/html; charset=GB2312(服务端发送的类型及采用的编码方式)
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT(服务端对该资源最后修改的时间)
Refresh: 1;url=http://www.it315.org(服务端要求客户端1秒钟后,刷新,然后访问指定的页面路径)
Content-Disposition: attachment; filename=aaa.zip(服务端要求客户端以下载文件的方式打开该文件)
Transfer-Encoding: chunked(分块传递数据到客户端) 
Set-Cookie:SS=Q0=5Lb_nQ; path=/search(服务端发送到客户端的暂存数据)
Expires: -1//3种(服务端禁止客户端缓存页面数据)
Cache-Control: no-cache(服务端禁止客户端缓存页面数据) 
Pragma: no-cache(服务端禁止客户端缓存页面数据)   
Connection: close(1.0)/(1.1)Keep-Alive(维护客户端和服务端的连接关系) 
Date: Tue, 11 Jul 2000 18:23:51 GMT(服务端响应客户端的时间)

* 状态码:
200(状态码) OK(描述信息)
302(客户端请求服务端,但服务端没有对应的资源,服务端要客户端再次请求找其它的服务端,即客户端二次请求,重定向)
307(客户端请求服务端,但服务端没有对应的资源,服务端自行再次请求找其它的服务端,即客户端一次请求,转发)
304(客户端请求服务端,此时客户端缓存中有,无需再从服务端下载新的内容,服务端叫客户端自行找缓存,优化)
500(客户端请求的资源,服务端存在,但在执行时出错)

想让服务器知道何种行为,浏览器只能通过请求头的方式来设置

  1. 通用消息头
    指既能用于请求,又能用于响应的一些消息头,比如
    Cache-Control: no-cache
    Pragma: no-cache
    Connection: close/Keep-Alive
    Date: Tue, 11 Jul 2000 18:23:51 GMT

  2. 常见的提交方式

    • GET
      特点:
      请求参数无论多少,都会根着URL后传递到服务端,以明文方式传递

      • GET方式传递有大小限制
      • GET方式传递信息不安全
    • POST
      特点:
      请求参数无论多少,都不会根着URL后传递到服务端,而是以参数形式在请求体中传递到服务端

      • POST方式传递无大小限制
      • POST方式传递信息相对安全

测试(Java)

  • 302重定向
    response.setStatus(302);
    response.setHeader( "Location", "/HttpDemo/index.jsp");

  • 响应头设置浏览器打开压缩数据

  1. 压缩的数据
    String data="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" ;
    //压缩前的数据长度
    System. out.println(data.length());
    压缩前的字节数组长度为88

  2. 压缩
    ByteArrayOutputStream bout = new ByteArrayOutputStream();
    GZIPOutputStream gout = new GZIPOutputStream(bout);
    gout.write(data.getBytes());
    gout.flush();
    gout.close();

     //取出压缩后的数据
     byte[] buf = bout.toByteArray();
     System. out.println(buf. length);
    

压缩之后的数组长度为24

  1. 通过设置响应头让浏览器解压数据
    //将压缩后的数据输出到浏览器
    response.setHeader( "content-encoding", "gzip" );
    response.setHeader( "content-length", buf. length+ "");
    //服务端以字节的方式输出
    response.getOutputStream().write(buf);
  • 设置响应头让浏览器打开图片
    response.setHeader("Content-Type", "image/jpeg");
    String imageName = request.getParameter( "imageName");
    String path = "E:\我的照片(肥嘟嘟说不能删)\" +imageName;
    InputStream is = new FileInputStream( new File(path));
    OutputStream os = response.getOutputStream();
    byte buf[] = new byte[1024];
    int len = 0;
    while((len = is.read(buf))>0){
    os.write(buf, 0, len);
    }
    is.close();
    os.close();

  • 设置响应头让浏览器下载图片
    // 通知浏览器下载图片
    response.setHeader( "Content-Disposition", "attachment; filename="+imageName);

  • 让浏览器在指定时间后访问指定url

     //让浏览器三秒后访问指定URL
      response.setHeader( "Refresh", "3;url=/HttpDemo/index.jsp");
    
  • 禁止浏览器缓存数据
    response.setHeader("Expires", "-1");
    response.setHeader( "Cache-Control", "no-cache");
    response.setHeader( "Pragma", "cache");

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容

  • 本文整理自MIN飞翔博客 [1] 1. 概念 协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或...
    HoyaWhite阅读 2,634评论 2 20
  • 一、概念(载录于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434阅读 8,328评论 6 152
  • 深入浅出HTTP协议(WEB开发和面试必备) 1.基础概念篇 a.简介 HTTP是Hyper Text Trans...
    半世韶华忆阑珊阅读 1,211评论 0 7
  • Http协议详解 标签(空格分隔): Linux 声明:本片文章非原创,内容来源于博客园作者MIN飞翔的HTTP协...
    Sivin阅读 5,201评论 3 82
  • 前言:最近发现自己在网络相关这一块基础很是欠缺,所以准备花时间了解一下,本文主要是讲http协议的一些基础,和一些...
    justCode_阅读 2,092评论 0 23