五.javaweb之Http协议

来源:互联网 发布:九十年代流行网络歌曲 编辑:程序博客网 时间:2024/05/17 06:01
1
HTTP协议
  1. HTTP协议简介

1. HTTP协议

  • HTTPhypertext transport protocol),即超文本传输协议。这个协议详细规定了浏览器和万维网服务器之间互相通信的规则。
  • 客户端与服务端通信时传输的内容我们称之为报文。
  • HTTP就是一个通信规则,这个规则规定了客户端发送给服务器的报文格式,也规定了服务器发送给客户端的报文格式。实际我们要学习的就是这两种报文。客户端发送给服务器的称为请求报文,服务器发送给客户端的称为响应报文
协议:约定多方规则;
租房协议:
              写信:          
信封:
写信:
       邮编:胡錦涛
                     收件人地址:100000
                            发件人地址:xxx
       把信的内容包在信封里
回信:
       邮编:100000
                     收件人地址:XXX 
                            发件人地址:胡錦涛
       把信的内容包在信封里
打破规定,沟通就有问题。
实际互联网。
       客户端-à服务端进行通信
       用户------à访问京东(就是一个数据传输的过程)
       数据传输需要按照一种协议去传输。
       用户给服务器写信。服务器给用户回信。有格式。协议。HTTP协议规定通信规则。
规定互联网之间如何传输数据。
       信:报文。
       写信:用户给服务器写信,用户给服务器发请求。 把发的请求所有数据,请求报文
       回信:服务器回信给用户,回给浏览器。            把服务器响应浏览器的所有数据,响应报文
HTTP协议就是规定报文的格式。
              报文:电报。格式。
              
只需要看浏览器发给服务器的内容的详细信息就知道报文的格式了。
  1. HttpWatch

2.1 安装

  • 由于IE8以下的IE浏览器没有提供监听HTTP的功能,所以如果要使用IE8以下的浏览器查看HTTP请求的内容需要安装一个工具HttpWatch
  • Firefoxchrome都有内置的开发者工具,可以直接查看Http请求。
  • HttpWatch的使用非常简单,直接安装,然后一直下一步,直到安装完成。

2.2 使用

  • 安装完成后,打开IE浏览器,工具下拉列表可以看到HttpWatch Professional选项
  • 打开后点击Record按钮开始监听Http请求。
  1. 报文

3.1 报文格式

报文:
         请求报文:浏览器发给服务器
         响应报文:服务器发回给浏览器
报文的格式:
                   报文首部:封装了报文的属性以及一些其他内容
                   空行
                   报文主体:封装了应该被发送的数据
谷歌将报文都已经格式化了。所以不能观察到原生的报文的格式
我们可以写一段程序来获取报文
GET /HelloWord/index.html HTTP/1.1
Host: 192.168.10.165:8080
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8

3.2 请求报文

3.1.1 报文格式

请求首行;
请求头信息;
空行;
请求体;
getpost
哪些操作是发请求?
         1)、输入地址直接按回车  2)、点击超链接   3)、表单提交 
         4)、script src=””,引入外部文件         5img src=”路径”,引入图片
         6)、引入外部css。。。
请求:GET请求、POST请求
哪些请求是GET请求:除了表单的method=post外,剩下都是get请求
POST请求:只有表单提交的时候method=post,提交表单就是发post请求

3.1.2 GET请求

GET /Hello/index.jsp HTTP/1.1
Accept: */*
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)
Accept-Encoding: gzip, deflate
Host: localhost:8080
Connection: Keep-Alive
Cookie: JSESSIONID=C55836CDA892D9124C03CF8FE8311B15
 
    • GET /Hello/index.jsp HTTP/1.1GET请求,请求服务器路径为Hello/index.jsp,协议为1.1
    • Host:localhost:请求的主机名为localhost
    • User-Agent: Mozilla/4.0 (compatible; MSIE 8.0…:与浏览器和OS相关的信息。有些网站会显示用户的系统版本和浏览器版本信息,这都是通过获取User-Agent头信息而来的;
    • Accept: */*:告诉服务器,当前客户端可以接收的文档类型,*/*,就表示什么都可以接收;
    • Accept-Language: zh-CN:当前客户端支持的语言,可以在浏览器的工具à选项中找到语言相关信息;
    • Accept-Encoding: gzip, deflate:支持的压缩格式。数据在网络上传递时,可能服务器会把数据压缩后再发送;
    • Connection: keep-alive:客户端支持的链接方式,保持一段时间链接,默认为3000ms
    • Cookie: JSESSIONID=369766FDF6220F7803433C0B2DE36D98:因为不是第一次访问这个地址,所以会在请求中把上一次服务器响应中发送过来的Cookie在请求中一并发送去过。

3.1.3 POST请求

  • POST请求要求将form标签的method的属性设置为post
POST /Hello/target.html HTTP/1.1
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, */*
Referer: http://localhost:8080/Hello/
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: localhost:8080
Content-Length: 14
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: JSESSIONID=774DA38C1B78AE288610D77621590345
username=admin
  • POST请求是可以有体的,而GET请求不能有请求体。
  • Referer: http://localhost:8080/hello/index.jsp:请求来自哪个页面,例如你在百度上点击链接到了这里,那么Referer:http://www.baidu.com;如果你是在浏览器的地址栏中直接输入的地址,那么就没有Referer这个请求头了;
  • Content-Type: application/x-www-form-urlencoded:表单的数据类型,说明会使用url格式编码数据;url编码的数据都是以“%”为前缀,后面跟随两位的16进制,例如“传智”这两个字使用UTF-8url编码用为“%E4%BC%A0%E6%99%BA”;
  • Content-Length:13:请求体的长度,这里表示13个字节。
  • keyword=hello:请求体内容!hello是在表单中输入的数据,keyword是表单字段的名字。

3.3 响应报文

3.3.1 报文格式

响应首行;
响应头信息;
空行;
响应体;
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=UTF-8
Content-Length: 274
Date: Tue, 07 Apr 2015 10:08:26 GMT
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Hello</h1>
</body>
</html>
  • HTTP/1.1 200 OK:响应协议为HTTP1.1,状态码为200,表示请求成功;
  • Server: Apache-Coyote/1.1:服务器的版本信息;·
  • Content-Type: text/html;charset=UTF-8:响应体使用的编码为UTF-8
  • Content-Length: 274:响应体为274字节;
  • Date: Tue, 07 Apr 2015 10:08:26 GMT:响应的时间,这可能会有8小时的时区差;

3.3.2 响应码

响应码对浏览器来说很重要,它告诉浏览器响应的结果;
  • 200:请求成功,浏览器会把响应体内容(通常是html)显示在浏览器中;
  • 404:请求的资源没有找到,说明客户端错误的请求了不存在的资源;
  • 500:请求资源找到了,但服务器内部出现了错误;
  • 302:重定向,当响应码为302时,表示服务器要求浏览器重新再发一个请求,服务器会发送一个响应头Location,它指定了新请求的URL地址;

3.3.3 MIME类型

    • HTTP内容类型:当前响应体的数据类型。
①需要指出的是在浏览器和服务器之间传输的数据类型并非都是文本类型,还包括图片、视频、音频等多媒体类型。这些多媒体类型是使用MIME类型定义的。
MIME的英文全称是"Multipurpose Internet Mail Extensions" 多功能Internet邮件扩充服务。MIME类型的格式是“大类型/小类型”,并与某一种文件的扩展名相对应。
③常见的MIME类型
文件
MIME类型
超文本标记语言文本
.html,.html text/html
普通文本
.txt text/plain
RTF文本
.rtf application/rtf
GIF图形
.gif image/gif
JPEG图形
.jpeg,.jpg image/jpeg
au声音文件
.au audio/basic
MIDI音乐文件
mid,.midi audio/midi,audio/x-midi
RealAudio音乐文件
.ra, .ram audio/x-pn-realaudio
MPEG文件
.mpg,.mpeg video/mpeg
AVI文件
.avi video/x-msvideo
GZIP文件
.gz application/x-gzip
TAR文件
.tar application/x-tar
0 0