java深入探究04

1.Http协议

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

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

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

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

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

        c.输入请求内容

事先将服务器要搭起来

GET /day09/hello HTTP/1.1
Host: localhost:8080

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

    一:http协议内容

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

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)请求头

Accept: text/html,image/*      -- 浏览器接受的数据类型
Accept-Charset: ISO-8859-1     -- 浏览器接受的编码格式
Accept-Encoding: gzip,compress  --浏览器接受的数据压缩格式
Accept-Language: en-us,zh-       --浏览器接受的语言
Host: www.it315.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      -- 请求发出的时间

      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:   表示服务器的资源发送错误。(服务器内部错误)

响应Http
HTTP/1.1 200 OK                --响应行
Server: Apache-Coyote/1.1         --响应头(key-vaule)
Content-Length: 24 
Date: Fri, 30 Jan 2015 01:54:57 GMT
                                   --一个空行
this is hello servlet!!!                  --实体内容
响应头
Location: http://www.it315.org/index.jsp -表示重定向的地址,该头和302的状态码一起使用。 Server:apache tomcat ---表示服务器的类型 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 --表示定时刷新 Content-Disposition: attachment; filename=aaa.zip --表示告诉浏览器以下载方式打开资源(下载文件时用到) 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:保存连接

      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。

POST http://www.xx.com/myproject/service1  
Host: 192.168.0.201:8694  
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW  
Cache-Control: no-cache  
Postman-Token: c3d85a6c-9849-7e3e-5c89-5b994b335b1d  
  
----WebKitFormBoundary7MA4YWxkTrZu0gW  
Content-Disposition: form-data; name="name1"  
  
value1  
----WebKitFormBoundary7MA4YWxkTrZu0gW  
Content-Disposition: form-data; name="name2"  
  
value2  
----WebKitFormBoundary7MA4YWxkTrZu0gW  
Content-Disposition: form-data; name="file1"; filename="94b5b232gw1ewlx3p595wg20ak0574qq.gif"  
Content-Type: image/gif  
  
  
----WebKitFormBoundary7MA4YWxkTrZu0gW  
Content-Disposition: form-data; name="file2"; filename="1443175219259.jpg"  
Content-Type: image/jpeg  
  
  
----WebKitFormBoundary7MA4YWxkTrZu0gW  
View Code

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

数据组织格式

POST http://www.xx.com/myproject/service HTTP/1.1  
Host: 192.168.0.201:8694  
Content-Type: application/json  
Cache-Control: no-cache  
Postman-Token: f5f6240c-08d3-8695-9473-607038f71eaa  
  
name11=file1&name2=value2  
View Code

HTTP Content-type对照表

 

原文地址:https://www.cnblogs.com/xiaoping1993/p/day4.html