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

转载 2016年08月29日 12:07:06

公司人都去外面旅游了,本人由于太懒不想动,就只好在家,把之前学的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      -- 请求发出的时间

JavaWeb学习篇之----HTTP协议详解

简介: HTTP是hypertexttransfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程。 HTTP...
  • jiangwei0910410003
  • jiangwei0910410003
  • 2014年04月02日 14:04
  • 8717

Java Web之HTTP协议总结

HTTP协议总结HTTP协议(超文本传输协议)http 是一个基于请求与响应模式的,无状态的,应用层的协议,该协议基于TCP链接(三次握手),HTTP 1.1版本中给出一种持续链接的机制,绝大多数的W...
  • lisdye2
  • lisdye2
  • 2016年06月12日 23:33
  • 1576

javaweb之----http协议详解

javaweb之----http协议详解
  • coderinchina
  • coderinchina
  • 2016年01月23日 11:36
  • 427

javaweb中Http协议详解

一、什么是HTTP协议   HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换...
  • qq_26893687
  • qq_26893687
  • 2016年05月24日 22:10
  • 80

深入理解HTTP协议(二)——协议详解篇

1.HTTP/1.0和HTTP/1.1的比较 RFC 1945定义了HTTP/1.0版本,RFC 2616定义了HTTP/1.1版本。 1.1建立连接方面 HTTP/1.0 每次请求...
  • huangjianxiang1875
  • huangjianxiang1875
  • 2015年03月07日 16:38
  • 7928

HTTP协议 (一) HTTP协议详解

HTTP协议详解   引用:http://www.cnblogs.com/TankXiao/archive/2012/02/13/2342672.html 当今web程序的开发技术真是百家争...
  • ljmwork
  • ljmwork
  • 2013年06月12日 22:45
  • 918

HTTP协议详解(真的很经典)

引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HT...
  • qq_35904259
  • qq_35904259
  • 2017年03月11日 13:52
  • 448

http,tcp,ip,协议详解

一,HTTP请求行中的方法用于HTTP的动作方式,常用的方法有GET、HEAD和POST。         不同的请求对象对应GET的结果是不同的,对应关系如下: 对象            ...
  • zhaoxiangpeng16
  • zhaoxiangpeng16
  • 2016年03月28日 16:03
  • 648

HTTP协议分析系列(八)------http协议缓存详解

我们观察图片的下载,往往第一次请求时200ok 第二次请求时 304 not modified 未修改状态 解释:在网络上有一些缓存服务器,浏览器自身也有缓存功能。当我们第一次访问某图片时,正常下...
  • wuming19900801
  • wuming19900801
  • 2015年01月05日 10:10
  • 547

HTTP协议详解

转自  https://www.zybuluo.com/yangfch3/note/167490 http? 全称:超文本传输协议(HyperText Transfer Protocol)...
  • u013424496
  • u013424496
  • 2016年06月08日 09:10
  • 2247
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:javaweb之-----http协议详解
举报原因:
原因补充:

(最多只允许输入30个字)