[Day2] HTTP 基础

前言

本来想要跳过这章直接进入正题,但如果写那些攻击原理的时候边讲HTTP的东西,感觉会有点混乱,於是就有了这篇的诞生。

正文

HTTP 超简略介绍

HTTP 全称 HyperText Transfer Protocol,是一个IPS(Inernet Protocol Suite)中应用层(Application layer)的一种协议。用作客户端和服务器端之间的Request和Response的标准。
另外需要知道的是HTTP URI Scheme,直接上范例比较容易理解:

http://example.com:80/index.php?id=1#section-1.1
http://<主机>:/<路径>?<查询(quary)>#<段落(fragment)>

  1. HTTP,这边原本应该是protocol,但今天主要讲述HTTP URI Scheme,因此其他协定就不多说
  2. 主机,持有资源的服务器端
  3. port,一般若是浏览预设80 port的网站通常会被省略,而443的话在protocol那边会变成https
  4. 路径: 访问主机中的特定资源的地方
  5. 查询(quary),通常用来提供特定目的动作,例如搜寻网站某个data
  6. 段落(fragment),可以跳转到网站的某个段落,例如RFC 7230的HTTP URI Scheme段落就可以使用这样的方式:
    https://datatracker.ietf.org/doc/html/rfc7230#section-2.7.2
    或是也可以用#:~:text=<文字>的方式跳转到指定的文字段落:
    https://ithelp.ithome.com.tw/articles/10265148#:~:text=OSCP

碍於篇幅 HTTP先介绍到这里,有兴趣可以看RFC文件

Request

当你对网站发起一个Request时,会遵循格式发送
先看下面的例子,这是对google发起的request,每行结尾都有一组CRLF(\r\n)

GET / HTTP/1.1
Host: google.com
Sec-Ch-Ua: " Not A;Brand";v="99", "Chromium";v="92"
Sec-Ch-Ua-Mobile: ?0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
X-Client-Data: CKLbygE=
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate
Accept-Language: zh-TW,zh;q=0.9,en-US;q=0.8,en;q=0.7
Connection: close

第1行是 request line,格式为:
method target http-version
对应
GET / HTTP/1.1

Method

在RFC 7231、5789中定义了以下Method,除此之外也可以客制化Method。

  • GET
  • HEAD
  • POST
  • PUT
  • DELETE
  • CONNECT
  • OPTIONS
  • TRACE
  • PATCH

Header

从第2行开始是各式各样的headers,又依据用途分为四种类型,在後面的攻击会再详细介绍:

  • General Header Fields
  • Request Header Fields
  • Response Header Fields
  • Entity Header Fields

下篇预告: HTTP Verb Tampering


<<:  [Day15] 学 Reactstrap 就离 React 不远了 ~ 用 Tooltips 熟悉 useState

>>:  [DAY 4] _ 用Keil5直接编写暂存器操控MCU的GPIO口_(建Keil5环境)

30天打造品牌特色电商网站 Day.28 网站分析工具

一转眼30天的文章就快到尾声啦,在结束之前这两天会跟大家分享关於网站分析以及SEO优化的部分,网站分...

javascript流程控制-回圈

while回圈计算1加到100: for回圈计算1加到100: break跟continue的范例:...

IOS Swift 请问你哪位 ? Protocol<协定>自我介绍。

前言 昨天问了面试网页前端的问题,收到板上前辈的许多回应真的是受宠若惊,让我感受到IT人的刚性温暖非...

IT铁人DAY 14-Decorator 装饰者模式

  今天要介绍的Decorator Pattern,跟昨天的Composite Pattern都是属...

[ Day 9 ] - 函式

函式 一个函式内会包装一段执行的动作,可以被重复的使用 如何宣告函式 宣告函式时,需要使用 func...