网站开发所需的http相关概念
Http Concepts: by Seven
摘要:这是go语言网站开发的第一篇文章,http相关知识总结,包括
- HTTP methods (POST, GET, DELETE, PUT, PATCH, OPTIONS)
- HTTP status code (2xx, 3xx, 4xx, 5xx)
- REST API. See https://en.wikipedia.org/wiki/Representational_state_transfer
- HTTP header
- Cookies
- POSTMAN
一,Http Methods:
- post: 创建子资源
- get: 获取资源
- delete: 删除资源
- put: 创建 更新资源
- patch: 部分更新(如:某一个前端功能只是向后端更新一个用户名,没必要更新整条该用户信息)
- options: 用于url验证,验证接口服务是否正常。
·
二,HTTP status code (2xx, 3xx, 4xx, 5xx)
- 2xx: 成功状态码
- 3xx: 重定向状态码
- 303: 重定向
- 4xx: 客户端错误状态码
- 400:服务器不理解请求的语法,常见:前端携带的参数有问题
- 403:服务器拒绝请求
- 404:未找到
- 405: 方法禁用,常见:服务器要求get,客户端表单发送post请求
- 5xx: 服务端错误状态码
- 500: 服务器内部错误
- 503:服务器目前无法使用
三,Restful API
1.简介
Representational state transfer, 简称REST,即 表现层状态转化
-
资源:Resources,
指的是网络上的某个数据,如,一个文件,一种服务等
-
表现层 Representational
资源的表现层,指的是资源的具体呈现形式,如HTML, JSON等
-
状态转换
指的是状态变化,通过http方法实现
get 获取资源
post 新建资源
put 更新资源
delete 删除资源
简单来说,客户端通过Http方法对服务器的资源进行操作,实现表现层的状态转化
2.设计原则
Restful是目前最流行的API设计规范,用于Web数据接口设计
Restful API设计原则:
-
尽量将API部署在一个专用的域名下,如: http://api.itany.com
-
API的版本应该在URL中体现,如:http://api.itany.com/v2
-
URL中不要使用动词,应使用资源名词,且使用名词的复数形式,如:
功能说明 请求类型 URL 获取用户列表 GET http://api,itany,com/v2/users 根据id获取用户 GET http://api.itany,com/v2/users/id 添加用户 POST http://api,itany.com/v2/users 根据id删除用户 DELETE http://api.itany.com/v2/users/id 修改用户 PUT http://api.itany.com/v2/users 注:简单来说,可以使用同一个URL,通过约定不同的HTTP方法来实施不同的业务
-
服务器响应时返回JSON对象,应包括HTTP状态码,消息,结果等,如:
{code:200,message:“success”,result:{id:1001, name:“tom”}}
-
最好在返回的结果中提供链接,指向其他的API方法,使得用户不用查文档,就能知道下一步该怎么做
-
3.用法
cloud-provider
- 构建Restful API服务
cloud-consumer
- 使用RestTemplate调用Rest服务
- RestTemplate是Spring提供的用于访问Rest服务的客户端,提供了访问远程Http服务的方法
四,HTTP Header
HTTP首部字段类型
- 通用首部字段:请求报文和响应报文两方都会使用的首部
- 请求首部字段:从客户端向服务器端发送请求报文时使用的首部
- 响应首部字段:从服务器端向客户端返回响应报文时使用的首部
- 实体首部字段:针对请求报文和响应报文实体部分使用的首部
常用的HTTP请求头
协议头 | 说明 | 实例 |
---|---|---|
accept | 可接受的响应内容类型(Content-Types )。 |
Accept: text/plain |
Accept-Charset | 可接受的字符集 | Accept-Charset: utf-8 |
Accept-Encoding | 可接受的响应内容的编码方式。 | Accept-Encoding: gzip, deflate |
Accept-Language | 可接受的响应内容语言列表。 | Accept-Language: en-US |
Accept-Datetime | 可接受的按照时间来表示的响应内容版本 | Accept-Datetime: Sat, 26 Dec 2015 17:30:00 GMT |
Cache-Control | 用来指定当前的请求/回复中的,是否使用缓存机制。 | Cache-Control: no-cache |
Connection | 客户端(浏览器)想要优先使用的连接类型 | Connection: keep-alive upgrade |
Cookie | 由之前服务器通过Set-Cookie (见下文)设置的一个HTTP协议Cookie |
Cookie: $Version=1; Skin=new; |
Content-Length | 以8进制表示的请求体的长度 | Content-Length: 348 |
Content-Type | 请求体的MIME类型 (用于POST和PUT请求中) | Content-Type: application/x-www-form-urlencoded |
From | 发起此请求的用户的邮件地址 | From: [email protected] |
常见的HTTP响应头
响应头 | 说明 | 实例 |
---|---|---|
Access-Control-Allow-Origin | 指定哪些网站可以跨域源资源共享
|
Access-Control-Allow-Origin: * |
Accept-Patch | 指定服务器所支持的文档补丁格式 | Accept-Patch: text/example;charset=utf-8 |
Accept-Ranges | 服务器所支持的内容范围 | Accept-Ranges: bytes |
Age | 响应对象在代理缓存中存在的时间,以秒为单位 | Age: 12 |
Allow | 对于特定资源的有效动作; | Allow: GET, HEAD |
Cache-Control | 通知从服务器到客户端内的所有缓存机制,表示它们是否可以缓存这个对象及缓存有效时间。其单位为秒 | Cache-Control: max-age=3600 |
Content-Encoding | 响应资源所使用的编码类型。 | Content-Encoding: gzip |
Content-Language | 响就内容所使用的语言 | Content-Language: zh-cn |
Content-Length | 响应消息体的长度,用8进制字节表示 | Content-Length: 348 |
Content-Location | 所返回的数据的一个候选位置 | Content-Location: /index.htm |
Content-MD5 | 响应内容的二进制 MD5 散列值,以 Base64 方式编码 | Content-MD5: IDK0iSsgSW50ZWd0DiJUi== |
五,Cookies (会话:session和cookie)
1. session:
- session是服务器维护用户状态的一种技术。
- session是保存在服务器端。
- 当客户端访问服务器时,服务器会创建一个session对象。该对象有一个唯一标识符 jsessionid。
- 当服务器返回响应时,会把该标识符交给浏览器保存。
- 当浏览器下次再访问时,会默认携带其保存的jsessionid。服务器根据其携带的jsessionid找到对应的
- session对象。
- 通过这种方式,可以实现维护用户状态的功能。
2. cookie
- cookie是客户端保存用户状态的一种技术。
将信息保存在客户端中(一般清空浏览器缓存会删除这些信息)。
当浏览器访问服务器,服务器处理完成后,会把jsessionid等数据返回给浏览器。
浏览器把这些数据保存在cookie当中。 - 当浏览器再次访问服务器时,浏览器会自动地携带cookie中的内容到服务器。服务器可以获取到这些信息。
通过此方式使得数据在客户端与服务器之间交换。
可以通过此方式维护用户的状态。
3. 区别
cookie | session |
---|---|
保存在客户端 | 保存在服务器端 |
只能保存字符串,字符集是ISO-8859-1 | 可以保存任意类型 |
cookie被禁用后会失效 | cookie被禁用后,可以通过url重写获得session |
安全性较低 | 安全性较高 |
cookie保存的数据大小有限制,一般4K左右 | 理论上无限制,只要服务器内存足够 |
分担服务器压力 | 增加服务器压力 |
六, POSTMAN
Postman是一款非常优秀的调试工具,可以用来模拟发送各类HTTP请求,进行接口测试。