http协议

来源:互联网 发布:js 设置元素的属性值 编辑:程序博客网 时间:2024/06/05 16:52

一、课程回顾

  web入门

    (1)web服务软件作用:把本地资源共享给外部访问

         (2)tomcat服务器基本操作

              启动:%tomcat%/bin/startup.bat

                    关闭:%tomcat%/bin/shutdown.bat

                    访问tomcat主页:

                      http://localhost:8080

         (3)web应用目录结构

      |--WebRoot  根目录

          |--静态资源(html+css+javascript+images+xml) 可以直接被浏览器访问到的

          |--WEB-INF

               |--classes    存放class字节码文件

               |--lib        存放jar包文件

               Web.xml     web应用的配置文件,配置servlet

(4)Servlet技术:用java语言开发动态资源的技术

    开发一个Servlet程序的步骤:

1)  创建一个java类,继承HttpServlet类

2)  重写HttpServlet类的doGet方法

3)  把写好的servlet程序交给tomcat服务器运行!!!

A、 把编译好的servlet的class文件拷贝到tomcat的一个web应用中。(web应用的WEB-INF/classes目录下)

B、 在当前web应用的web.xml文件中配置servlet

<!—servlet配置-->

<servlet>

 <servlet-name>HelloServlet</servlet-name>

  <servlet-class>gz.itcast.HelloServlet</servlet-class>

</servlet>

 

<!—servlet的映射配置-->

<servlet-mapping>

 <servlet-name>HelloServlet</servlet-name>

  <url-pattern>/hello</url-pattern>

</servlet-mapping>

4)  访问servlet

http://localhost:8080/myweb/hello

二、http协议入门

  2.1什么是http协议

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

/*

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

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

*/

  2.2查看http协议的工具

(1)使用火狐的firebug插件,右键->firebug->网络

(2)使用谷歌的“审查元素”

(3)使用系统自带的telnet工具(远程访问工具)

    A、telnet localhost8080      访问tomcat服务器

    B、ctrl+] 回车              可以看到回显
        C、输入请求内容

      GET /day08_web/hello HTTP/1.1

      Host:localhost:8080

D、 回车,即可查看到服务器相应信息

  2.3http协议内容

请求(浏览器--à服务器)

GET /day08_web/hello HTTP/1.1

Host: localhost:8080

User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:54.0) Gecko/20100101Firefox/54.0

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3

Accept-Encoding: gzip, deflate

Connection: keep-alive

Upgrade-Insecure-Requests: 1

响应(服务器--à浏览器)

HTTP/1.1 200

Content-Type: text/html;charset=utf-8

Content-Length: 100

Date: Fri, 14 Jul 2017 11:45:35 GMT

三、http请求

GET /day08_web/hello HTTP/1.1   请求行

Host: localhost:8080     请求头(多个key-value对象)

User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:54.0) Gecko/20100101Firefox/54.0

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3

Accept-Encoding: gzip, deflate

Connection: keep-alive

Upgrade-Insecure-Requests: 1

      -----一个空行

Name=eric&password=123456    (可选)实体内容

  3.1请求行

GET/day08_web/hello HTTP/1.1

  #http 协议版本

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

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

#请求资源

  URL:统一资源定位符 http://localhost:8080/day08_web/testImg.html只能定位互联网资源,是URI的子集

  URI:统一资源标记符/day08_web/hello 用于标记任何资源。可以是本地文件系统,局域网的资源,可以是互联网

 

     #请求方式

       常见的请求方式:GET、POST、HEAD、TRACE、PUT、CONNECT、DELETE

       常用的请求方式:GET和POST

       表单提交:

         <form action=”提交地址” method=”GET/POST”>

         <form>

       GET    vs    POST区别

(1)GET方式提交

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

GET /day08_web/testMethod.html?name=123&password=133 HTTP/1.1

Host: localhost:8080

User-Agent: Mozilla/5.0 (Windows NT 6.1;rv:54.0) Gecko/20100101 Firefox/54.0

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language:zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3

Accept-Encoding: gzip, deflate

Referer:http://localhost:8080/day08_web/testMethod.html

Connection: keep-alive

Upgrade-Insecure-Requests: 1 

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

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

            4)注意:浏览器直接访问的请求,默认提交方式是GET方式   

(2)POST方式提交

            1)参数不会跟在URI后面。参数而是跟在请求的实体内容中,没有?开头,多个参数之间以&分割

POST /day08_web/testMethod.html HTTP/1.1

Host: localhost:8080

User-Agent: Mozilla/5.0 (Windows NT 6.1;rv:54.0) Gecko/20100101 Firefox/54.0

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language:zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3

Accept-Encoding: gzip, deflate

Content-Type:application/x-www-form-urlencoded

Content-Length: 21

Referer:http://localhost:8080/day08_web/testMethod.html

Connection: keep-alive

Upgrade-Insecure-Requests: 1

name=123&password=345  实体

               2)POST提交的参数数据没有限制

               3)POST方式提交敏感数据

  3.2请求头

Host: localhost:8080  (必须的)当前请求访问的目标地址(主机:端口)

User-Agent: Mozilla/5.0 (Windows NT 6.1;rv:54.0) Gecko/20100101 Firefox/54.0 浏览器类型

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8    浏览器可以接收的数据类型

Accept-Language:zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3   浏览器接收的语言

Accept-Encoding: gzip, deflate   浏览器接受的数据压缩格式

Referer: http://localhost:8080/day08_web/testMethod.html   当前请求来自于哪里

Connection: keep-alive  浏览器根服务器连接状态 close:连接关闭keep-alive保持连接

发生变化了

Accept-Charset:ISO-8859-1   浏览器接受的编码格式

If-Modified-Since: Fri, 14 Jul 201713:37:23 GMT 浏览器最后的缓存时间

Cookie:name=eric   浏览器保存的cookie信息

Date: Fri, 14 Jul 2017 13:37:23 GMT 请求发出时间

  3.3实体内容

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

  3.4HttpServletRequest对象

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

       核心的API:

         请求行:

           request.getMethod();          //请求方式

           request.getRequestURI(); / request.getRequestURL();      //请求资源          

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

         请求头:

           request.getHeader(“名称”);    //根据请求头获取请求值

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

         实体内容:

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

3.5 传递的请求参数如何获取

    GET方式:参数放在URI后面

    POST方式:参数放在实体内容中

    获取GET方式参数:

      request.getQueryString();

    获取POST方式参数

      request.getInputStream();

    问题:但是以上两种不通用,而且获取到的参数还需要进一步地解析,所以选择使用同一方便的获取参数的方式:

    核心的API:

      request.getParameter(“参数名”);根据参数名获取参数值(注意:只能获取一个值的参数)

      request.getParameterValue(“参数名”);根据参数名获取参数值(可以获取多个值的参数)

     request.getParameterNames();获取所有参数名称列表

3.6 请求参数编码问题

    修改POST方式编码:

     request.setCharacterEncoding(“utf-8”);

    修改GET方式参数编码

      手动解码:Stringname = new String(name.getBytes(“iso-8859-1”),”utf-8”);

备注:经过测试,发现,GET方式不需要设置,但,POST方式必须要设置编码格式

四、Http响应

HTTP/1.1 200 OK           响应行

Content-Type: text/html;charset=utf-8  编码格式

Content-Length: 100   响应头

Date: Fri, 14 Jul 2017 11:45:35 GMT
                               一个空行

This is hello servlet!!!   实体内容

  4.1响应行

#Http协议版本

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

100----199 表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理

200----299 百世成功接收请求并已完成整个处理过程,常用200

300----399 为完成请求,客户需进一步细化请求。例如,请求的资源已经移动一个新地址,常用302/307、和304

400----499 客户端的请求有错误,常用404

500----599 服务器端出现错误,常用500

  常见的状态:

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

    302:表示请求需要进一步细化

    404:表示客户访问的资源找不到

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

#状态描述

  4.2常见的响应头

Bdpagetype: 1

Bdqid: 0x844282240006eb64

Bduserid: 0

Cache-Control: private

Connection: Keep-Alive

Content-Encoding: gzip   表示服务器发送给浏览器的数据压缩类型

Content-Type: text/html; charset=utf-8 表示服务器发送给浏览器的数据类型及内容编码

Cxy_all:baidu+a547653150c69b197f6473ac164b604d

Date: Sat, 15 Jul 2017 11:54:12 GMT

Expires: Sat, 15 Jul 2017 11:54:06 GMT

Server: BWS/1.1    表示服务器的类型

Set-Cookie: BDSVRTM=0; path=/    表示服务器发送给浏览器的cookie信息(会话管理用到)

BD_HOME=0; path=/

H_PS_PSSID=1422_21108_18560_20930; path=/;domain=.baidu.com

Strict-Transport-Security: max-age=172800

Vary: Accept-Encoding

X-Powered-By: HPHP

X-Ua-Compatible: IE=Edge,chrome=1

Transfer-Encoding: chunked

 

Location:http://www.it315.org/index.jsp    表示重定向的地址,该头和302的状态码一起使

Content-Length: 100  表示服务器发送给浏览器的数据长度

Content-Language:zh-cn  表示服务器支持的语言

Last-Modified:Tue,11 jul 2000 18:23:51GMT  表示服务器资源的最后修改时间

Refresh:1; url=http://www.it315.org  表示定时刷新

Content-Disposition:attachment;filename=aaa.zip  表示告诉浏览器以下载方式打开资源(下载文件时用到)

Expires:-1

Cache-Control:no-cache

Pragma:no-cache    表示通知浏览器不进行缓存

Connection:close/Keep-Alive  表示服务器和浏览器的连接状态。Close关闭连接 keep-alive保存连接

  4.3HttpServletResponse对象

  HttpServletResponse对象修改响应信息:

响应行:

  response.setStatus()   设置状态码

响应头:

  response.setHeader(“name”,”value”)  设置响应头

实体内容:

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

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

  4.4案例一 请求重定向(Location)

response.setStatus(302);

                   response.setHeader("location","/day08_web/testImg.html");

                  

                   response.sendRedirect("/day08_web/testImg.html");

 

  4.5案例二 定时刷新(refresh)

     response.setHeader("refresh","3;url=/day08_web/testImg.html");//每隔3秒跳转到指定页面
     response.setHeader("refresh","1");//每隔1s刷新次页面

  4.6案例三 Content-Type 作用

response.setContentType("text/html;charset=utf-8");//服务器发送给浏览器的数据类型和内容编码

五、总结:

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

  5.1http请求:

格式:

   请求行:

   请求头

   空行

   实体内容(POST提交的数据在实体内容中)

重点:使用HttpServletRequest对象:获取请求数据

  5.2http响应

格式:

  响应行

  响应头

  空行

  实体内容(浏览器看到的内容)

重点:使用HttpServletResponse对象:设置响应数据

原创粉丝点击