http 常见的 header

get 和 post 的区别

get

  • GET 方法请求指定的资源。使用 GET 的请求应该只用于获取数据。

post

  • POST 方法发送数据给服务器. 请求主体的类型由 Content-Type 首部指定.
    • 一个 POST 请求通常是通过 HTML 表单发送, 并返回服务器的修改结果. 在这种情况下, content type 是通过在 <form> 元素中设置正确的 enctype 属性, 或是在 <input><button> 元素中设置 formenctype 属性来选择的;
    • 当 POST 请求是通过除 HTML 表单之外的方式发送时, 例如使用 XMLHttpRequest, 那么请求主体可以是任何类型;

区别

  • get只能获取数据,post可以发送数据,并返回服务器的修改结果

http2

随着 web 应用的发展,更多的数据通过 HTTP 传输,HTTP/1.1 链接需要请求以正确的顺序发送,,带来的成本和复杂性堪忧。HTTP/2 应运而生。

HTTP/2 在 HTTP/1.1 有几处基本的不同:

  • HTTP/2 是二进制协议而不是文本协议。不再可读,也不可无障碍的手动创建,改善的优化技术现在可被实施。
  • 这是一个复用协议。并行的请求能在同一个链接中处理,移除了 HTTP/1.x 中顺序和阻塞的约束。
  • 压缩了 headers。因为 headers 在一系列请求中常常是相似的,其移除了重复和传输重复数据的成本。
  • 其允许服务器在客户端缓存中填充数据,通过一个叫服务器推送的机制来提前请求。

https

HTTP的安全版本,即有相应的SSL证书。

常见的header

文件信息

  • Content-Tepy:
    • text/plain;普通文本
    • tex/html:html文本
    • application/x-javascript:js
    • application/x-www-form-urlencoded:默认形式表单发包类型
    • multipart/form-data:用在发送文件的post包中
    • application/json:通过json传输
    • application/xml:通过xml传输
  • Content-Length:用于指定请求或相应的内容长度
    • 如果存在Transfer-Encoding(chuncked)则在头信息中不能有Content-Type有也会被忽略
    • 如果是短连接则可以通过关闭连接来确定长度
    • Content-Length必须与传输内容长度相同,过长会导致超时,过短会直接截断

压缩

  • Accept-Encoding
  • Content-Encoding

代理缓存

  • Vary
    • Accept
    • Accept-Encoding
    • Accept-Language
    • Accept-Charset

缓存

  • Expires:过期时间
  • Cache-Control:缓存控制
    • max-age:指示在多少秒之内,缓存方不用向服务器发送这个文件的请求,直接使用缓存。在max-age时间之内,浏览器请求该文件的响应总是为200(from cache)
    • no-cache:强制缓存方必须每次都向服务器发送请求,由服务器决定缓存方保存的是否为最新的文件。如果为最新的,服务器就会返回304(Not Modified),缓存方直接使用缓存;如果不是最新返回200,并返回最新的文件。一般配合last-modified或Etag一起使用。
    • no-store:强制缓存方永远不缓存该文件,每次都是向服务器请求最新的文件
    • public:表示任何缓存方都可缓存该响应
    • private:只会缓存给该用户不会共享缓存
  • Etag/If-None-Match
    • 缓存方第一次请求时,服务器返回的响应头中会包含一个Etag的hash
    • 之后每次缓存方向服务器请求时都会包含一个If-None-Match头信息,内容为服务器返回的Etag,然后服务器对这个头信息进行判断,如果为最新的,服务器就会返回304(Not Modified),缓存方直接使用缓存;如果不是最新返回200,并返回最新的文件,更新Etag字段。
  • Last-Modified/If-Modified-Since:
    • 缓存方第一次请求时,服务器返回的响应头中会包含一个Last-Modified头信息,内容为该文件的最后更新时间
    • 之后每次缓存方向服务器请求时都会包含一个If-Modified-Since头信息,内容为服务器返回的Last-Modified,然后服务器对这个头信息进行判断,如果为最新的,服务器就会返回304(Not Modified),缓存方直接使用缓存;如果不是最新返回200,并返回最新的文件,更新Last-Modified字段。

post实例

request:

POST bilibili.com HTTP/1.1
accept:*/*
accept-encoding:gzip, deflate, br
accept-language: zh-CN,zh;q=0.9

response:

cache-control: max-age=0, no-cache, no-store, must-revalidate
content-language: zh-CN
content-length: 754
content-type: application/json
date:Fri, 29 Feb 2020 00:00:00 GMT
expires:Fri, 29 Feb 2020 00:00:00 GMT
status: 200
vary: Cookie