【HTTP】四、HTTP协议常见问题
HTTP协议是一个非常重要的应用层协议,在面试中有很多关于这方面的问题,这里做一个总结,大部分都在前面的文章中提到了,没提到的这里做一个介绍。
1、HTTP协议的基本原理、工作流程
HTTP协议是超文本传输协议,是一个应用层协议,它规定了万维网上各种链接如何实现,特别是浏览器如何向万维网服务器请求万维网文档、服务器如何把文档传给浏览器。它以客户端-服务器的方式运行,客户程序向服务器程序发出请求,服务器程序向客户程序送回客户所要的万维网文档,分别对应请求报文和响应报文。
HTTP本身是无连接的,但是传输层使用的是TCP协议,需要首先建立连接,然后传输文档,最后关闭连接。
2、HTTP协议的特点
参考:HTTP的特点,主要是:客户端-服务器模式,简单快速,灵活,无连接,无状态。
3、HTTP状态码
参考:HTTP响应报文
4、HTTP请求方法,Get和Post的区别
HTTP请求方法参考:HTTP请求报文
【Get和Post的主要区别】
(1)从含义上来看,get的重点是从服务器上获得资源,post的重点是向服务器发送数据。
(2)get和post都可以用来传输数据给服务器,但是get是将数据信息以field(字段)= value的形式置于URL后,并用”?”连接,多个请求数据间用”&”连接,如http://127.0.0.1/Test/login.action?name=admin&password=admin,通过URL将数据携带到服务端的,而post是将字段和对应的值封装在了请求实体中发送给服务器的。
(3)由于第二点的区别,带来了安全性的不同,get将数据直接拼接在URL的后面,对用户可见,可能会泄露私密信息,如密码等;而post数据封装在实体中,对用户不可见。
(4)同样由于第二点的区别,带来了数据量的不同,get传输的数据量小,因为它受URL长度的限制,但是效率较高,而Post可以传输大量输出,因此上传文件等大数据时只能用post。
参考:
作者:有时需要偏执狂
原文:https://blog.csdn.net/u010710458/article/details/79636625
版权声明:本文为博主原创文章,转载请附上博文链接!
5、Cookie和Session的区别
参考:HTTP状态保持机制
6、HTTP短连接和长连接
实际上这里准确说法应该不是HTTP的连接,而是TCP的连接,在HTTP/1.0版本中,主要缺点是每个HTTP连接只能发送一个请求(短连接),一旦服务器响应数据发送完毕,连接就释放了,如果还有其他需要请求的信息,就需要再次建立TCP连接,而TCP连接需要三次握手,这需要时间开销,如果一个页面有多个需要请求的URL,就会有大量的短连接,会产生很多不必要的开销。
在HTTP/1.1中较好的解决了这个问题,引入了持久连接,也就是长连接,让服务器在发送完响应之后仍然在一段时间内维护这条连接,如果后续还有其他的请求可以复用这条连接,当然,长连接并不是永久连接,经过一定时间没有请求之后长连接就会释放。
现在我们使用的都是http/1.1,所以默认都是使用的长连接,设置Connection为keep-alive就是长连接。如果不愿意使用持久连接,也可以进行设置。
7、HTTP代理
参考:HTTP代理
8、HTTP缓存
http缓存指的是: 当客户端向服务器请求资源时,会先抵达浏览器缓存,如果浏览器有“要请求资源”的副本,就可以直接从浏览器缓存中提取而不是从原始服务器中提取这个资源。
常见的http缓存只能缓存get请求响应的资源,对于其他类型的响应则无能为力。
缓存的好处是显而易见的:(1)减少了冗余的数据传输,节省了网费;(2)减少了服务器的负担, 大大提高了网站的性能;(3)加快了客户端加载网页的速度
HTTP的缓存有两种:强制缓存和协商缓存。
(1)强制缓存
强制缓存在缓存数据未失效的情况下(即Cache-Control的max-age没有过期或者Expires的缓存时间没有过期),那么就会直接使用浏览器的缓存数据,不会再向服务器发送任何请求。强制缓存生效时,http状态码为200。这种方式页面的加载速度是最快的,性能也是很好的,但是在这期间,如果服务器端的资源修改了,页面上是拿不到的,因为它不会再向服务器发请求了。
(2)协商缓存
当浏览器第一次向服务器发送请求时,会在响应头中返回协商缓存的头属性:ETag和Last-Modified,其中ETag返回的是一个hash值,Last-Modified返回的是GMT格式的最后修改时间。然后浏览器在第二次发送请求的时候,会在请求头中带上与ETag对应的If-Not-Match,其值就是响应头中返回的ETag的值,Last-Modified对应的If-Modified-Since。服务器在接收到这两个参数后会做比较,如果返回的是304状态码,则说明请求的资源没有修改,浏览器可以直接在缓存中取数据,否则,服务器会直接返回数据。
参考:作者:kimshare
链接:https://www.jianshu.com/p/227cee9c8d15
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
9、HTTP和HTTPS
HTTPS是在http协议基础上增加了使用SSL加密传送信息的协议,http和https之间的区别就在于其传输的内容是否加密和是否是开发性的内容。HTTPS是安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换信息。它使用安全套接字层(SSL)进行信息交换,简单来说它是HTTP的安全版。
https协议需要到ca申请证书,一般免费证书很少,需要交费。
http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
Http端口是80,https的端口是443.
HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。
10、URI和URL
URI是统一资源标识符(Uniform Resource Identifier),而URL是统一资源定位符(Uniform Resource Locator),URI是URL更高层次的抽象,是一种字符串文本标准,而URL是URI的一种,是它的子集。
URI 表示请求服务器的路径,定义一个资源。而 URL 同时说明要如何访问这个资源(http://)。
URI通常由三部分组成:①访问资源的命名机制;②存放资源的主机名;③资源自身的名称,由路径表示.
URL是Internet上描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上。URL的格式由三部分组成: ①第一部分是协议(或称为服务方式)。②第二部分是存有该资源的主机IP地址(有时也包括端口号)。③第三部分是主机资源的具体地址,如目录和文件名等。
总之,URL是一种具体的URI,可以用来标识一个资源,而且还指明了如何locate这个资源。
11、网址中输入URL,一系列过程
参考:https://blog.csdn.net/xidiancoder/article/details/71524673
12、HTTP2
HTTP2协议:参考:HTTP的版本演变,主要是二进制协议、双向实时数据流通信、头信息压缩、服务器推送机制。
【HTTP】四、HTTP协议常见问题的更多相关文章
- RTSP、HTTP、HTTPS、SDP四种协议详解
我们将主要讲解RTSP,HTTP,HTTPS, SDP四种协议. 一:RTSP协议简介 实时流协议RTSP是一个应用层协议,用于控制具有实时特性的数据(例如多媒体流)的传送. RTSP协议一般与RT ...
- java web学习总结(四) -------------------HTTP协议
一.什么是HTTP协议 HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的 ...
- javaweb学习总结(四)——Http协议
一.什么是HTTP协议 HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的 ...
- IP 协议首部格式与其配套使用的四个协议(ARP,RARP,ICMP,IGMP)
目录 IP协议首部格式地址解析协议 ARP逆向地址解析协议 RARP网际控制报文协议 ICMP网际组管理协议IGMP IP 数据报首部 IP数据报首部格式: 最高位在左边,记为0 bit:最低位在右边 ...
- (网络层)IP 协议首部格式与其配套使用的四个协议(ARP,RARP,ICMP,IGMP)
目录 IP协议首部格式地址解析协议 ARP逆向地址解析协议 RARP网际控制报文协议 ICMP网际组管理协议IGMP IP 数据报首部 IP数据报首部格式: 最高位在左边,记为0 bit:最低位在右边 ...
- 网络层 IP 协议首部格式与其配套使用的四个协议(ARP,RARP,ICMP,IGMP)
目录 IP协议首部格式地址解析协议 ARP逆向地址解析协议 RARP网际控制报文协议 ICMP网际组管理协议IGMP IP 数据报首部 IP数据报首部格式: 最高位在左边,记为0 bit:最低位在右边 ...
- TCP/IP笔记(四)IP协议
前言 IP相当于OSI参考模型的第3层--网络层:主要作用是"实现终端节点之间的通信"又称"点对点通信". IP作为整个TCP/IP中至关重要的协议,主要负责将 ...
- 大型网站的 HTTPS 实践(四)——协议层以外的实践
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt390 1 前言 网上介绍 https 的文章并不多,更鲜有分享在大型互联网站 ...
- javaweb学习总结(四)——Http协议(转)
转载自 http://www.cnblogs.com/xdp-gacl/p/3751277.html 一.什么是HTTP协议 HTTP是hypertext transfer protocol(超文本传 ...
随机推荐
- CentOS 添加环境变量的三种方法
在CentOS 系统上安装完 MATLAB 后,为了使用方便,需要将 matlab 命令加到系统命令中,如果在没有添加到环境变量之前,执行“matlab”命令时,则会提示命令不存在的错误,如下所示: ...
- 提升Java开发效率必看!教你如何在MyEclipse中使用内联搜索
MyEclipse CI 2019.4.0安装包下载 Inline Search取代传统Eclipse查找和替换对话框,提供更搞笑.更具侵略性的搜索体验——一种不会中断开发工作流程的工具. DevSt ...
- 5.反生成url
# url(r"^all/(?P<article_type_id>\d+)$", home.index,name="index" ), # 在htm ...
- python 的pip安装
C:\Python27>C:\Python27\Scripts\pip.exe install gevent gevent是安装的模块名
- C# 编辑
if (state == "编辑") { ht["修改人"] = Helper.用户名; ht["修改时间"] = DateTimeHelp ...
- Angular 应用的外壳
你首先需要使用 Angular CLI 来创建一个初始化的应用.随后,你将对你已经初始化的应用进行修改来让你构建出 Tour of Heroes app(英雄指南) 这个应用. 在教程的本部分,你需要 ...
- Angular CLI 创建你的第一个 Angular 示例程序
第一步:安装 Angular CLI 你要使用 Angular CLI 来创建项目.创建应用和库代码,并执行多种开发任务,比如测试.打包和发布. 全局安装 Angular CLI. 要想使用 npm ...
- [Jenkins]Job中如何传递自定义变量
场景一: Job构建步骤间的变量传递 Jenkins提供了数十种构建方式,我们以最常用的『Execute shell』为例.有时为了使Job中的复杂的构建流程更加清晰我们配置多个构建步骤像下面这样.图 ...
- windows下kafka配置入门 示例
实验平台与软件: 操作系统:windows7 32 位 java 开发包: jdk1.8.0_144 集群: zookeeper-3.3.6 消息队列: kafka_2.11-0.11.0.1 安装 ...
- 基于ElementUI,设置流体高度时,固定列与底部有间隙
基于ElementUI,设置流体高度时,固定列与底部有间隙问题,如下图: 解决办法: 1.fixed流体的高度设置为100% 2.将fixed的滚动内容的最大高度设置为none,bottom为 ...