1.Http协议

    tcp/ip关注的是客户端服务器之间数据是否传输成功

    http协议:是在tcp/ip协议之间封装的一层协议关注的是传输格式是否规范

    注意:系统自带的telent工具(远程访问工具)可以查看http协议

        a.telnet ip地址 端口号      访问tomcat服务器

        b.ctrl+] 回车       可以查看回显

        c.输入请求内容

事先将服务器要搭起来

  1. GET /day09/hello HTTP/1.1
  2. Host: localhost:8080

        d.回车,可以查看服务器响应的内容

    一:http协议内容

  1. 请求(浏览器-》服务器)
  2. GET /day09/hello HTTP/1.1      --请求行
  3. Host: localhost:8080         --请求头(多个key-value对象)
  4. User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0
  5. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
  6. Accept-Language: zh-cn,en-us;q=0.8,zh;q=0.5,en;q=0.3
  7. Accept-Encoding: gzip, deflate
  8. Connection: keep-alive
                         --一个空行
    name=s&password=23           --(可选)实体内容
  1. 响应(服务器-》浏览器)
  2. HTTP/1.1 200 OK
  3. Server: Apache-Coyote/1.1
  4. Content-Length: 24
  5. Date: Fri, 30 Jan 2015 01:54:57 GMT
  6.  
  7. this is hello servlet!!!

      1)请求行

        GET /day09/hello HTTP/1.1

        协议版本

        http1.0:当前浏览器客户端与服务器端建立连接之后,只能发送一次请求,一次请求之后连接关闭。

        http1.1:当前浏览器客户端与服务器端建立连接之后,可以在一次连接中发送多次请求。(基本都使用1.1)

        请求资源

        URL:统一资源定位符。只能定位互联网资源,是URI的子集

        URI:统一资源标记符。可以标记本地资源也可以互联网资源

        请求方式

        常见的请求方法:GET,POST,HEAD,TRACE,PUT,CONNENT,DELETE

        常用的请求方式:GET和POST

        GET和POST区别

         a)地址栏(URI)会跟上参数数据。以?开头,多个参数之间以&分割。

          b)GET提交参数有限制,不超过1kb

         c)GET方式不适合提交敏感密码

         d)浏览器直接访问请求默认方式是GET方式

      2)请求头

  1. Accept: text/html,image/* -- 浏览器接受的数据类型
  2. Accept-Charset: ISO-8859-1 -- 浏览器接受的编码格式
  3. Accept-Encoding: gzip,compress --浏览器接受的数据压缩格式
  4. Accept-Language: en-us,zh- --浏览器接受的语言
  5. Host: www.it315.org:80 --(必须的)当前请求访问的目标地址(主机:端口)
  6. If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT --浏览器最后的缓存时间
  7. Referer: http://www.it315.org/index.jsp -- 当前请求来自于哪里
  8. User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) --浏览器类型
  9. Cookie:name=eric -- 浏览器保存的cookie信息
  10. Connection: close/Keep-Alive -- 浏览器跟服务器连接状态。close: 连接关闭 keep-alive:保存连接。
  11. Date: Tue, 11 Jul 2000 18:23:51 GMT -- 请求发出的时间

      3)实体内容

        只有POST提交的参数会放在实体内容中

    二:HttpServletRequest对象

      HttpServletRequest对象作用是用于获取请求数据。

      1)请求行:

        request.getMethod();   请求方式

        request.getRequetURI()   / request.getRequetURL()   请求资源

        request.getProtocol()   请求http协议版本

      2)请求头:

        request.getHeader("名称")   根据请求头获取请求值

        request.getHeaderNames()    获取所有的请求头名称

      3)实体内容:

        request.getInputStream()   获取实体内容数据

    三:HttpServletResponse对象

常见的响应头:

状态码:(服务器处理请求的结果)

      200 :  表示请求处理完成并完美返回

      302:   表示请求需要进一步细化。
      404:   表示客户访问的资源找不到。

      500:   表示服务器的资源发送错误。(服务器内部错误)

  1. 响应Http
  2. HTTP/1.1 OK --响应行
  3. Server: Apache-Coyote/1.1 --响应头(key-vaule
  4. Content-Length:
  5. Date: Fri, Jan :: GMT
  6. --一个空行
  7. this is hello servlet!!! --实体内容
  1. 响应头
    Location: http://www.it315.org/index.jsp -表示重定向的地址,该头和302的状态码一起使用。
  2. Server:apache tomcat ---表示服务器的类型
  3. Content-Encoding: gzip -- 表示服务器发送给浏览器的数据压缩类型
  4. Content-Length: --表示服务器发送给浏览器的数据长度
  5. Content-Language: zh-cn --表示服务器支持的语言
  6. Content-Type: text/html; charset=GB2312 --表示服务器发送给浏览器的数据类型及内容编码
  7. Last-Modified: Tue, Jul :: GMT --表示服务器资源的最后修改时间
  8. Refresh: ;url=http://www.it315.org --表示定时刷新
  9. Content-Disposition: attachment; filename=aaa.zip --表示告诉浏览器以下载方式打开资源(下载文件时用到)
  10. Transfer-Encoding: chunked
  11. Set-Cookie:SS=Q0=5Lb_nQ; path=/search --表示服务器发送给浏览器的cookie信息(会话管理用到)
  12. Expires: - --表示通知浏览器不进行缓存
  13. Cache-Control: no-cache
  14. Pragma: no-cache
  15. Connection: close/Keep-Alive --表示服务器和浏览器的连接状态。close:关闭连接 keep-alive:保存连接

      HttpServletResponse对象修改响应信息:

      响应行:response.setStatus()  设置状态码

      响应头:response.setHeader("name","value")  设置响应头

      实体内容:

        response.getWriter().writer();   发送字符实体内容

        response.getOutputStream().writer()  发送字节实体内容  

  

  三:multipart/form-data与application/octet-stream的区别、application/x-www-form-urlencoded

    

multipart/form-data:

1、既可以提交普通键值对,也可以提交(多个)文件键值对。

2、HTTP规范中的Content-Type不包含此类型,只能用在POST提交方式下,属于http客户端(浏览器、java httpclient)的扩展

3、通常在浏览器表单中,或者http客户端(java httpclient)中使用。

页面中,form的enctype是multipart/form-data,提交时,content-type也是multipart/form-data。

  1. POST http://www.xx.com/myproject/service1
  2. Host: 192.168.0.201:
  3. Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
  4. Cache-Control: no-cache
  5. Postman-Token: c3d85a6c--7e3e-5c89-5b994b335b1d
  6.  
  7. ----WebKitFormBoundary7MA4YWxkTrZu0gW
  8. Content-Disposition: form-data; name="name1"
  9.  
  10. value1
  11. ----WebKitFormBoundary7MA4YWxkTrZu0gW
  12. Content-Disposition: form-data; name="name2"
  13.  
  14. value2
  15. ----WebKitFormBoundary7MA4YWxkTrZu0gW
  16. Content-Disposition: form-data; name="file1"; filename="94b5b232gw1ewlx3p595wg20ak0574qq.gif"
  17. Content-Type: image/gif
  18.  
  19. ----WebKitFormBoundary7MA4YWxkTrZu0gW
  20. Content-Disposition: form-data; name="file2"; filename="1443175219259.jpg"
  21. Content-Type: image/jpeg
  22.  
  23. ----WebKitFormBoundary7MA4YWxkTrZu0gW

application/octet-stream

1、只能提交二进制,而且只能提交一个二进制,如果提交文件的话,只能提交一个文件,后台接收参数只能有一个,而且只能是流(或者字节数组)

2、属于HTTP规范中Content-Type的一种

3、很少使用

application/x-www-form-urlencoded

1、不属于http content-type规范,通常用于浏览器表单提交,数据组织格式:name1=value1&name2=value2,post时会放入http body,get时,显示在在地址栏。

2、所有键与值,都会被urlencoded,请查看urlencoder

数据组织格式

  1. POST http://www.xx.com/myproject/service HTTP/1.1
  2. Host: 192.168.0.201:
  3. Content-Type: application/json
  4. Cache-Control: no-cache
  5. Postman-Token: f5f6240c-08d3---607038f71eaa
  6.  
  7. name11=file1&name2=value2

HTTP Content-type对照表

java深入探究04的更多相关文章

  1. Java 集合系列 04 LinkedList详细介绍(源码解析)和使用示例

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  2. JAVA自学笔记04

    JAVA自学笔记04 1.switch语句 1)格式:switch(表达式){ case 值1: 语句体1; break; case 值2: 语句体2; break; - default: 语句体n+ ...

  3. Java泛型解析(04):约束和局限性

    Java泛型解析(04):约束和局限性           前两节.认识和学习了泛型的限定以及通配符.刚開始学习的人可能须要一些时间去体会到泛型程序设计的优点和力量,特别是想成为库程序猿的同学就须要下 ...

  4. 057 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 04 案例:求整型数组的数组元素的元素值累加和

    057 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 04 案例:求整型数组的数组元素的元素值累加和 本文知识点:求整型数组的数组元素的元素值累加和 案例:求整型数 ...

  5. 038 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 05 案例演示switch结构-星期的表示案例以及总结

    038 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 05 案例演示switch结构-星期的表示案例以及总结 本文知识点:案例演示switch结构并对sw ...

  6. 037 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 04 switch结构

    037 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 04 switch结构 本文知识点:Java中的switch结构 选择结构分类 选择结构只有如下2种 ...

  7. 036 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 03 嵌套if结构

    036 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 03 嵌套if结构 本文知识点:Java中的嵌套if结构 什么是嵌套if结构? 概念: 嵌套if结构 ...

  8. 035 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 02 多重if结构

    035 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 02 多重if结构 本文知识点:Java中的多重if结构 选择结构回顾 if选择结构 注意: 1.条 ...

  9. 034 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 01 流程控制概述

    034 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 01 流程控制概述 本文知识点:Java中的流程控制相关概念的认识 三大流程控制语句结构的简介 顺序 ...

随机推荐

  1. python抓取51CTO博客的推荐博客的全部博文,对标题分词存入mongodb中

    原文地址: python抓取51CTO博客的推荐博客的全部博文,对标题分词存入mongodb中

  2. js 正则表达式 取反

    http://www.w3school.com.cn/jsref/jsref_obj_regexp.asp 以匹配中文为例 const test_value = '李钊鸿' if (/[^\u4e00 ...

  3. 二分Kmeans的java实现

    刚刚研究了Kmeans.Kmeans是一种十分简单的聚类算法.可是他十分依赖于用户最初给定的k值.它无法发现随意形状和大小的簇.最适合于发现球状簇.他的时间复杂度为O(tkn).kmeans算法有两个 ...

  4. oracle中sql执行性能关注点

    繁琐复杂的执行计划.可能迷了开发人员的眼.导致一条性感又傻X的SQL 在服务器上跑得特欢乐     有介于此.重点抓住几个部分.至于其他的嘛.当然是.非礼勿视咯..          ㈠ 返回行的数量 ...

  5. iOS 渐变色实现,渐变色圆环,圆环进度条

    CAGradientLayer图层可以通过设置mask来给视图添加渐变效果 CAGradientLayer主要需要设置一下几个参数 colors:传入需要渐变的颜色 例如 self.gradientL ...

  6. hibernate单向多对一映射

    n21: 1.new 两个实体类,一个代表"多"的一端,一个代表"一"的一端. Customer类: public class Customer { priva ...

  7. 使用虚拟环境 virtualenv

    1.安装 $ sudo apt-get install python-virtualenv 2.重命名,一般虚拟环境会被命名为venv $ virtualenv   venv 3. 激活 $ sour ...

  8. Java多线程中的竞争条件、锁以及同步的概念

    竞争条件 1.竞争条件: 在java多线程中,当两个或以上的线程对同一个数据进行操作的时候,可能会产生“竞争条件”的现象.这种现象产生的根本原因是因为多个线程在对同一个数据进行操作,此时对该数据的操作 ...

  9. 原创:解决 python中moviepy调用ffmpeg的错误:subprocess, PermissionError: [WinError 5] 拒绝访问

    近期运行一个python程序用到了moviepy.editor.VideoFileClip() moviepy基于ffmpeg,但是并不是pip安装的ffmepg, 执行 import imageio ...

  10. 创建一个动态Web项目:

    开始你的Eclipse,然后进入“文件”>“新建”>“动态Web项目,然后输入项目名称为HelloWorldStruts2和设置其他的选项,在下面的屏幕: 选择在屏幕上的所有默认选项,最后 ...