我曾经通过php cURL从远程网站抓取数据。现在,我什至可以从除一页之外的所有其他页面中抓取数据。 php cURL的标题显示如下:
HTTP/1.1 200 OK Date: Tue, 24 Dec 2019 05:44:17 GMT Server: Apache Content-Length: 14 Content-Type: text/html; charset=UTF-8 X-XSS-Protection: 1;mode=block X-Content-Type-Options: nosniff Referrer-Policy: no-referrer-when-downgrade Strict-Transport-Security: max-age=31536000;includeSubDomains;preload X-Frame-Options: sameorigin
任何人都知道为什么会发生这种情况以及解决方案是什么?
答案 0 :(得分:0)
我也不是专家,但是当我对返回的标头的所有子组件进行简单的Google搜索时,便发现了这一点:
第1部分:class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
int output[m+n] = {0};
int i = 0;
int j = 0;
int k = 0;
if(m == 0) // nums1 is empty. Ex. nums1[0,0],m=0 and nums2[1,2],n=2
{
for(i = 0; i < n; i++)
{
nums1[i] = nums2[i];
}
return;
}
if(n == 0) // nums2 is empty. Ex. nums1[1,2],m=2 and nums2[],n=0
{
return;
}
for(k = 0; k < m+n; k++)
{
if(i>=m || j>=n) // Check if we've exhausted any of nums1 or nums2 list
break;
if(nums1[i] <= nums2[j]) // if nums1[i] <= nums2[j]
{
output[k] = nums1[i];
i++;
}
else{ // else, nums1[i] > nums2[j]
output[k] = nums2[j];
j++;
}
}
while(i<m){ // If some elements are left in nums1. Ex: nums1[4,0,0],m=1 and nums2[1,2],n=2
output[k] = nums1[i];
i++;
k++;
}
while(j<n){ // If some elements are left in nums2. Ex: nums1[1,2,0],m=2 and nums2[4],n=1
output[k] = nums2[j];
j++;
k++;
}
for(i = 0; i < m+n; i++) // Copy back to nums1
{
nums1[i] = output[i];
}
}
};
:此标头用于防止跨站点脚本攻击。 MDN documentation指出:
启用XSS过滤。如果检测到攻击,浏览器不会清除页面,而是阻止呈现页面。
第2部分:X-XSS-Protection: 1;mode=block
:此标头可防止基于MIME的攻击。 MDN documentation指出:
此标头是Microsoft在IE 8中引入的,它是网站管理员用来阻止正在发生的内容嗅探的一种方法,该方法可以将不可执行的MIME类型转换为可执行的MIME类型。从那以后,即使他们的MIME嗅探算法不太积极,其他浏览器也引入了它。
第3部分:X-Content-Type-Options: nosniff
:MDN documentation指出:
当协议安全级别保持不变(HTTP→HTTP,HTTPS→HTTPS)或提高(HTTP→HTTPS)但不发送时,URL的起源,路径和查询字符串将作为引荐来源发送安全目标(HTTPS→HTTP)。
第4部分:Referrer-Policy: no-referrer-when-downgrade
:此标头可防止中间人攻击。 MDN documentation指出:
HTTP严格传输安全标头通知浏览器,它永远不要使用HTTP加载网站,而应自动将所有使用HTTP访问该网站的尝试转换为HTTPS请求。
第5部分:Strict-Transport-Security: max-age=31536000;includeSubDomains;preload
:此标头用于防止点击劫持攻击。 MDN documentation指出:
X-Frame-Options HTTP响应标头可用于指示是否应允许浏览器以
X-Frame-Options: sameorigin
,<frame>
,<iframe>
或{ {1}}。网站可以通过确保其内容未嵌入其他网站来避免点击劫持攻击。
因此,请确保您没有发生上述任何错误(例如,加载页面的非https版本或嗅探MIME标头等),并且应该很好地加载页面的内容。