关闭

javaweb之-----http协议详解

85人阅读 评论(0) 收藏 举报

公司人都去外面旅游了,本人由于太懒不想动,就只好在家,把之前学的web知识捡起来,由于之前没开始写博客,现在希望把javaweb知识以博客的形式展现出来,也当做是自己复习的机会,今天就讲下http协议,那么第一个问题来了什么是http协议。

一:什么是http协议

对浏览器客户端和服务器端之间数据传输的格式规范,因为我们软件现在都是基于B/S开发的,就是所谓的浏览器/服务器,它是一种数据传输的格式规范,也就是我服务器给的数据,浏览器能看懂且解析显示给用户看,就像我们在地址栏上输入http://www.baidu.com你所看到的网页一样,所谓规范就是二端约定的东西,就像你和后台调接口一样,什么字段表示什么意思.

二:http协议底层使用了什么?

我们知道http协议它是应用层上的协议,因为应用层上的协议关注的是数据格式是否正确,而底层是用了tcp/ip协议,它关心的是数据传输是否成功了,因为tcp/ip协议有一个三次握手,

三:写例子来实际看看http请求有哪些内容都代表什么意思?

我们知道写服务端和javase之前写的桌面程序是不一样的,之前写的Javase程序 然后你run as一样虚拟机就把你写的东西可以在控制台上可以看到,而现在是服务器端程序,你肯定不能这么干了,在这说明下,在你这使用的服务器端的服务器就是tomcat,不要问我为什么使用tomcat,我不会告诉你我没钱,只能用免费的,如果不知道什么是tomcat的话可以去百度下,我有时间会写一篇关于这方面的博客,在这就不细讲了,

现在写了一个常用的用户注册界面,然后教给servlet去处理,你也不要担心servlet是啥东西,后期会讲到,今天说了只关心http协议就够了,

[html] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. <form action="/httpDemo/servlet/RegisterServlet" >  
  2.     name:<input type="text" name="user"><br/>  
  3.     password: <input type="password" name="text"><br/>  
  4.    <input type="submit" value="sumbit">  
  5. </form>  

还有就是请求头和响应头分别是如图:

请求头:



响应头:


这些都是请求和响应的一部分并不是全部,比如cookie,因为我们这次请求并没有使用到,后面的会话管理会讲cookie和session突然发现火狐浏览器这个不是太好,因为它这个请求给的格式不好我继续往下面讲,改用360浏览器吧,发现360浏览器也是这样子,就这样讲吧,按到底是这样的如图:


这是我自己在word上写的 ,这个才很好讲,从中我们可以看出一个http请求包含四部分

a:请求行

b:请求头

c:一个空行

d:请求实体 请求实体为什么说是可选的,因为get请求是没有请求实体的,只有post请求有请求实体,这个很好验证,刚才我的1.html

<form action="/httpDemo/servlet/RegisterServlet" >
name:<input type="text" name="user"><br/>
password: <input type="password" name="text"><br/>
<input type="submit" value="sumbit">
</form>  

表单中没有写method这个属性,所以它默认就是get请求,现在我们来看看当点击submit后地址栏会有什么变化,

地址栏请求前:


我填写了用户名和密码后点击sumbit后变化:


认真看下地址栏发生了什么,是不是多了这个字符串?username=123&password=zsc,说明get请求是把参数携带在url后面,这样肯定是不对的,谁那么菜做登录或者注册用get请求,万一你在网吧登录别人在后面把你密码记住了,这不是完蛋,在这就是演示下请求实体内容get是没有这东西的,这个时候再看它的请求头就知道了 如图:


现在把表单请求改为post请求看下:


这是Google浏览器打印出来的,我记得我刚学web开发好像不是这么的,现在分开写了,完整的post请求头是这样的

POST /httpDemo/1.html HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.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/httpDemo/1.html
Connection: keep-alive

username=eric&password=123456 


这个才是完整的http请求头,这是post请求才有请求实体:我们看到请求头是这样的Host:localhost:8080是不是有点像我们map集合key_value形式,其实是差不多的,我们获取只要获取对应的name就能获取到对应的value值

上面说到get和post请求,在这对这二个请求方式做一个总结


get和post请求区别

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

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

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

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

3):GET方式不适合提交敏感密码(因为它会把请求参数直接放在地址栏上)而POST方式提交敏感数据

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


现在一步步来讲一个请求包含请求头 请求行 空行 请求实体(post)请求才有,现在讲下

请求行

POST /httpDemo/1.html HTTP/1.1 这是我们的请求头:

1):Post表示请求方式

2):HTTP/1.1表示请求的http协议版本号

3):/httpDemo/1.html 表示请求的统一资源定位符,它是省略了http://localhost:8080这个,这个叫URL,表示互联网上一个网址,而http://localhost:8080是http(协议)+localhost(域名或者ip也就是公司在运营商那里注册的ip,你才可以访问到你的服务器)+8080找到你8080端口对应的是哪个地址,因为一台服务器可能会有多个应用,我们知道自己本金的静态ip是127.0.0.1那么为什么不写这个ip还要写localhost呢?在你C盘的目录:C:\Windows\System32\drivers\etc有个host文件 你打开这个host文件会看到这个127.0.0.1   localhost 这就是一个ip对应一个域名这二个就是同一个意思,为什么我们写localhost一样能访问,就是这个原因,还有一个叫URI 这个是统一资源标记符。/httpDemo/1.html。用于标记任何源以是本地文件系统,局域网的资源(//192.168.14.10/myweb/index.html可以是互联网

URL是URI的子类


请求头:

下面列举的是常见的请求头

Accept: text/html,image/*      -- 浏览器接受的数据类型

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

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

Accept-Language: en-us,zh-       --浏览器接受的语言

Host: www.baidu.com:80          --(必须的)当前请求访问的目标地址(主机:端口)

If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT  --浏览器最后的缓存时间

Referer: http://www.baidu.com/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      -- 请求发出的时间

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:10095次
    • 积分:274
    • 等级:
    • 排名:千里之外
    • 原创:4篇
    • 转载:81篇
    • 译文:0篇
    • 评论:0条