CTF-web基础 HTTP协议

基础

HTTP=Hypertext Transfer Protocol 超文本链接协议,他是无状态的(每一次请求都是独立的),发出request发给服务器然后返回responce,现在的版本是1.1版本,默认端口80(https是443),常用8080/3128/8081/9098,如果要去指定端口访问,在后面加上冒号和端口即可。 

我们打开火狐浏览器,输入百度的官网,通过firebug'插件就可以监控浏览器发出去的信息和返回的内容,发送的如下:

这就是http的请求,上面的文字就是HTTP所规定的,包括以下部分:GET(要干嘛),第二行是要去访问的网站,后面的部分统称header。

request

request=动词+url

以下是一个例子

第一行是请求行,http里面有7个动词,get是其中之一。

host是请求的地址,

请求头里面,accept是接收的东西,除此之外还有接受语言,user-agent是使用的浏览器,内容长度。空行后面的即使要请求的参数,多个参数用&隔开。

请求参数两种方法

方法一(get)

url:?参数1=参数值&参数2=参数值(动词时get时)

方法二(post)

request body传参(动词用post)

注意:参数以键值对的方式出现。如:p=12。

请求次数

有的时候我们请求了一个url但是我们会发现有很多请求,这取决于html网页的写法,有没有使用其他资源 ,比如网页只有文本,那一次就可以,但是如果有图片等其他的东西遇到时候还要去再请求。

请求次数太多可能会减慢网页速度,一次需要去合并图片等。

缓存

我们知道当我们在请求的时候会有好多次请求,但是如果我们再去请求一次,会发现请求次数变少了,原因就是在之前的一次请求的时候,我们图片这些就会缓存下来,不需要再去请求一次了。

但是网页还是要去再去请求,因为他的头信息说明了要去重新请求:must-revalidate

但是图片等文件是没有的。我们可以在缓存栏目里面看到我们的文件失效日期

html最好不熬缓存,图片不要去缓存。

http动词

我们在前面的request里面第一个词就是动词,那么除了get还有哪些词呢。

  • GET:‌用于从服务器获取资源,‌可以是单个或多个资源。‌不会对服务端数据产生影响(会影响服务器状态),比较安全,可以被缓存
  • POST:‌用于在服务器新建一个资源。‌提交数据,比如注册账号,支付。
  • PUT:‌用于在服务器更新资源,‌客户端提供改变后的完整资源。‌修改。
  • DELETE:‌用于从服务器删除资源。‌
  • HEAD:‌获取资源的元数据,‌不返回资源本身。‌
  • OPTIONS:‌获取关于资源的哪些属性是客户端可以改变的信息。‌
  • PATCH:‌用于在服务器更新资源,‌客户端提供改变的属性,‌如某个字段+1。‌
  • 注意idempotent是幂等性的意思:多次处理是否会发生变化、
  • Cacheable是缓存的意思。

GET和POST的区别

GET和POST是HTTP协议中定义的两种不同的请求方法,‌它们在多个方面存在显著的区别。‌

  • 数据传输方式:‌

    • GET方法将数据以查询字符串的形式附加在URL之后进行传输,‌而POST方法则将数据放在请求体中发送。‌这意味着GET请求的参数直接暴露在URL中,‌而POST请求的参数对用户是不可见的。‌
  • 数据长度限制:‌

    • GET请求对URL的长度有限制,‌这通常限制了能够通过GET方法传输的数据量。‌不同浏览器和服务器对URL长度的限制不同,‌一般在2KB到8KB之间。‌相比之下,‌POST请求没有对请求体长度做特别限制,‌可以传输大量数据。‌
  • 安全性:‌

    • GET请求的参数是明文传输的,‌会显示在url里面,因此不适合传输敏感信息,‌如密码等。‌而POST请求将参数放在请求体(request body)中,‌相对于GET请求更加安全,‌可以传输敏感信息。
  • 缓存处理:‌

    • GET请求可以被缓存,‌因为GET请求是幂等的,‌即多次相同的GET请求对服务器的状态没有影响,‌可以利用缓存来提高性能。‌相反,‌POST请求不能被缓存,‌因为POST请求可能对服务器的状态产生影响,‌每次请求都需要重新获取最新的数据。‌
    • .GET请求刷新服务器或者回退没有影响,POST请求回退时会重新提交数据请求。
  • 幂等性:‌

    • GET请求是幂等的,‌即多次相同的GET请求对服务器的状态没有影响。‌而POST请求不是幂等的,‌多次相同的POST请求可能会改变服务器的数据或状态。‌
  • 使用场景:‌

  • GET方法适合用于获取资源,‌例如获取页面、‌图片、‌视频等,‌因为它不会对服务器的状态进行修改,‌并且能够被缓存,‌提高页面加载的速度。‌而POST方法适合用于提交数据,‌例如提交表单、‌上传文件等,‌因为它可以传递大量数据,‌并且相对更加安全。‌

发送请求

GET

浏览器默认get,get提交在url加上?然后传参。

POST

  1. 表单提交是最常见的 POST 数据方式之一。通过在 HTML 表单中设置 method="post",在用户提交表单时,表单数据会作为键值对的形式以 application/x-www-form-urlencoded格式发送到服务器。数据会被编码为 URL 参数,例如 key1=value1&key2=value2。服务器端可以通过解析请求体中的数据来获取表单字段的值。

  2. JSON 数据(JSON Data):

    JSON 数据是一种常见的数据交换格式,可以用于 POST 请求中。在这种方式下,客户端将数据作为 JSON 对象发送给服务器。请求的 Content-Type头部应设置为 application/json,请求体中包含一个 JSON 对象,服务器端可以解析 JSON 数据并进行相应的处理。

  3. XML 数据(XML Data):

    类似于 JSON 数据,XML 数据也可以用于 POST 请求。在这种方式下,客户端将数据作为 XML 文档发送给服务器。请求的 Content-Type头部应设置为 application/xml,请求体中包含一个 XML 文档,服务器端可以解析 XML 数据并进行相应的处理。

  4. 文件上传(Multipart Form Data):

    如果需要上传文件,可以使用文件上传方式。这种方式下,请求的 Content-Type头部应设置为 multipart/form-data,请求体中的数据被分割成多个部分,每个部分都有自己的头部和内容,其中包括文件数据和其他表单字段的数据。服务器端可以解析请求体中的各个部分,获取文件和其他字段的数据。

  5. 借助工具:借助hackbar等工具进行提交,

响应(response)

例子如下

200是ok的意思

LAST-Modified是最后响应时间

常见状态码

HTTP状态码用于表示服务器对客户端请求的处理结果。不同的状态码可以帮助开发者和用户理解请求处理的结果。以下是一些常用的HTTP状态码及其含义:

1xx(信息性状态码):
100 Continue**:初始部分已收到,客户端应继续发送请求的其余部分。
101 Switching Protocols**:服务器正在切换协议。

2xx(成功状态码)
200 OK**:请求成功,服务器返回请求的资源。
201 Created**:请求成功并创建了新资源。
204 No Content**:请求成功,但没有返回内容。

3xx(重定向状态码)
301 Moved Permanently**:请求的资源已被永久移动到新位置。
302 Found**:请求的资源临时移动到其他位置。
304 Not Modified**:资源未被修改,可以使用缓存的版本。

4xx(客户端错误状态码)
400 Bad Request**:请求无效,服务器无法理解。
401 Unauthorized**:请求未经授权,需要用户验证。
403 Forbidden**:服务器拒绝请求,即使有认证信息也不允许访问。
404 Not Found**:请求的资源未找到。

5xx(服务器错误状态码)
500 Internal Server Error**:服务器内部错误,无法完成请求。
502 Bad Gateway**:作为网关或代理的服务器收到无效响应。
503 Service Unavailable**:服务器暂时无法处理请求(通常是由于过载或维护)。

  • 34
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值