关于HTTP,我们需要知道的事儿

1.HTTP报文

报文首部与报文主体之间存在空行。

(1)HTTP请求报文
HTTP请求报文 = 报文首部 + 报文主体(请求参数)

报文首部 = 请求行 + 通用首部字段 + 请求首部字段 + 实体首部字段 + 其它
请求行 = 请求方法 + HTTP版本 + URI
(2)HTTP响应报文
HTTP响应报文 = 报文首部 + 报文主体(返回内容)
报文首部 =状态行 + 通用首部字段 +响应首部字段 + 实体首部字段 + 其它
状态行 = HTTP版本 + 状态码

2.浏览器缓存

(1) 强制缓存
Expires 是 HTTP 1.0 的字段,而 Cache-Control 是 HTTP 1.1 的字段,当 Expires 与 Cache-Control 同时存在时,Cache-Control 的优先级要高于 Expires。 Cache-Control是相对时间,单位为秒;Expires为绝对时间。

(2) 协商缓存
根据Etag(哈希值)判断是否缓存;服务端下发给客户端 last-modified,客户端获取后,下次请求带上 last-modified-since。

补充说明: Expires要求客户端和服务端的时钟严格同步。HTTP1.1引入Cache-Control来克服Expires头的限制。如果max-age和Expires同时出现,则max-age有更高的优先级。

Front-End-Https 微软应用程序和负载均衡器使用的非标准header字段 Front-End-Https: on。

对应关系:
etag —— if-none-match
last-modified —— if-modified-since

参考链接——https://github.com/rccoder/blog/issues/12

3.常用标准响应头字段

防止跨站请求伪造

X-Csrf-Token,X-CSRFToken,X-XSRF-TOKEN 
X-Csrf-Token: i8XNjC4b8KVok4uw5RftR38Wgp2BFwql

跨域

  Access-Control-Allow-Origin 指定哪些站点可以参与跨站资源共享

  Access-Control-Allow-Origin: *

Set-Cookie 设置HTTP Cookie
Set-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1

Status 设置HTTP响应状态
Status: 200 OK

4.常用非标准响应头字段

X-XSS-Protection 过滤跨站脚本

X-XSS-Protection: 1; mode=block

X-UA-Compatible 推荐首选的渲染引擎来展示内容,通常向后兼容,也用于激活IE中内嵌chrome框架插件

<meta http-equiv="X-UA-Compatible" content="chrome=1" />

X-UA-Compatible: IE=EmulateIE7
X-UA-Compatible: IE=edge
X-UA-Compatible: Chrome=1

5.常用标准请求头字段

(1)form-data 和 request playload的区别
在这里插入图片描述

参考链接:https://github.com/kaola-fed/blog/issues/105

6.状态码

(1)重定向

301表示旧地址A的资源已经被永久地移除了(这个资源不可访问了),搜索引擎在抓取新内容的同时也将旧的网址换为重定向之后的网址。
302表示旧地址A的资源还在(仍然可以访问),这个重定向只是临时地从旧地址A跳转到地址B,搜索引擎会抓取新的内容而保存旧的网址。 SEO 302好于301。

(2)网关
网关错误:502 扮演网关或者代理角色的服务器没有接收到来自上游服务器的正确响应。
网关超时:504 扮演网关或者代理角色的服务器没有及时响应。
(3)代理
500 Internal Privoxy Error
Privoxy encountered an error while processing your request:

Could not load template file no-server-data or one of its included components.

Please contact your proxy administrator.

If you are the proxy administrator, please put the required file(s)in the (confdir)/templates directory. The location of the (confdir) directory is specified in the main Privoxy config file. (It’s typically the Privoxy install directory).

请求的服务无法响应代理服务器的请求。

Status Code: 206 Partial Content

MacBook Air的谷歌浏览器报出的错误,现象是网站图片只能够加载部分,以致于图片无法显示。后面排查是nginx错误:2019/02/15 20:27:29 [crit] 4939#0: *169 open() "/usr/local/nginx/tmp/proxy//1/03/0000000031" failed (13: Permission denied) while readin......
解决:修改nginx的配置文件nginx.conf,在文件首行加上:user root;
**或者授权对应文件夹权限。**比如 chmod -R 764 /usr/local/nginx/fastcgi_temp/

补充说明:该nginx问题,在不同操作系统的不同浏览器错误提示信息不一样。比如在MacBook Air的谷歌浏览器是:Status Code: 206 Partial Content。在window 10的谷歌浏览器是:Failed to load resource: net::ERR_CONTENT_LENGTH_MISMATCH 200 ok ;在MacBook Air的Safari浏览器是:[Error] Failed to load resource: 网络连接已中断。 (1497411317998.png, line 0) 请求头是显示状态是200 OK。
Windows IE 11 显示信息:在这里插入图片描述
IE的图片能够部分显示,剩余部分是黑色:
剩余部分是黑色
请求头和响应头:在这里插入图片描述
macOS和Windows下的火狐浏览器图片部分显示,剩余部分呈白色:
在这里插入图片描述
响应头:在这里插入图片描述

7.跨域

(1)CORS

8.错误信息

net::ERR_CONTENT_LENGTH_MISMATCH 200 ok
1.查看请求头content-length长度与实际文件大小是否一致
2.代理服务器nginx权限问题等
3.服务端代码是否符合http规范

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
非常抱歉,之前的回答有误。针对 HTTP 请求报文体的加密,我们可以使用 HTTPS 协议来实现。HTTPS 协议实际上是在传输层(Transport Layer)使用 SSL/TLS 加密技术来保护数据传输的安全性。 在使用 HTTPS 协议时,我们需要在服务器上配置 SSL/TLS 证书,客户端通过 HTTPS 协议与服务器进行通信时,会先进行 SSL/TLS 握手过程,建立安全通道,之后所有的数据传输都会使用 SSL/TLS 加密。 下面是一个使用 Java 发送 HTTPS 请求的示例代码: ```java import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URL; import javax.net.ssl.HttpsURLConnection; public class HttpsDemo { public static void main(String[] args) throws Exception { // 发送 HTTPS 请求 URL url = new URL("https://www.example.com/api"); HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(); conn.setRequestMethod("POST"); conn.setDoOutput(true); // 构造请求报文 String request = "Hello, World! This is a HTTPS request."; System.out.println("Request: " + request); // 将请求报文体写入 HTTPS 请求中 conn.getOutputStream().write(request.getBytes()); // 发送 HTTPS 请求并读取响应 if (conn.getResponseCode() == HttpsURLConnection.HTTP_OK) { BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); StringBuilder response = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { response.append(line); } reader.close(); System.out.println("Response: " + response.toString()); } else { System.out.println("HTTPS error: " + conn.getResponseCode()); } conn.disconnect(); } } ``` 在实际应用中,我们需要注意 SSL/TLS 证书的安全性和管理,以及对 HTTPS 协议的配置和调试等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值