title: http数据包
tags: http
abbrlink: 4b510cae
date: 2022-07-15 08:33:45

Https/Http

  • HTTPS协议需要到CA申请证书,一般免费证书很少,需要交费。
  • HTTP协议运行在TCP之上,所有传输的内容都是明文,HTTPS运行在SSL/TLS之上,SSL/TLS运行在TCP之上,所有传输的内容都经过加密的。
  • HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,HTTP是80,HTTPS是443。
  • HTTPS可以有效的防止运营商劫持,解决了防劫持的一个大问题。

Request 请求数据包数据格式

Request Headers
POST /adduser HTTP/1.1
Host: localhost:8030
Connection: keep-alive
Content-Length: 16
Pragma: no-cache
Cache-Control: no-cache
Origin: chrome-extension://fdmmgilgnpjigdojojpjoooidkmcomcm
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/66.0.3359.181 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9

请求行

请求行由三个标记组成:请求方法;请求 URL;HTTP 版本,它们用空格分享。
例如:

GET /index.html HTTP/1.1

请求方式

  • 常见的几种请求方法:
    GET、POST、COOKIE、OPTIONS、PUT、MOVE、DELETE、TRACE
  • 服务器端的接受:
    GET、POST、COOKIE、REQUEST

  • HTTP 规划定义了 8 种可能的请求方法:

GET:检索 URL 中标识资源的一个简单请求
HEAD:与 GET 方法相同,服务器只返回状态行和头标,并不返回请求文档
POST:服务器接受被写入客户端输出流中的数据的请求
PUT:服务器保存请求数据作为指定 URL 新内容的请求
DELETE:服务器删除 URL 中命令的资源的请求
OPTIONS:关于服务器支持的请求方法信息的请求
TRACE:web 服务器反馈 Http 请求和其头标的请求
CONNECT :已文档化,但当前未实现的一个方法,预留做隧道处理


HTTP Request Header 请求头

  • 由关键字/值对组成,每行一对,关键字和值用冒号分享。请求头标通知服务器腾于客户端的功能和标识。
    Accept:指定客户端能够接收的内容类型。
    Accept-Charset:浏览器可以接受的字符编码集。
    Accept-Encoding:指定浏览器可以支持的web服务器返回内容压缩编码类型。
    Accept-Language:浏览器可接受的语言。
    Accept-Ranges:可以请求网页实体的一个或者多个子范围字段。
    AuthorizationHTTP:授权的授权证书。
    Cache-Control:指定请求和响应遵循的缓存机制。
    Connection:表示是否需要持久连接。(HTTP 1.1默认进行持久连接)
    CookieHTTP:请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。
    Content-Length:请求的内容长度。
    Content-Type:请求的与实体对应的MIME信息。
    Date:请求发送的日期和时间。
    Expect:请求的特定的服务器行为。
    From:发出请求的用户的Email。
    Host:指定请求的服务器的域名和端口号。
    If-Match:只有请求内容与实体相匹配才有效。
    If-Modified-Since:如果请求的部分在指定时间之后被修改则请求成功,未被修改则返回304代码。
    If-None-Match:如果内容未改变返回304代码,参数为服务器先前发送的Etag,与服务器回应的Etag比较判断是否改变。
    If-Range:如果实体未改变,服务器发送客户端丢失的部分,否则发送整个实体。
    If-Unmodified-Since:只在实体在指定时间之后未被修改才请求成功。
    Max-Forwards:限制信息通过代理和网关传送的时间。
    Pragma:用来包含实现特定的指令。
    Proxy-Authorization:连接到代理的授权证书。
    Range:只请求实体的一部分,指定范围。
    Referer:先前网页的地址,当前请求网页紧随其后,即来路。
    TE:客户端愿意接受的传输编码,并通知服务器接受接受尾加头信息。
    Upgrade:向服务器指定某种传输协议以便服务器进行转换(如果支持。
    User-AgentUser-Agent:的内容包含发出请求的用户信息。
    Via:通知中间网关或代理服务器地址,通信协议。
    Warning:关于消息实体的警告信息

  • 空行:最后一个请求头标之后是空行,发送回车符和退行,通知服务器以下不再有头标。

  • 请求数据:使用 POST 传送,最常使用的是 Content-Type 和 Content-Length 头标。

  • GET 对比 POST : https://www.runoob.com/tags/html-httpmethods.html

Response 返回数据包数据格式

Response 请求数据包数据格式

  • 一个响应由四个部分组成;状态行、响应头标、空行、响应数据。

1.状态行:协议版本、数字形式的状态代码和状态描述,个元素之间以空格分隔
2.响应头标:包含服务器类型、日期、长度、内容类型等
3.空行:响应头与响应体之间用空行隔开
4.响应数据:浏览器会将实体内容中的数据取出来,生成相应的页面

HTTP 响应码:

更多: https://www.runoob.com/http/http-status-codes.html

MIME 类型

MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的标准,用来表示文档、文件或字节流的性质和格式。
MIME 的组成结构非常简单,由类型与子类型两个字符串中间用 / 分隔而组成,不允许有空格。type 表示可以被分多个子类的独立类别,subtype 表示细分后的每个类型。
MIME类型对大小写不敏感,但是传统写法都是小写。
两种主要的 MIME 类型在默认类型中扮演了重要的角色:

text/plain 表示文本文件的默认值。
application/octet-stream 表示所有其他情况的默认值。

MIME 类型通用结构:

type/subtype

更多MIME对照表: https://www.runoob.com/http/mime-types.html

常见的 MIME 类型

超文本标记语言文本 .html、.html:text/html
普通文本 .txt: text/plain
RTF 文本 .rtf: application/rtf
GIF 图形 .gif: image/gif
JPEG 图形 .jpeg、.jpg: image/jpeg
au 声音文件 .au: audio/basic
MIDI 音乐文件 mid、.midi: audio/midi、audio/x-midi
RealAudio 音乐文件 .ra、.ram: audio/x-pn-realaudio
MPEG 文件 .mpg、.mpeg: video/mpeg
AVI 文件 .avi: video/x-msvideo
GZIP 文件 .gz: application/x-gzip
TAR 文件 .tar: application/x-tar

HTTP头中安全隐患

在PHP中通过会使用$_SERVER["HTTP_CLIENT_IP"]或者$_SERVER["HTTP_X_FORWARDED_FOR"]来获取IP。
因此,我们就可以通过修改http头中的' X-Forwarded-For: ' ' client-ip:'来进行攻击。
例如:
1、突破服务器访问限制ip
2、http头注入攻击等。