HTTP简称超文本传输协议,它架构在TCP(传输控制协议)之上,适用于谷歌浏览器,在应用层工作,基于C(浏览器)/S(服务器)进行通信,所有的WWW文件都必须遵守这个标准(HTTP)。
HTTPS是HTTP的安全版本,通过SSL来加密保障传输通道。
HTTP请求由请求行、请求头、空行、请求体组成。
常见的请求方式有GET、POST。
当我们在服务器上读取文档的时候,点击某个连接或浏览网页,使用的请求都是GET。
POST将请求的参数封装在HTTP之中,以名称的方式出现,可以传输大量数据。当我们使用表单的时候,会用到POST。
HTTP响应内容由响应行、响应头、空行、响应体组成。
URL(Uniform Resource Locator,统一资源定位符),是WWW的统一资源定位标志,就是指网络地址。
HTTP 0.9:GET
HTTP 1.0:GET、POST 、HADE
HTTP 1.1:GET、 POST 、HADE PUT、PATCH、OPTIONS、DELETE
HTTP 1.1:GET、 POST 、HADE PUT、PATCH、OPTIONS、DELETE
HTTP 2.0:升级版
1.连接
在HTTP1.1中默认开启Connection: keep-alive,弥补了HTTP1.0每次请求都要创建连接的缺点。
2.缓存处理
在HTTP1.0中主要使用header里的内容来作为缓存判断的标准,而HTTP1.1引入了更多的缓存控制策略。
3.带宽优化和网络连接的使用
HTTP1.0中,存在一些浪费带宽的现象,例如:客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点继续传送功能,HTTP1.1只允许请求资源的某个部分,即返回码是206(Partial Content),有利于开发者的选择,能充分利用带宽优化和网络连接。
4.错误通知的管理
在HTTP1.1中新增24个状态响应码,如
409表示请求的资源与资源当前状态冲突;410表示服务器上的某个资源被永久性的删除。而HTTP1.0没有增加错误管理。
5.Host头域处理
在HTTP1.0中,每台服务器都绑定着一个唯一的IP地址,因此请求消息中的URL并没有传递主机名,所以不支持Host头域。而HTTP1.1的请求消息和响应消息都可以支持Host头域,并且在请求消息中,如果没有Host头域,就会报告一个错误(400 Bad Request)。
参考教程:https://www.runoob.com/http/http-tutorial.html
这个阶段的我是一个初学者,渴望学到更多的知识。我按照上面的参考教程,一步一步地实践下来,感觉对HTTP有了深刻的了解。
到了一定的时间之后,它就是我所获的一份有用的知识。
HTTP中的请求方式挺重要的,消化之后,用处会很大。至少post和get肯定是要掌握的,其他的请求方法会在它们的基础上演变。
在生活当中,HTTP可能就是一串字母,它也可以出现在任何角落。
标题突出的是现实,那我就来谈谈自己学习HTTP的经历。在我刚接触计算机的时候,心中就有无法满足的好奇心。当我在电脑上浏览东西的时候,第一张出现的页面是百度。
当我好奇地点击了baidu.com,就变成了这个网址(https://www.baidu.com)。在这个时候,我就去了解了https。原来https是由HTTP 、 SSL / TLS两部分组成。只能说https是经过加密的,所以才可以作为网址的开头,能更好地保护网站的安全。
参考网址1:https://blog.csdn.net/weixin_43670802/article/details/102865855
参考网址2:
https://www.cnblogs.com/caoshenglu/p/8476593.html
HttpUrlConnection类是一个内置类,能实现一些基本的HTTP的请求。
URL url = new URL("www.baidu.com");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
// 1. 获取访问地址URL
URL url = new URL("http://localhost:8080/Servlet/do_login.do");
// 2. 创建HttpURLConnection对象
httpURLConnection = (HttpURLConnection) url.openConnection();
/* 3. 设置请求参数等 */
// 请求方式 默认 GET
httpURLConnection.setRequestMethod("POST");
Map<String, String> parameters = new HashMap<>();
parameters.put("param1", "val");
con.setDoOutput(true);
DataOutputStream out = new DataOutputStream(con.getOutputStream());
out.writeBytes(ParameterStringBuilder.getParamsString(parameters));
out.flush();
out.close();
通过setRequestProperty() 方法可以添加请求头:
con.setRequestProperty("Content-Type", "application/json");
通过getHeaderField()方法可以读取响应头:
String contentType = con.getHeaderField("Content-Type");
con.setConnectTimeout(2000);
con.setReadTimeout(2000);
String cookiesHeader = con.getHeaderField("Set-Cookie");
List<HttpCookie> cookies = HttpCookie.parse(cookiesHeader);
我们可以通过调用方法setInstanceFollowRedirects(),设置为true或者false,来控制是否允许一个特定连接自动跟随重定向:
con.setInstanceFollowRedirects(true);
可以全局设置所有的连接是否允许自动跟随重定向:
HttpUrlConnection.setFollowRedirects(false);
HTTP的出现让我们想到了网站、游戏、网络安全等。
它们的优点让思维创新有了很大的提升,假设它是一串字母,即可以隐藏密码,又可以表达某种意思。首先,网站里就有网页三剑客,虽然三剑客指的是三种技术,但是我也可以把它们想象成人的三种风格。这些风格可以让HTTP变成其他字母,从而隐藏最关键的信息。所以,它们达成了安全协议,让HTTP得到了很好的升级。
在游戏世界里,会经常出现bug。但是这些bug的出现,就引出了HTTP。当游戏版本太低的时候,就会有漏洞的袭击,紧接着bug也纷纷赶来。说到bug,当电脑配置太低的时候,HTTP就会不支持。因此,我就会相对稳定的版本来稳住bug。
在网络世界中,最常见的就是协议。网络中的DDos攻击就是借助HTTP的力量来完成实验,渗透也是一样的。HTTPS是加过密的,但是在网络安全的世界里,又存在解密算法。
参考网址
https://blog.leapmie.com/archives/418/
可以关注微信公众号Java团长
这篇博客层层深入,从原理上,把 HTTPS 的安全性讲得很透。
1.为什么用了 HTTPS 就是安全的?
2.HTTPS 的底层原理如何实现?
3.用了 HTTPS 就一定安全吗?