web全栈开发,web开发快餐式入门指南 1.1 http

 2023-09-25 阅读 23 评论 0

摘要:由于web应用大多数都在浏览器中进行操作,所以我们有必要先了解一下浏览器里面到底发生了什么。简而言之,当你在浏览器的地址栏中输入网址并按下回车,或者点击了网页上的某个链接时,浏览器就会按照网址给目标服务器发送请求。浏览器和服务器之间的

由于web应用大多数都在浏览器中进行操作,所以我们有必要先了解一下浏览器里面到底发生了什么。简而言之,当你在浏览器的地址栏中输入网址并按下回车,或者点击了网页上的某个链接时,浏览器就会按照网址给目标服务器发送请求。浏览器和服务器之间的请求遵循http协议,协议规定了所使用的格式,只有按照这种格式组织的数据才能相互识别。

具体来讲,浏览器先根据url中的主机部分通过dns查询出ip地址,然后组装http报文,发送给这个ip。服务器接到请求后便会处理,然后也会组装一个报文,把结果放入其中发给浏览器。浏览器根据html或js中写好的逻辑,以刷新页面或者弹出消息框等方式和用户交互。这一来一回才算结束。

格式

web全栈开发,我们可以用浏览器的开发者工具,或者其它抓包软件进行抓包,从而看到背后的http请求是什么。比如访问www.baidu.com,则有可能会看到这样的报文:

GET / HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8
Cookie: ...HTTP/1.1 200 OK
Server: bfe/1.0.8.14
Date: Tue, 23 Feb 2016 12:43:08 GMT
Content-Type: text/html;charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Cache-Control: private
Expires: Tue, 23 Feb 2016 12:43:08 GMT
Content-Encoding: gzip
X-UA-Compatible: IE=Edge,chrome=1
BDPAGETYPE: 2
BDQID: 0xd678b56500003dd4
BDUSERID: 18401
Set-Cookie: ......

可以看到,上半部分是请求(request)的报文,下半部分是响应(response)的报文。请求和响应的报文都由三部分组成:状态行、消息头(header)和消息体(body)。其中状态行在请求或者响应中,分别叫做请求行和响应行,消息头在请求或者响应中也分别叫做请求头和响应头,消息体也叫正文,是可选的。

请求报文

我们先看请求报文,第一行GET / HTTP/1.1就是请求行,其中GET是方法,/是路径,HTTP/1.1是所使用的HTTP版本。

创建web项目、之后几行以:分割的文本是请求头,请求头的种类很多,其中还有不少自定义的请求头,但是上面列出的都是常见的请求头,我们只需要了解它们。

Host是所请求的域名,由于现在大量虚拟主机和云主机的存在,一个ip的主机上往往有很多个网站,所以要加上Host请求头,不能简单以ip来定位。

Accept是浏览器接受的格式,我们可以看到有html、xhtml和xml。

asp.net web开发框架、User-Agent是浏览器的类型,也包含浏览器内核类型和操作系统类型。由于用户可以任意改动请求头,它不一定是可信的。

Accept-Encoding是浏览器接受的编码,我们可以看出浏览器启用了gzip压缩。

Accept-Language是浏览器接受的语言。

web后端开发学什么、Cookie是用户标识用户的数据,由服务端程序生成,储存在浏览器中,每次浏览器访问一个网站,都要带上已有的Cookie。

上面的报文中,由于是GET方法,没有消息体。

消息体如果存在,和消息头以两个换行\n\n分隔。如果有消息体的话,请求头中还要加上两种。一个是Content-Length,是消息体的长度。还有一个是Content-Type,是消息体的格式,这个参数很重要,因为大多数框架都自动解析消息体,如果错了的话就会解析失败。

响应报文

为什么大多数是web开发。同理,响应报文的第一行HTTP/1.1 200 OK是响应行,HTTP/1.1是版本,200是状态码,OK是状态文本。响应头和请求头的格式一样,但内容有所不同。而且,服务器设置Cookie所用的响应头是Set-Cookie而不是Cookie

上面的响应报文是带消息体的,同样和响应头以\n\n分隔。

方法

接下来要讲一下HTTP的方法。

web开发是什么意思,HTTP的方法有很多种,但是如果你打开抓包软件记录你一天的浏览历史的话,你会发现99%都是GET或者POST,其中GET占大多数。一般情况下,我们只会用到这两种方法,GET常用于资源的获取,比如页面显示,POST则用于动作的提交,比如删除、新增、修改某种资源。

GET和POST都可以带参数,只不过参数在报文中的位置不同。GET方法中的参数出现在路径中,以?分割,比如/path/to/page?k1=v1&k2=v2。而且你也发现了,这种位置上只能写成键值对形式。HTTP协议中并没有对参数的长度进行限制,但由于GET参数是写在url中的,在浏览器以及服务器中会有限制,比如Chome中限制url长度不超过8182字节。

POST的参数在消息体中,长度任意。而且格式任意,比如可以使用json和xml,只要把Content-Type配置对了,让服务器能够正常识别就好。服务器可以限制消息体的长度,但也可以通过配置来取消。

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/2/96850.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息