HTTP:超文本传输协议
1、http请求
只要我们打开一个网页,就会自动向服务器发送一个http请求,服务器会返回一个回复,即我们看到的网站内容。
http请求消息头及解释:
Host:用来告知服务器,请求的资源所处的互联网主机名和端口号。
User-Agent:这个消息头提供与浏览器或生成请求的其他客户端软件有关的信息。
Accept:这个消息头用于告诉服务器,客户端愿意接受哪些内容,如图像类型、办公文档格式等。
Accept-Language:是一个实体消息首部,用来说明访问者希望采用的语言或者是语言的组合。Accept-Encoding:这个消息头用于告诉服务器,客户端愿意接受哪些内容编码。
Content-Type:表示具体请求中的媒体类型信息,确切地说是客户端告知服务端,自己即将发送的请求消息携带的数据结构类型,好让服务端接收后以合适的方式处理。
Content-Length:用于描述HTTP消息实体的传输长度。
Origin:这个消息头用在跨域Ajax请求中,用于指示提出请求的域。
Referer:这个消息头用于指示提出当前请求的原始URL。
Cookie:这个消息头用于向服务器提交它以前发布的Cookie。
(1)get
说明http方法(最常用),作用是从web服务器获取一个资源,URL通常由请求资源名称及一个包含客户端向该资源提交的参数的可选查询字符串组成。
(2)host
用于指定出现在被访问的完整URL中的主机名称。
(3)accept
表示浏览器支持的MIME类型。
(浏览器支持的MIME类型是text/html、application/xhtml+xml、application/xml、*/*)
/前是type(类型),/后是subtype(子类型)
text:用于标准化表示的文本信息。text/html表示html文档。
application:用于传输应用程序数据或二进制数据。
application/xhtml+xml表示xhtml文档。
application/xml表示xml文档。
(4)referer
用于表示发出请求的原始URL。
(5)accept-language
表示浏览器支持的语言类型,包括中文(zh)、简体中文(zh-cn)
优先支持简体中文,q为权重系数,q越大,请求越倾向于获得其“;”前的类型表示的内容;
若没有指定q值,默认为1,用q=0来题型服务器浏览器不接受的内容类型。
(6)user-agent
提供与浏览器或其他生成请求的客户端软件有关的信息。
2、http响应
Content-Type:返回内容的MIME类型。
Date:原始服务器消息发出的时间。
Server:这个消息头提供所使用的Web服务器软件的相关信息。
Set-Cookie:这个消息头用于向浏览器发布Cookie,浏览器会在随后的请求中将其返回给服务器。Transfer-Encoding:文件传输编码。
Vary:告诉下游代理是使用缓存响应还是从原始服务器请求。
X-Frame-Options:这个消息头指示浏览器框架是否以及如何加载当前响应。
上面的代码代表的是服务器响应返回代码,响应完以后,就可以看到网站的状态。
(1)HTTP/1.1
表示使用的HTTP版本。
(2)200
表示请求结果的数字状态码(200最常用),表示成功提交了请求,正在返回所请求的资源。
(3)OK
进一步说明响应状态,可以包含任何值,当前浏览器不将其用于任何目的。
(4)Server
指明所使用的Web服务器软件。有时还包括其他信息,如所安装的模块和服务器操作系统,但其中包含的信息可能并不准确。
(5)Set-Cookie
消息头向浏览器发送另一个Cookie,它将在随后向服务器发送的请求中由Cookie消息头返回。
(6)Pragma
消息头指示浏览器不要将响应保存在缓存中。
(7)Expires
消息头指出响应内容已经过期,因此不应保存在缓存中。
(8)content-type
表示消息主体中包含一个HTML文档。
(9)content-length
规定消息主体的字节长度。
3、除get和post外的其他方法
(1)HEAD
这个方法的功能与GET方法相似,但服务器不会在其响应中返回消息主体。用于检查某一资源在向其提交GET请求前是否存在。.
(2)TRACE
用于诊断。检测客户端与服务器之间是否存在任何操纵请求的代理服务器。
(3)OPTIONS
要求服务器报告对某一特殊资源有效的http方法,通常返回一个Allow消息头的响应,并在其中列出所有有效的方法。
(4)PUT
试图使用包含在请求主体中的内容,向服务器上传指定的资源。
4、cookie
服务器使用set-cookie响应消息头发布cookie
Set-Cookie:tracking=tI8rk7joMx44S2Uu85nSWc
然后,用户的浏览器自动将下面的消息头,添加到随后返回给同一服务器的请求中。Cookie:traeking=tI8rk7joMx44S2Uu85nSWc
Cookie一般由一个名/值对构成,可以在服务器响应中使用几个Set-Cookie消息头发布多个Cookie,并可在同一个Cookie消息头中用分号分隔不同的Cookie,将它们全部返回给服务器。
Set-Cookie消息头还可包含以下任何可选属性,用它们控制浏览器处理Cookie的方式:
(1)Expires
用于设定Cookie的有效时间
(2)Domain
用于指定Cookie的有效域
(3)Path
用于指定Cookie的有效URL路径。
(4)Secure
如果设置这个属性,则仅在HTTPS请求中提交Cookie。
(5)HTTPOnly
如果设置这个属性,将无法通过客户端JavaScript直接访问Cookie。
5、状态码
每条http响应消息必须在第一行中包含一个状态码,说明请求结果。
分类:
(1)1xx——提供信息
100 Continue:当客户端提交一个包含主体的请求时,将发送这个响应,表示已收到请求消息头。
(2)2xx—请求被成功提交
200 OK:表示已成功提交请求,且响应主体中包含请求结果。
201 Created:PUT请求的响应返回这个状态码,表示请求已成功提交。
(3)3xx——客户端被重定向到其他资源
301 Moved Permanently:本状态码将浏览器永久重定向到另外一个在Location消息头中指定的URL,以后客户端应使用新URL替换原始URL。
302 Found:本状态码将浏览器暂时重定向到另外一个在Location消息头中指定的URL,客户端应在随后的请求中恢复使用原始URL。
304 Not Modified:本状态码指示浏览器使用缓存中保存的所请求资源的副本,服务器使用If-Modified-Since与If-None-Match消息头确定客户端是否拥有最新版本的资源。
(4)4xx——客户端错误
400 Bad Request:本状态码表示客户端提交了一个无效的HTTP请求,当以某种无效的方式修改请求时(例如,在URL中插入一个空格符),可能会遇到这个状态码。
401 Unauthorized:说明服务器在许可请求前要求HTTP进行身份验证,WWW-Authenticate消息头可以详细说明所支持的身份验证类型。
403 Forbidden:本状态码指出,不管是否通过身份验证,禁止任何人访问被请求的资源。
404 Not Found:本达态码表示所请求的资源并不存在。
405 Method Not Allowed:本状态码表示指定的URL不支持请求中使用的方法,例如,如果试图在不支持PUT方法的地方使用该方法,就会收到本状态码。
413 Request Entity Too Large:如果在地代码中存在缓冲问题并就此提交超长数据串,则本状态码表示请求主体过长,服务器无法处理。
414 Request-url Too Long:与前一个响应类似,本状态码表示请求中的URL过长,服务器无法处理。
(5)5xx——服务器执行请求时遇到错误
500 Intermal Server Error:本状态码表示服务器在执行请求时遇到错误,当提交无法预料的输入、在应用程序处理过程中造成无法处理的错误时,通常会收到本状态码,应该仔细检查服务器响应的所有内容,了解与错误性质有关的详情。
503 Serice Uharalable:通常本状态码表示尽管Web服务器运转正常并且能够响应请求,但服务器访问的应用程序还是无法做出响应。
6、HTTPS
本质与http一样,都属于应用层协议,但HTTPS通过安全传输机制(安全套接层)传送数据。
http传输主要是进行明文传输,HTTPS则对所有数据都进行了加密。
7、常见编码及常见编码字符
(1)URL编码
以“%”为前缀,后面是字符的两位十六进制ASCII代码。
%3d代表=;
%25代表%;
%20代表空格;
%0a代表新行;
%00代表空字节;
注意:“+”代表URL编码的空格
(2)Unicode编码
16位Unicode编码的工作原理与URL编码类似,通过HTTP进行传输,字符以“%u”为前缀,其后是这个字符的十六进制Unicode码点。
%u2215代表/;
%u00e9代表é。
(3)UTF-8编码
这是一种长度可变的编码标准,它使用一个或几个字节表示每个字符,也是通过http进行传输,
UTF-8编码的多字节字符以%为前缀 其后用十六进制表示每个字节。
%c2%a9代表©;
%e2%89%a0代表≠。
(4)HTML编码
"代表";
&apos:代表';
&代表&;
<代表<;
>代表>。
此外,任何字符都可以使用它的十进制ASCII码进行HTML编码
";代表";
#39;代表'。
也可以使用十六进制的ASCI码(以x为前缀)
"代表";
'代表'。
(5)Base64编码
Base64编码仅用一个可打印的ASCII字符就可以安全转换任何二进制数据。
它常用于对电子邮性附件进行编码,使其通过SMTP安全传输,还可以用于在基本HTTP验证机制中对用户证书进行编码。
Base64编码将输入数据转换成3个字节块,每个字节块被划分为4段,每段6个数据位。这6个数据位有64种不同的排列组合。因此每个段可以使用一组64个字符表示,Base64编码使用以下字符集中只包含可打印的ASCI字符:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-/。
如果最后的输入数据块不能构成3段输出数据,就用一个或两个等号(=)补足输出。
关于base64在之前的博客中有详细介绍,包括它的转换原理和过程、对照表等:
(6)十六进制编码
许多应用程序在传输二进制数据时直接使用十六进制编码,用ASCII字符表示十六进制数据块。
十六进制码和base64码通常都很容易辨认,我们应经常留意。
后面会继续更新Web、CTF、kali等相关的一些知识
创作不易,喜欢的可以收藏点赞关注支持一下哈
谢谢!