Http协议

什么是HTTP协议 ?

  • 客户端连上web服务器后,若想获得web服务器中的某个web资源,需遵守一定的通讯格式,HTTP协议用于定义客户端与web服务器通迅的格式
  • 使用telnet程序连上web服务器,并使用HTTP协议获取某个页面,以快速了解 HTTP协议的作用( Windows_cmd )
  • 利用一些浏览器的插件可以查看Http协议的详细内容( 如IE的HttpWatch,火狐的firebug,Ghrome自带工具 )

HTTP协议简介

  • HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程。
  • HTTP协议是学习JavaWEB开发的基石,不深入了解HTTP协议,就不能说掌握了WEB开发,更无法管理和维护一些复杂的WEB站点。
  • HTTP协议就是: 浏览器与服务器之间的数据传输格式规范

查看Http协议的工具

  1. 火狐的firebug : 右键firbug -> 网络
  2. Ghrome自带工具 : 右键审查元素 -> network
  3. telnet工具 :
  • 开启telnet程序: 控制面板 -> 程序和功能 -> 打开或关闭windows功能 -> 勾上开启telnet客户端 ->确定
  • telnet如何使用: telnet 主机地址 端口 -> telnet localhost 8080 (就可以看见响应信息)
    • control + ] + 回车(可以看到回显)

HTTP请求

  • 请求行 : GET /day09/hello HTTP/1.1
    • 请求方式 : POSTGETHEADOPTIONSDELETETRACEPUT
    • 请求路径( 请求的资源名称 ) : 即URI
      • URL(统一资源定位符) : 仅可以定位互联网资源
      • URI(统一资源标记符) : 可以标记任何资源, 可以是本地资源文件, 局域网资源, 互联网资源(URI>URL)
    • HTTP协议版本 : HTTP/1.0、HTTP/1.1
    • HTTP1.0 与 1.1区别 :
      1. HTTP1.0协议中, 客户端与web服务器建立连接后, 只能获得一个web资源
      2. HTTP1.1协议中, 允许客户端与web服务器建立连接后, 在一个连接上获取多个web资源
  • 请求头 :
    • Accept: text/html,image/* -- 浏览器接受的数据类型
    • Accept-Charset: ISO-8859-1 -- 浏览器接受的编码格式
    • Accept-Encoding: gzip,compress --浏览器接受的数据压缩格式
    • Accept-Language: en-us,zh- --浏览器接受的语言
    • Host: www.xxx.org:80 --(必须的)当前请求访问的目标地址(主机:端口)
    • 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:name=eric -- 浏览器保存的cookie信息
    • Connection: close/Keep-Alive -- 浏览器跟服务器连接状态: close: 连接关闭; keep-alive:保存连接
    • Date: Tue, 11 Jul 2000 18:23:51 GMT -- 请求发出的时间- 实体内容 :
  • Java当中与HTTP请求有关的类 : HttpServletRequest对象(核心的API)
    • 请求行:
      1. request.getMethod(); 请求方式
      2. request.getRequetURI() / request.getRequetURL() 请求资源
      3. request.getProtocol() 请求http协议版本
    • 请求头:
      1. request.getHeader("名称") 根据请求头获取请求值
      2. request.getHeaderNames() 获取所有的请求头名称
    • 实体内容:request.getInputStream() 获取实体内容数据

请求参数的获取与编发问题

  • 传递的请求参数如何获取
    • GET方式 : 参数放在URI后面
    • POST方式 : 参数放在实体内容中
  • 获取GET方式参数 : request.getQueryString();
  • 获取POST方式参数 : request.getInputStream();
  • 问题:但是以上两种不通用,而且获取到的参数还需要进一步地解析。所以可以使用统一方便的获取参数的方式:
    • 核心的API:
      • request.getParameter("参数名"); : 根据参数名获取参数值(注意,只能获取一个值的参数)
      • request.getParameterValue("参数名“); : 根据参数名获取参数值(可以获取多个值的参数)
      • request.getParameterNames(); : 获取所有参数名称列表
        String name = req.getParameter("name");
        String pwd = req.getParameter("password");
        System.out.println(name + ":" + pwd);
        Enumeration<String> enums = req.getParameterNames();
        while(enums.hasMoreElements()){
            String paramName = enums.nextElement();
            String paramValue = req.getParameter(paramName);
            System.out.println(paramName + ":" + paramValue);
        }

请求参数编码问题

  • 修改POST方式参数编码:request.setCharacterEncoding("utf-8");
  • 修改GET方式参数编码:手动解码:String name = new String(name.getBytes("iso-8859-1"),"utf-8");

HTTP响应

  • 响应行
    • 状态码 : 服务器处理请求的结果(状态)
      • 常见的状态:
        • 200 : 表示请求处理完成并完美返回
        • 302 : 表示请求需要进一步细化
        • 404 : 表示客户访问的资源找不到
        • 500 : 表示服务器的资源发送错误(服务器内部错误)
    • 协议版本 :
    • 状态描述 :
  • 响应头
    • Location - 表示重定向的地址,该头和302的状态码一起使用。
    • Server - 表示服务器的类型
    • Content-Encoding - 表示服务器发送给浏览器的数据压缩类型
    • Content-Length - 表示服务器发送给浏览器的数据长度
    • Content-Language - 表示服务器支持的语言
    • Content-Type - 表示服务器发送给浏览器的数据类型及内容编码
    • Last-Modified - 表示服务器资源的最后修改时间
    • Refresh: 1;url=http://www.baidu.com --表示定时刷新
    • Content-Disposition - 表示告诉浏览器以下载方式打开资源(下载文件时用到)
    • Transfer-Encoding: chunked
    • Set-Cookie:SS=Q0=5Lb_nQ; path=/search -- 表示服务器发送给浏览器的cookie信息 (会话管理用到)
    • 表示通知浏览器不进行缓存
      • Expires: -1
      • Cache-Control: no-cache
      • Pragma: no-cache
    • Connection: close/Keep-Alive : 表示服务器和浏览器的连接状态。close:关闭连接 keep-alive:保存连接
  • Java当中与响应有关的类 : HttpServletResponse对象(核心的API)
    • HttpServletResponse对象修改响应信息:
      • 响应行 : response.setStatus() 设置状态码
      • 响应头 : response.setHeader("name","value") 设置响应头
      • 实体内容 :
        • response.getWriter().writer(); : 发送字符实体内容
        • response.getOutputStream().writer(); : 发送字节实体内容

请求重定向 (Location)

定时刷新 (refresh)

content-Type作用

总结

  • http协议: 浏览器和服务器之间数据传输的格式规范

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

推荐阅读更多精彩内容

  • 一、概念(载录于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434阅读 8,337评论 6 152
  • Http协议详解 标签(空格分隔): Linux 声明:本片文章非原创,内容来源于博客园作者MIN飞翔的HTTP协...
    Sivin阅读 5,210评论 3 82
  • HTTP概述 超文本传输协议(HTTP,HyperText Transfer Protocol) 是互联网上应用最...
    曹渊说创业阅读 3,843评论 2 61
  • 前言:最近发现自己在网络相关这一块基础很是欠缺,所以准备花时间了解一下,本文主要是讲http协议的一些基础,和一些...
    justCode_阅读 2,093评论 0 23
  • 本文整理自MIN飞翔博客 [1] 1. 概念 协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或...
    HoyaWhite阅读 2,659评论 2 20