浏览器&网络请求
# 浏览器&网络请求
# Restful API
REST,即Representational State Transfer,意为表现层状态转化。
# 含义
Representational指的是Resources的Representation,我们访问资源时看到的是资源的表现层。比如文本文件既可以用HTML格式表现,也可以用TXT格式表现。发送和应答HTTP请求时header中的Accept和Content-Type字段指定了“表现层”。
State Transfer即状态转化,HTTP是无状态协议,那么客户端必须用某种手段使状态转化,而这种转化建立在表现层上。转化的手段只能是HTTP协议,它提供了多个请求方法,例如POST、GET、PUT、DELETE。
符合REST原则的互联网软件架构称为Restful架构,要求每个资源有一个URI、客户端与服务器间传递资源的某种表现层、客户端通过HTTP方法操作服务器资源,实现状态转化。
# 设计
RESTful风格的动词即HTTP协议中的动作,地址应只表示资源位置,如GET baidu.com
。
如果默认的动作不能满足需求,那么将真正的动作抽象成服务,比如transfer可以在URI中使用‘transaction’描述。
对于参数和多级服务,建议写成a=1&b=2的形式,只保留一级路径。例如/transcation?from=1&to=2&amount=50
。
服务器应返回一个JSON对象,如果发生错误,需要利用状态码告知,而非总是返回200。
# HTTP&HTTPS
HTTP是以ASCII码传输的,建立在TCP/IP协议上的应用层规范,HTTP请求包括请求行、请求头与请求主体。
<method> <request-URL> <version>
<headers>
<entity-body>
一个例子:
GET HTTP/1.1
Host: guohere.com
User-Agent: PostmanRuntime/7.15.2
Accept: */*
Cache-Control: no-cache
Accept-Encoding: gzip, deflate
Referer: http://guohere.com/
Connection: keep-alive
cache-control: no-cache
//GET请求请求主体为空
# Header
# Content-Type
该请求头属性指内容编码,常用的编码包括text/html
、text/plain
、text/css
、text/javascript
、image/jpeg
、image/png
、image/gif
等,这些都是网页加载时常见的资源类型。
但除此之外,还有一些AJAX常用的资源类型,如application/x-www-form-urlencoded
,multipart/form-data
,application/json
,application/xml
等,它们被用于客户端向服务器发起的请求中(上传文件或提交表单)。
# application/x-www-form-urlencoded
最常见的POST提交格式,是原生表单的默认提交格式。
entity的形式类似key1=value1&key2=value2,字符需经过url编码,如空格被转换为%20
。
# multipart/form-data
当form的enctype属性等于该值,表单才能上传文件。
POST http://www.example.com HTTP/1.1
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryrGKCBY7qhFd3TrwA
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="text"
title
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="file"; filename="chrome.png"
Content-Type: image/png
PNG ... content of chrome.png ...
------WebKitFormBoundaryrGKCBY7qhFd3TrwA--
首先生成了boundary用于分割字段,每段除了具体内容还有类型信息。
# application/json
有些服务端没有原生支持(比如php,但web框架肯定会支持),但最适合RESTful接口使用。json能够传递结构化的信息,又足够轻便。
entity就是标准的json格式。
# application/xml
不怎么使用的一种编码格式。XML-RPC最常见的实现是Wordpress的XML-RPC接口,不过不如json简单灵活。
POST http://www.example.com HTTP/1.1
Content-Type: text/xml
<?xml version="1.0"?>
<methodCall>
<methodName>examples.getStateName</methodName>
<params>
<param>
<value><i4>41</i4></value>
</param>
</params>
</methodCall>
# HTTP状态码
HTTP状态码分为1xx-5xx,其中1xx代表临时响应(在收到常规响应前的响应),2xx代表请求处理成功,3xx代表需要进一步操作来完成请求(通常用于重定向),4xx代表请求可能出错,5xx代表服务器发生了内部错误。
常见的状态码有500(服务器通用错误)、404(找不到页面)、301(永久跳转)、200(请求成功)、204(成功处理并返回空内容)、302(临时跳转)、304(请求的资源未修改,客户端使用缓存)、400(请求语法错误)、401(要求身份认证)、403(拒绝执行请求)、408(请求超时)、502(作为网关或代理的服务器请求失败)、503(超载或系统维护)
# 请求方法
GET(请求并返回)、POST(提交资源进行处理)、PUT(想服务器传送数据取代指定内容)、DELETE(请求删除资源)、HEAD(请求并只返回头)、TRACE(回显服务器收到的请求)
# HTTP2.0
# POST
POST常见的提交数据的方式有四种,在http请求头的Content-Type标记
# DNS
# TCP&UDP
#
# Fiddler
# CSRF、XSS
# 跨域
# CORS
# CORB
# Session&Cookie
# 缓存
# WebP
# LazyLoad
# 服务端渲染
# PWA
# Hybrid
# 参考
POST
https://imququ.com/post/four-ways-to-post-data-in-http.html