Web攻防常识1

Url

"URL" 是统一资源定位符(Uniform Resource Locator)的缩写。它是互联网上用于定位资源的地址,资源可以是网页、图像、视频、文件等。URL通常由多个部分组成,包括协议(如HTTP或HTTPS)、域名(如www.example.com)、端口号(可选,默认为80)、路径(指定资源在服务器上的位置)、查询参数(可选,用于向服务器传递信息)和片段标识符(可选,指定资源中的特定部分)。通过URL,用户可以在浏览器中访问并获取网络上的各种资源。

example:

URL: https://www.example.com:8080/path/to/resource?param1=value1&param2=value2#section3

  1. 协议 (Protocol): https://
    • 这里使用的协议是 HTTPS,表示使用安全套接字层传输协议,对数据进行加密和安全传输。
  2. 域名 (Domain): www.example.com
  3. 端口号 (Port): :8080
    • 端口号指定了服务器上提供服务的端口,这里使用的是 8080 端口。
  4. 路径 (Path): /path/to/resource
    • 路径部分指定了服务器上资源的具体位置,这里是 /path/to/resource。
  5. 查询参数 (Query Parameters): ?param1=value1&param2=value2
    • 查询参数允许向服务器传递额外的信息,参数名和值之间使用等号连接,不同参数之间使用 & 符号分隔。这里有两个参数,param1 和 param2,分别对应的值是 value1 和 value2。
  6. 片段标识符 (Fragment Identifier): #section3
    • 片段标识符允许定位资源中的特定部分,一般在网页中使用锚点链接进行页面内跳转。这里指定了片段标识符为 section3。

这是一个完整的URL示例,包括了协议、域名、端口号、路径、查询参数和片段标识符等各个部分。

HTTP

HTTP(超文本传输协议)是用于在Web浏览器和Web服务器之间传输数据的应用层协议。在HTTP通信中,存在两个重要的概念:HTTP请求和HTTP响应。

HTTP请求 (HTTP Request)

HTTP请求是客户端(例如浏览器)向服务器发送的请求消息,用于获取或传输Web资源。HTTP请求通常包含以下几个部分:

  1. 请求行(Request Line):包括请求方法、请求的URL和HTTP协议版本。
    • 示例:GET /index.html HTTP/1.1
  2. 请求头部(Request Headers):包含关于客户端、请求资源、请求服务器等信息的头部字段。
    • 示例:Host: www.example.com User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4851.0 Safari/537.36
  3. 请求主体(Request Body):对于一些请求(如POST请求),可以包含请求发送的数据,如表单数据、JSON数据等。

HTTP响应 (HTTP Response)

HTTP响应是服务器对客户端发送的HTTP请求的响应消息,用于返回请求的Web资源。HTTP响应通常包含以下几个部分:

  1. 状态行(Status Line):包括HTTP协议版本、状态码和状态消息。
    • 示例:HTTP/1.1 200 OK
  2. 响应头部(Response Headers):包含关于响应、服务器、返回资源等信息的头部字段。
    • 示例:Content-Type: text/html Content-Length: 1234
  3. 响应主体(Response Body):包含实际返回的数据,如HTML页面内容、图片、文件等

HTTP请求示例

GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4851.0 Safari/537.36

HTTP响应示例

HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1234

<!DOCTYPE html>
<html>
<head>
  <title>Welcome to Example.com</title>
</head>
<body>
  <h1>Hello, World!</h1>
</body>
</html>

在这个示例中,客户端发送了一个GET请求获取/index.html页面,服务器返回了状态码200表示成功,并返回了一个HTML页面作为响应的主体内容。响应头部中包含了Content-Type和Content-Length等信息。

HTTP常见状态码

状态码用于表示服务端的响应结果。有如下常见状态码

  1. 1xx(信息性状态码):表示请求已被接收,继续处理。

    • 100 Continue: 请求的初始部分已被接受,客户端应该继续发送其余部分请求。
  2. 2xx(成功状态码):表示请求已成功被服务器接收、理解、并接受处理。

    • 200 OK: 请求成功,服务器正常返回数据。
    • 201 Created: 请求已成功,并且服务器创建了新资源。
    • 204 No Content: 服务器成功处理请求,但不需要返回任何内容。
  3. 3xx(重定向状态码):表示需要客户端采取进一步的操作才能完成请求。

    • 301 Moved Permanently: 资源被永久移动到新位置,客户端应使用新地址重新发起请求。
    • 302 Found: 资源暂时被移动到新位置,客户端应使用新地址发起临时请求。
    • 304 Not Modified: 资源未被修改,客户端可以使用缓存的版本。
  4. 4xx(客户端错误状态码):表示客户端发送的请求有错误。

    • 400 Bad Request: 请求格式有误,服务器无法理解。
    • 401 Unauthorized: 请求要求身份验证。
    • 403 Forbidden: 服务器拒绝请求,权限不足。
    • 404 Not Found: 请求的资源不存在。
  5. 5xx(服务器错误状态码):表示服务器在处理请求时发生了错误。

    • 500 Internal Server Error: 服务器内部错误,无法完成请求。
    • 502 Bad Gateway: 服务器作为网关或代理,从上游服务器接收到无效响应。
    • 503 Service Unavailable: 服务器暂时无法处理请求,通常是由于过载或维护导致。

    两个常用HTTP请求方法Get和Post

    GET 方法:

    1. 用途

      • 获取资源:通常用于从服务器获取数据或资源。
      • 幂等操作:对同一个URL多次使用GET请求,不会产生副作用,也不会改变服务器状态。
    2. 参数传递

      • 参数在URL中传递:通过URL的查询字符串(query string)将参数附加到URL后面。
      • 参数长度限制:由于参数附加在URL中,GET请求对参数长度有限制,不适合传输大量数据。
    3. 安全性

      • 不适合敏感信息:GET请求的参数暴露在URL中,不适合传输敏感信息(如密码)。
    4. 示例

      GET /api/products?id=123 HTTP/1.1
      Host: www.example.com
      

    POST 方法:

    1. 用途

      • 提交数据:通常用于向服务器提交数据,如表单提交、上传文件等操作。
      • 非幂等操作:POST请求可能会对服务器状态产生影响,因此不是幂等的。
    2. 参数传递

      • 参数在请求体中传递:参数以键值对的形式放在请求体中传递,不会暴露在URL中。
      • 参数长度不限:由于参数在请求体中,POST请求没有参数长度限制,适合传输大量数据。
    3. 安全性

      • 适合敏感信息:POST请求的请求体中传输数据,相对于GET请求更适合传输敏感信息。
    4. 示例

      POST /api/login HTTP/1.1
      Host: www.example.com
      
      username=user&password=pass123
      

      比较而言,两者形式上最大的区别是Get没有请求正文(请求体),Post有请求正文(请求体)

    • tip

      在网络通信中,HTTP协议的幂等性指的是对同一个URL的多次请求所产生的影响应该是相同的。例如,使用GET请求来获取数据或查询资源时,多次发送相同的GET请求应该得到相同的结果。对于幂等性的支持可以增加系统的健壮性和可靠性,在网络通信中尤其重要。

    一些常见的请求头和响应头内容

    常见的请求头 (Request Headers):

    1. Host:指定请求的服务器的域名和端口号。
    2. User-Agent:标识客户端的用户代理,通常是浏览器名称和版本信息。
    3. Accept:指定客户端可以接受的响应内容类型,如 text/html, application/json 等。
    4. Content-Type:指定请求体的数据类型,如 application/json, application/x-www-form-urlencoded 等。
    5. Authorization:用于身份验证,包含认证信息,如基本认证、Bearer Token 等。
    6. Cookie:包含客户端的 Cookie 信息,用于跟踪用户状态等。
    7. Referer:指示请求的来源页面 URL,用于防止跨站请求伪造 (CSRF) 攻击。
    8. Cache-Control:控制缓存行为,如 no-cache、max-age 等。
    9. Origin:指示请求的源,用于跨域请求时的 Origin 验证。

    常见的响应头 (Response Headers):

    1. Content-Type:指示响应体的数据类型,如 text/html, application/json 等。
    2. Content-Length:指示响应体的长度(字节数)。
    3. Set-Cookie:在客户端设置 Cookie,用于跟踪用户状态等。
    4. Location:用于重定向,指示客户端应该重定向到的URL。
    5. Cache-Control:控制缓存行为,如 no-cache、max-age 等。
    6. ETag:用于缓存验证,标识资源的版本号。
    7. Access-Control-Allow-Origin:允许跨域请求的源。
    8. Allow:指示支持的 HTTP 方法,如 GET、POST 等。
    9. Expires:指示响应过期时间。
    10. Server:指示服务器的信息,如服务器类型和版本号。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值