赞
踩
目录
在了解完HTTP协议的基础知识之后,可以知道该协议有两种形式的报文,上一节主要了解了HTTP协议两种报文的基本格式。
本节主要针对HTTP协议的请求报文(Request)进行详解,对请求报文的具体格式规范以及每个关键字的含义进行详细介绍。
序列:HTTP/HTTPS - 002
HTTP协议请求报文是以字符文本的格式传输,具体包含以下四大部分:
如果Body存在,则在Header中会有一个Content-Length属性来标识Body的长度。
具体的请求Request报文格式分布如图:
实际开发中的请求报文:
下文将针对请求报文这四大部分内容进行具体详解。
[方法]+[url]+[版本号];
我们平时俗称的“网址”其实就是说的URL(Uniform Resource Locator统一资源定位符)。
在互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。
例如这是一个百度的网址,其实也就是百度的URL。
一个URL的标椎基本格式如下:
拆解上述图中的URL,格式分段详解:
关于query string:query string中的内容是键值对结构,其中的key和value的取值和个数,完全都是程序员自己约定的。我们可以通过这样的方式来自定制传输我们需要的信息给服务器。
在日常开发中很多时候URL可以省略部分内容。
在HTTP协议的请求报文中,有很多方法可以使用,不同的方法代表着不同的报文功能。
HTTP协议请求报文的所有方法如下(很多不常使用):
下边对HTTP请求报文中的常用方法进行详解。
GET是最常用的HTTP方法,没有之一,其常用于获取服务器上的某个资源。
在浏览器中直接输入一个网址(URL),此时浏览器就会发送出一个GET请求,另外HTML中的link,img,script等标签,也会触发GET请求。
GET请求特点:
GET请求通常会把要传给服务器的数据,加到url的query string中(不是硬性规定,也可以不遵守),印证GET特点的第二条。
POST方法也是一种常见的方法(仅次于GET方法),多用于提交用户输入的数据给服务器。
在登陆页面通过HTML中的form标签可以构造POST请求,或者使用JavaScript的ajax也可以构造POST请求。
POST请求特点:
POST请求通常把要传给服务器的数据,加到Body中(不是硬性规定,也可以不遵守)。
GET和POST的区别:
补充说明:
在HTTP协议的请求报文方法中,最常用的是GET和POST方法。除此之外的所有方法,在开发过程中都很少使用,所以对于其他的方法仅了解即可。
这些方法的HTTP请求可以使用ajax来构造,也可以使用一些第三方工具。
版本号表示本次HTTP协议的请求使用的是HTTP协议的具体哪个版本。
请求报文的版本号会与响应报文的版本号相对应,否则会出现通信错误。
版本号一般有三种,如:HTTP1.0、HTTP1.1和HTTP2.0。
请求的属性,Header的整体的格式也是“键值对”结构。每个键值对独占一行,键和值之间使用冒号+空格进行分割。
请求报头的属性有很多,此处仅介绍几个常见的。
以下图的请求报文属性为例:
表示服务器主机的地址和端口(这个信息在URL中也存在的)。
表示Body中的数据长度(请求报文里有Body,才有该属性存在)。
表示请求的Body中的数据格式(请求报文里有Body,才有该属性存在)。
HTTP协议的请求格式一般有:
后续给服务器提交给请求,不同的Content-Type,服务器处理数据的逻辑是不同的。
服务器返回数据给浏览器,也需要设置合适的Content-Type,浏览器也会根据不同的Content-Type 做出不同的处理。
User-Agent简称UA,表示浏览器/操作系统的属性,现在主要用来区分PC端还是移动端设备。
UA表述了主机操作系统版本和浏览器的版本,通俗点说,UA表示你用什么设备上网。
表示这个页面是从哪个页面跳转过来的。
如果直接在浏览器中输入URL,或者直接通过收藏夹访问页面时是没有Referer属性的。
Cookie中存储了一个字符串,往往是从服务器返回的数据(也可以是页面自己生成的)。Cookie是按照键值对的形式来组织的,这里的键值对也都是程序猿自定义的(和query string差不多)。
Cookie存储到浏览器所在主机的硬盘上,并且是按照域名为维度来存储的(每个域名下可以存自己的Cookie,彼此之间不影响)。
Cookie中存储一些浏览器发给服务器的临时数据,浏览器就把这些临时数据存在了本地,后续再请求这个服务器的时候,就会把Cookie中的内容自动代入到请求中,发给服务器,服务器通过Cookie的内容做一些逻辑上的处理。
往往可以通过Cookie这个字段实现"身份标识"的功能。每个不同的域名下都可以有不同的Cookie,不同网站之间的Cookie并不冲突。
遇到空行表示Header(报头)部分结束,同时也是Body(正文)部分开始。
HTTP在传输层依赖TCP协议,TCP是面向字节流的,如果没有这个空行,就会出现“粘包问题”,空行就可以解决上述问题。
空行后面的内容都是Body,Body允许为空字符串。
如果Body存在,则在Header中会有一个Content-Length属性来标识Body的长度;Content-Type表示请求的Body中的数据格式。
Body的内容为字符串文本格式,具体传输主机中与服务器的交互数据,可以传输字符串数据、二进制图片、视频等,但是二进制数据需要进行转码表示。
Body的格式一般有:
后续给服务器提交给请求,不同的Content-Type,服务器处理数据的逻辑是不同的。
以上便是HTTP协议中的请求报文详解Request,感谢阅读。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。