Java Web之HTTP协议总结
来源:互联网 发布:jo抢购软件下载 编辑:程序博客网 时间:2024/05/29 18:55
HTTP协议总结
HTTP协议(超文本传输协议)
http 是一个基于请求与响应模式的,无状态的,应用层的协议,该协议基于TCP链接(三次握手),HTTP 1.1版本中给出一种持续链接的机制,绝大多数的Web开发都是构建在HTTP协议之上的。
URL 是一种特殊类型的URI(统一资源标识符),包含用于查找某个资源的足够信息。
HTTP URL 格式如下:
http://host[":"port][abs_path]
- host: 表示合法的internet主机域名和IP地址。
- port指端口号,为null则表示使用缺省的端口80(默认值)。
- abs_path:指定请求资源的URI。如果URL中没有给出abs_path,那么当它作为请求URI时,必须以“/”的形式给出,通常这个工作浏览器自动帮我们完成。
当我们输入www.hao123.com
http://www.hao123.com/
hao123 表示域名,输入该域名会在DNS服务器中查找该域名对应的ip。
该域名使用的是80端口,可以不需要输入。
最后因为没有输入资源地址,浏览器会默认在其后加入/
作为结束。
HTTP 协议的特点
- 支持客户端/服务端模式。及浏览器可以和我们的服务器通过HTTP协议进行交互。
- 简单快速:客户向服务端请求服务时,只需传送请求方法和路径。请求方法常有的有GET,HEAD,POST。每种方法规定了客户与服务器联系的类型。由于HTTP协议的简单,使得HTTP协议HTTP服务器规模小,因而通信速度快。
- 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
- 无状态:对于事务的处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则必须重新传送。另一方面,在不需要前面的信息,处理速度较快。
- 无连接: 在HTTP /1.0 时,请求响应之后就断开。HTTP/1.1 ,请求之后不会立即断开,而是链接一段时间之后,如果没有后续请求,才会断开。
HTTP 协议版本
HTTP协议总共分为两个版本,分别是HTTP/1.0和HTTP/1.1.
HTTP/1.0
- 链接后,只能请求一个web资源
- 链接后,只能做出一次响应和请求,响应完成之后服务器会立即断开。
HTTP/1.1
- 链接后,可以请求多个web资源
- 链接后,发送请求,服务器做出响应,链接不会立即断开。再次发送请求,直接有一段时间没操作,自动断开。
HTTP 请求
由图中可以看出,HTTP 请求分为三部分,请求行,请求头,请求体。
请求行 分为三部分,
请求方式:
- 所有请求方式:POST、GET、HEAD、OPTIONS、DELETE、TRACE、PUT、CONNECT
- 常用的请求方式有POST,GET。
- POST和GET的区别:
- POST 将参数封装到请求体中,安全级别高,支持大数据。
- GET 将参数直接显示到地址栏中,安全级别低,不支持大数据。
请求地址: 请求的资源。
- 协议版本:HTTP/1.1
请求头
Accept: text/html,image/* Accept-Charset: ISO-8859-1 Accept-Encoding: gzip Accept-Language:zh-cn Host: www.itcast.com:80 If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT Referer: http://www.itcast.com/index.jsp User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) Connection: close/Keep-Alive Date: Tue, 11 Jul 2000 18:23:51 GMT
请求体: GET为null.Post 封装参数列表。
可以看到请求头重有一些字段,该字段都是以键-值对的形式出现。某些字段是一键对多值。我们可以通过设置该字段的一些值以达到一些特殊的效果。
HTTP 响应
响应和请求很类似,分为响应行,响应头,响应体。
其中在响应行中有200 ,该字段标识请求响应的结果。
状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:
- 1xx:指示信息–表示请求已接收,继续处理
- 2xx:成功–表示请求已被成功接收、理解、接受
- 3xx:重定向–要完成请求必须进行更进一步的操作
- 4xx:客户端错误–请求有语法错误或请求无法实现
- 5xx:服务器端错误–服务器未能实现合法的请求
常见的响应码如下:
- 200 客户端请求成功。
- 400 客户端请求有语法错误,不能服务器所理解。
- 401 请求未经授权
- 404 请求资源不存在
- 500 服务器发生不可预知的错误
- 503 服务器当前不能处理客户端的请求,一段时间后可能恢复正常。
在相应头中,类似请求头一样,也是存在着一个个键值对。可以配合请求头做一些事情。
HTTP 的应用
防盗链
在一些网站中,可以获取别人网站的链接加入到自己的网站中,导致用户从其他网站上浏览到了本站的信息。
如图,有两个网站,分别为好人和坏人的网站,其中坏人盗取了好人的网站链接。即盗链。
而在请求中存在字段referer
头信息,可以通过referer
判断链接是否正确。
而在JavaWeb
中,通过Servlet
的request
可以获取头信息。
//通过referer 和自己的网址进行对比 String referer = request.getHeader("Referer");
获取浏览器信息
通过请求头的user-agent
获取浏览器信息。
// 防止中文乱码 response.setContentType("text/html;charset=UTF-8"); // 获取浏览器信息 String s = request.getHeader("user-agent"); response.getWriter().write(s);
Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36
获取到浏览器信息,系统信息。 通过该字段可以区分访问时来自pc端还是移动端。
页面的定时刷新
通过响应头字段refresh
实现页面定时刷新。
response.setContentType("text/html;charset=UTF-8"); response.getWriter().write("访问到了..."); // 页面5秒会跳转 response.setHeader("refresh", "5;url=http://www.baidu.com");
页面会在5秒之后跳转到百度。
实现重定向
转发和重定向的区别
- 转发:找班长借钱,他自己找富班长借钱。(两个页面拼接到一起,后台悄悄处理)
- 重定向:找班长借钱,发送一次请求,回了我没钱,返回状态码302,给副班长地址,再去找富班长借钱,又发送了一次。
重定向的实现
response.setContentType("text/html;charset=UTF-8"); // response.getWriter().write("向班长借钱..."); // 我没钱 response.setStatus(302); // 告诉我富班长的地址 response.setHeader("location", "副班长地址");
- Java Web之HTTP协议总结
- Java web基础总结二之—— http协议
- Web总结----Http协议
- 传智播客Java web之 HTTP协议详解
- Java Web之二 Tomcat & Http协议
- Web之HTTP协议
- Web之HTTP协议
- Java Web HTTP协议
- Java web学习总结4:Http协议 Http协议常用的消息头汇总
- Web开发之HTTP协议
- web入门之Http协议
- java开发之用http协议连接web服务器
- java之http协议
- 【Java Web】: HTTP协议详解
- java web一HTTP协议
- Java基础之Http协议的理解与总结
- WEB之http协议工作原理
- 嵌入式Web服务器学习之HTTP协议
- Mysql实用SQL语句总结(持续更新)
- Oracle 11G Client 客户端安装
- 电商评价质量评分模型(一)
- python的print函数的一些功能
- 第二章 java基础(单行和多行注释)
- Java Web之HTTP协议总结
- 误删数据库文件后导致 (数据库未打开错误)问题
- Quartz的cron表达式
- 第二章 java基础(javadoc注释)
- 1.汇编语言
- ACM:蓝桥杯:c、c++、进行四舍五入保留
- React Native十四:原生模块
- 一对多关联查询
- snmp ospf 比较高级的用法,建议详细读取