Web-Http基本概念(请求与响应)

简介: Web-Http基本概念(请求与响应)

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等相关的一些知识

创作不易,喜欢的可以收藏点赞关注支持一下哈

谢谢!

 

目录
相关文章
|
16天前
|
缓存 前端开发 API
|
4天前
|
JSON API 数据格式
Python中获取HTTP请求响应体的详解
本文介绍了如何使用Python的`requests`和`urllib`库发送HTTP请求并处理响应体。`requests`库简化了HTTP请求过程,适合快速开发;`urllib`库则更为底层,适用于性能要求较高的场景。文章详细演示了发送GET请求、处理JSON响应等常见操作。
|
10天前
|
前端开发 JavaScript Java
如何捕获和处理HTTP GET请求的异常
如何捕获和处理HTTP GET请求的异常
|
12天前
|
开发者
HTTP 协议请求方法的发展历程
【10月更文挑战第21天】
|
12天前
|
安全
HTTP 协议的请求方法
【10月更文挑战第21天】
|
12天前
|
缓存 安全 前端开发
HTTP 协议的请求方法在实际应用中有哪些注意事项?
【10月更文挑战第29天】HTTP协议的请求方法在实际应用中需要根据具体的业务场景和需求,合理选择和使用,并注意各种方法的特点和限制,以确保网络通信的安全、高效和数据的一致性。
|
16天前
|
安全 API 数据安全/隐私保护
常见的HTTP请求方法
【10月更文挑战第25天】这些HTTP请求方法共同构成了客户端与服务器之间交互的基础,使得客户端能够根据不同的需求对服务器资源进行各种操作。在实际应用中,开发者需要根据具体的业务场景和资源的性质选择合适的请求方法来实现客户端与服务器之间的有效通信。
|
1月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
100 3
|
15天前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
101 44
|
11天前
|
前端开发 API 开发者
Python Web开发者必看!AJAX、Fetch API实战技巧,让前后端交互如丝般顺滑!
在Web开发中,前后端的高效交互是提升用户体验的关键。本文通过一个基于Flask框架的博客系统实战案例,详细介绍了如何使用AJAX和Fetch API实现不刷新页面查看评论的功能。从后端路由设置到前端请求处理,全面展示了这两种技术的应用技巧,帮助Python Web开发者提升项目质量和开发效率。
25 1