php 空格怎么写,一次完整的http请求过程是怎样的?
面试中常问的一个问题就是:在浏览器输入 URL 地址回车后,发生了什么?这里简单概述一下。
总体流程图如下:
1. URL 解析
浏览器首先对 URL 解析,解析出协议、域名、端口、资源路径、参数等。
2. DNS 域名解析
一般而言,域名比 IP 地址更好记,因而我们更习惯在浏览器输入域名而不是 IP,而计算机网络通信所识别的计算机标识是 IP 地址,因而首先需要将一个域名转化为相应的 IP 地址,这就是 DNS 协议所要做的事。
DNS 就像我们手机中的通讯录一样,通讯录中备注的是对方的姓名(类似于域名),但是打电话的时候实际需要的是电话号码(类似于 IP 地址),利用通讯录将一个姓名转化为对应的电话号码。
3. 建立 TCP 连接
一般在浏览器输入 URL,应用层的协议为 HTTP/HTTPS,其需要的是可靠的服务,所使用的传输层协议为 TCP。
通过域名解析后,浏览器获得了服务器的 IP,则向服务器发起 TCP 连接,这时候就会发生三次握手行为。
4. 发送 HTTP 请求
当浏览器与服务器建立连接后,就可以进行数据通信过程,浏览器会给服务器发送一个 HTTP 请求报文,请求报文包括请求行、请求头、请求空行和请求体。在请求行中会指定方法、资源路径以及 HTTP 版本,其中资源路径是指定所要操作资源在服务器中的位置,而方法是指定要对这个资源做什么样的操作。
从浏览器输入 URL,资源路径在第一步就已经被解析出来了,而方法为 GET,表明要获取资源,相当于增删改查中的查询。
5. 服务器对请求进行处理并做出响应
当收到浏览器发送的请求报文后,服务器会对此请求报文进行相应的处理,并返回响应报文给浏览器。比如请求报文想要获取(GET) index.html 这个文件,那么服务器就会找到 index.html 文件,然后将此文件作为响应报文中的响应体发送给浏览器。
响应报文包括响应行、响应头、响应空行和响应体。在响应行中会指定 HTTP 版本、状态码和对状态码的解释信息,比如 HTTP/1.1 200 OK ,其中 200 是响应码,指请求被正常处理,也就是成功 OK 的意思。
6. 浏览器解析渲染页面
浏览器收到服务器的响应报文后,从响应体中得到相应资源,如 HTML 文件、图片、视频等,并进行渲染,然后将结果呈现给用户。
7. 断开 TCP 连接
当数据完成请求到返回的过程之后,根据请求/相应头中 Connection 的 Keep-Alive 属性可以选择是否断开 TCP 连接,如果不需要再进行数据通信,即可以关闭连接,此时则会发生四次挥手行为。
注意:
浏览器为了提升性能,在 URL 解析之后,实际会先查询是否有缓存,如果缓存命中,则直接返回缓存资源。如果是 HTTPS 协议,在建立 TCP 连接之后,还需要进行 SSL/TLS 握手过程,以协商出一个会话密钥,用于消息加密,提升安全性。为什么电影中的黑客几乎绝不用鼠标?
为什么黑客不使用鼠标,而只用命令行呢?
兄弟,其实你电影看多了。在现实生活中,大多数黑客都是使用图形界面的黑客工具的,和你正在使用的 windows 系统上的那些软件并没有什么太大的区别。一个残酷的真相就是,巨大多数的黑客其实都没有什么太高深的计算机知识,而只是用那些真正牛逼的黑客们开发的工具去做一些貌似很装逼的事情而已。
至于电影为什么要这么拍?原因是多方面的。
1. 这么看着黄拽酷炫吊炸天。电影,当然要追求一个看着帅啊!和你一样用鼠标点击一个写着“pj”两个字的按钮,实在是有点掉价啊!
2. 在西方国家的电脑普及得比我们要早很多。早年间,他们在超市、银行等地方看见的电脑都是黑乎乎的字符操作界面,所以在西方老百姓的眼中,黑乎乎的界面就代表着专业,黑客操作起来就比较像样子了。你没见过这样的东西吗?你仔细去找找身边的超市,那种有年头的,我们身边其实也不少的。只不过我们中国人是直接进入电脑多媒体时代的,所以不会对那玩意儿有什么感觉,只会感觉是一个破玩意儿。
但话说回来,真正厉害的计算机工程师或者电脑黑客,还真就是不适用鼠标的,也不适用图形界面的。事实上,我这个不算太牛逼的工程师,我大多数工作状态下,都是不适用图形界面的。图形界面对于我个人来说最有用的,就只有浏览器这一个软件而已。因为需要打开网页,在命令行下面虽然也能够打开网页,但是那个效果实在是有点不堪了。也不支持看视频,所以还是浏览器好。
如果你不了解我们,你可能很难想想我们是怎么工作的。我尝试简单的说一说吧。
我们的日常工作无非是这样几个方面:1、操作系统和软件;2、编写代码;3、调试软件;4、浏览资料。
在操作系统和软件的时候,绝大多数情况下,都可以使用命令行来替代图形界面。或许这句话说反了,实际是图形界面本来就是用来取代命令行的,因为大多数人不会使用命令行,因此图形界面能够让这些不会使用命令行的人顺利使用计算机。
在 linux、unix 系统下,任何可以在图形界面下操作的事情,都可以使用命令行来处理。实际情况是 windows 下面,也同样可以通过命令行来操作大多数的事情。只不过没有多少人会,因为学习成本相比过高了吧。
那么既然命令行可以操作,并且我还会用命令行操作,为什么要用效率那么低下的图形界面呢?
当然,你可能说了,每次都要敲那么长的命令,不是很累吗?其实没有啦,如果是大量重复的工作的话,我们会写成脚本的,然后运行以下就好啦!更重要的是,在 linux 或者 unix 下面,你可以任意选择不同的语言来写脚本。比如,你只会写 java 语言。没关系,那你就用 java 去写就可以了!
哪怕是一个前端工程师,都可以用 js 语言去写他需要的脚本的。实际上,绝大多数语言都支持写这些各种各样的脚本。在通过胶水语言 bash 或者 python 将这些脚本串起来使用,按就没有任何问题了。
使用脚本,可以大大提高我们的效率的。我本人也写了很多很多的脚本。比如,我自己英文不好,经常需要翻译一些文字,于是我就写了一个脚本,在命令行下面使用。又比如,每次给我一台全新的服务器,都需要设置一遍,而且经常容易忘记事情,于是我就写了一个脚本,每次新服务器安装好操作系统之后,直接一个命令,就把所有的设置和软件全部安装好了。
这些,都是图形界面不能给我们的超高效率。
第二个文字是编写代码。这就不用说了,我们有被称作编辑器之神vim,还有被称其神的编辑器Emacs。我就不说这俩牛逼编辑器有多牛逼、谁更牛逼,容易引起程序员之间的战争。
我个人是使用 vim 编辑器来进行代码编辑的。虽然我也使用图形界面的编辑器比如 atom 之类的,不过也是配置上 vim 快捷键来进行使用的。我不是一个 vim 编辑器高手,只是能够普通使用。不过即便是如此,在大多数情况下,vim 编辑器还是特别高效的。尤其是在某些情况下,我只能使用 vim 编辑器,比如远程连接服务器进行文件编辑以及修改等等。
不过我身边倒是有两个把 vim 编辑器作为处理开发编辑器的,反正比我牛逼多了,我就啥也不说了。
第三个调试软件,这没啥说的,我软件都在命令行下编辑,自然是在命令行下调试啊!除非我在开发图形界面软件,否则,都是在命令行下调试的。
第四个浏览器资料。当然,我也是使用图形界面的浏览器的。不过某些时候,我也愿意使用基于命令行的浏览器。比如 w3m 这个命令行的浏览器就非常非常的好用。用来在上班时间看小说实在是再好不过了。
肯定没几个人能看明白你再黑乎乎的命令行下面正在愉悦的偷偷看小说的。只会认为你很牛逼,很黑客。呵呵。
我个人而言,使用命令行的初衷是为了装逼,毫不讳言,绝对是如此。不过用着用着就发现,命令行是真心的高效。
以上文字只是我的个人观点,如果各位看官有不同的观点欢迎在评论区中给我留言,我会认真的答复每一条评论的。
如果喜欢我的回答,可以给我点赞并关注我,我在这里谢谢大家了。
java虚拟机装在哪个盘比较好?
本人10年开发培训经验,期间经历了Java Web,Android,H5,大数据,PHP等多个不同的方向的开发,也做过软件培训公司的金牌讲师,很有兴趣回答你这个问题。
对于这个问题,我觉得其实没必要纠结的。为啥呢?下面说说我个人的一些见解吧。
1. 软件尽量不要安装在C盘说法的由来
我们都知道,C盘是指电脑硬盘主分区之一,一般用于储存或安装系统使用。针对安装在本地硬盘的单操作系统来说,是默认的本地系统启动硬盘。C盘内大部分的文件主要由Documents and Settings、Windows、Program Files等系统文件夹组成,Program Files文件夹一般都是安装软件的默认位置,但是也是病毒的位置,所以要对C盘进行严密保护。
而早期的电脑,硬盘一般都是机械的,而且空间还相对较小,为了提升系统的加载速度,所以有一种说法,就是尽量不要把软件安装在C盘。
2.现在的状况
但是现在计算机的硬件配置,已经比以前大大提高了。如果我们现在去买个新的笔记本,现在的配置基本都是1T的固态,16g的内存作为标配了,在C盘里别说装一个jvm,就算安装一个大型的游戏,也不见得能有什么太大的影响。我们程序员自己的电脑是用来做开发的,而不是做服务器来用的,如果是服务器,咱们选择的一般都是linux系统了,那也没有C盘D盘那一说了,linux里面没有这概念啊。既然是作为个人开发用的,在目前的计算机硬件条件下,安装一个jvm虚拟机,对电脑的性能有什么影响吗?
3.到底安装在哪里
这个其实就要看自己的想法了。如果就是为了追求那么一点点所谓的开发性能,比如就想让jvm编译java代码可以更快一点点,虽然这一点点可能更不感受不出来,那最好把jvm虚拟机装在C盘里。因为我们知道,安装jvm需要在path里面配置环境变量,而path查找命令,就是安装盘符从前往后找,哪个靠前,就想找到谁,执行的就早一点,其实目前的计算机运行速度,感受不出差别。
但是如果安装在C盘也有麻烦。我们知道,安装在C盘里的东西,一旦重做系统了,里面的内容都没了,而安装配置java环境变量,虽然算不上太麻烦,但是做一次系统配置一次java环境,也挺操蛋的,不如安装到别的盘符方便。
所以到底是安装在C盘,还是别的盘符,就看自己的想法了。
我从事互联网开发10年,主要的研究方向集中在Java web微服务架构领域,Android移动端研发,HTML5前端方向,我会陆续写一些关于互联网技术方面的文章,感兴趣的朋友可以关注我,相信你一定会有所收获。
如果有Java,Android,H5等开发方面的问题,或者是开发求职方面的问题,都可以在评论区留言,或者私信我。
为什么编程序要用英语而不用汉语?
我们是不是都对编写程序的专业人员怀揣着敬畏的态度呢?他们是怎么做到的呢?而且所有的程序一般都是利用英文来编辑的,我们从来没有见到过使用汉语编辑的程序,这是为什么呢?事实上,如果使用汉语编写程序是现在不能做到的,未来有没有可能也很难说,汉语到底为何不能用来编写程序?英语在这方面存在什么优势,我们通过专业的编辑人员的回答,就可以揭秘我们所存在的疑惑,下面我们就一起来了解一下吧。
1、计算机最早是由美国发明研制的,所以这些编程代码最早都是从美国开始的。早起都是数字,但是随着科技的发展,仅仅的数字编程已经满足不了人们,他们选择用英文字母选择代替数字,所以这些代码都是英文。
2、英语是国际语言,世界上大多数国家的主语言都是英语,所以当时的计算机编程用的都是英语。虽然近几年中国在国际上的影响力越来越高,但是汉语的普及率还是很低的,很多国家都不会说汉语,汉字也不认识,怎么能够用汉字来写编程敲代码呢?
3、计算机存储英文也比存储中文要简单的多,英文一共26个字母,连上大小写也只有52个,单词只是字母的排列组合而已;而中文有几万个字,光存这些字就已经很占地方了。
4,用英文能更准确的表达意思。中文的一个词语,在英文里往往对应了多个单词,而这些单词有着独特的语境。比如英文的 push,shift,insert,它们都代表往一个数组里加入元素,但是分别代表在最后压入、在最后加入一个、在任意某个位置插入一个。这里只是举个例子,我经常能感觉到,如果这些专业的单词用得准确的话,往往一眼就能知道这段程序在干什么,不需要再去看细节。
python等它们都有什么关系?
DWC6,我写了一篇自己的一个编程的学习经验分享吧,但是现在我发现我说的都是理论的东西,今天我又想给极客朋友们分享一下实际应用的编程上手教程。下面的内容纯属我自己的一点点想法,内容我认为非常简单,希望大家不会觉得比较难吧,如果觉得有难度希望你在下方评论写出一下,下次我会出更简单的。我写这个文章的目的就是和大家进行分享,同时也当做日记,希望以后如果有朋友问我如何上手或者亲戚家的孩子想学习的我也可以把这篇内容给他们看。废话不多说,下面进入正题。
我的一个项目运用了这三种语言,其实做程序一定要越简单越好,能用一种语言决不用2种,but 为何我要搞这么复杂?
因为!! 每种语言的都有缺点,当缺点影响了效果的时候,必须配合其它语言才能完美,话说大型系统都是多种语言一起上,不是大公司有钱烧的,而是实际的需求要求不同的语言配合完成!
1、我最想用的语言是php、框架选择多、开发速度快、即改即生效,但是php比较恶心的地方也非常多,调用系统命令的话,linux系统的权限问题非常严重,当初为了不用其它语言,php调用系统shell怎么办? 用c语言写了一个程序,编译成二进制linux可执行程序,赋予该程序root权限,然后再写一个shell文件,让c程序调用shell ,最后用php调用c程序来实现以root权限执行shell文件代码的能力,整个过程比较复杂,非常不爽。shell是linux系统原生语言,在控制系统层面上必用的,虽然它的语法和windows 的bat批处理命令是一样一样的恶心,但是跟系统打交道缺不了他,忍了吧。
跟系统打交道用php很他妈的费劲,简直无能。
2、php没有像java那样的application这种全局变量,所以你必须用写文件、缓存、数据库的方式来共享全局变量,来实现全局控制,这是极其恶心的,也就是说php没有全局缓存能力,半个废物,全局功能非常重要。虽然php插件很多哈,但是仍然弱。
3、没法全局控制所有http请求,什么意思?例如,10个人访问php,每个人进程独立,没法对10个人进行一个统一的管理和反馈。
这三个缺点,java、python和nodejs都可以完成,不需要插件配合。所以我被迫选择python配合PHP,所以python的优点很明显了,就是全能型,系统程序可以开发、web网站也可以开发,混合在一起的能力自己全部搞定,纯全能型语言。
nodejs和python一样,是新出来的语言,也是全能的。其实java也是全能的哈,java也很强大,但是我不喜欢用java的原因是它太过于死板和严谨了,但是他的严谨也让它适合做大型程序,稳定性一流、速度也快,就是开发速度不行,太严格太啰嗦了,框架也很庞大,但是java的确是优等生,能力全面不说,应用范围很广,像安卓开发都用java,一举多得,所以java很优秀不假,学java不亏,但是喜不喜欢,那就看个人喜好了,我是不太喜欢,我就喜欢开发速度越快越好,我也不做什么大型系统。
后来,为何我又加了一个nodejs语言,是不是神经病呢?不是,真的是又被逼了,连python也不好使。
python的web服务性能不如php快,同样做网站php访问速度快,所以php在web领域并非浪得虚名,开发快、响应快!
但是php速度不如java web 速度快,如果同样轻量级框架下,java编译成class后的响应速度比php快的,实际如此,因为php是脚本语言,每次都需要翻译成机器语言来执行,而java的字节码翻译速度要快很多了,更接近于机器语言,所以java快是有道理的。
nodejs的需要是因为 web接口,高并发web接口,nodejs比java、php、python都快得多,不是一点得快,是几十倍的快,这在实际应用中可非常重要了,尤其是接口响应速度的,因为按照预期功能,用php开发了,接口响应达不到需求,在不增加服务器的情况下怎么办?用python开发更慢了,用nodejs试试吧,果然快很多,效果很明显 ,为什么呢?因为nodejs的v8引擎是谷歌用在chrome浏览器上的速度很快,为何chrome会成为浏览器界的黑马一统江湖?就因为这v8 ,够轻量级又够快,nodejs给用了。
第二,nodejs是IO异步方式,写过javascript的都知道回调函数被大量使用,这点php做不到,php处理都是同步执行的,命令必须逐条被执行,nodejs不用的,这样节省了很多时间,在等待IO处理的时候,可以做其它事情。
话说,php和python也都能实现IO异步的机制,但是方案不成熟非原生支持,自己处理会很麻烦,万变不离气宗,任何语言都是表象对吧,都是对机器语言的封装,基于对cpu和内存等硬件机制的调用,仅此而已,所以任何语言想要做到同样的能力是完全可以的,但都无法超过电脑硬件的运行体系规则。
所以,因为nodejs在并发响应上的优势选择了它。所以我的程序用了3种语言,php、python、nodejs、shell,之前还有个c语言被python取代了,实际上python也不需要了, php、nodejs、shell就够了。
最后
到底用哪一种语言,根本不是我们可以说的算的,还是要看自己需要什么功能,用哪种语言实现起来编程最快、响应最快。
1、php 适合做前端界面UI层、普通响应级别的webservice接口用于和mysql数据库打通,框架多变成速度快够简单。
2、nodejs适合做IO密集的,并发需求打的、CPU计算少的,接口类。
3、python的能力实际上nodejs也基本ok,所以python作用反而不太大了,但是python在人工智能等类库上非常有优势,大数据爬虫等这种领域太方便,可能用python的大神比较多吧,我们站在巨人的肩膀上那轻松很多,所以python牛逼在类库强大且先进,语言本身全能、开发速度也非常快,也是因为类库太多吧。
很多人吐槽过python代码架构必须用空格或tab缩进,我也想吐槽,有这个必要吗?唯一好处就是代码工整一些,被迫的。
4、java,当今最流行的语言,已经持续很多年,确实强大,应用范围广,全能,各种插件也是很多,有点像人类社会的精英阶层的意思。