请考虑以下代码向客户端发送HTTP 201"创建"响应:
String url = "/app/things?id=42"; // example
response.setStatus(HttpServletResponse.SC_CREATED);
response.setContentType("text/plain");
response.setHeader("Location", url);
response.getWriter().print(url);
Run Code Online (Sandbox Code Playgroud)
它通知客户端创建了一个新的"东西",并且可以在URL上找到它/app/things?id=42.问题是这个URL是相对的.这对于JSP来说是完美的,可以写成如下:
<img src="<c:url value="/things?id=42" />" />
Run Code Online (Sandbox Code Playgroud)
哪个会产生以下HTML:
<img src="/app/things?id=42" />
Run Code Online (Sandbox Code Playgroud)
这是我们想要的网络应用程序.
但我不相信这是我们想要的201响应位置标题.HTTP规范声明:
14.30位置
Location response-header字段用于将收件人重定向到Request-URI以外的位置,以完成请求或标识新资源.对于201(已创建)响应,Location是请求创建的新资源的位置.对于3xx响应,位置应该应该指示服务器自动重定向到资源的首选URI.字段值由单个绝对URI组成.
Run Code Online (Sandbox Code Playgroud)Location = "Location" ":" absoluteURI一个例子是:
Run Code Online (Sandbox Code Playgroud)Location: http://www.w3.org/pub/WWW/People.html
我的问题是如何以适当的方式将servlet的相对URL转换为Location头的绝对URL.
我不相信使用:
request.getServerName() + ":" + request.getServerPort() + url;
Run Code Online (Sandbox Code Playgroud)
是正确的解决方案.应该有一个生成正确输出的标准方法(以便可以应用URL重写等).我不想创建一个hack.
我可以Referer在Web应用程序中依赖HTTP标头吗?我想检查用户是否来自特定的域/网页,如果他或她做了,那么相应地更改我的网站的布局.
我知道人们可以Referer在他们的浏览器中禁用.任何想法用户经常这样做?我可以依靠Referer99%的存在吗?
我想401 Unauthorized在某个地方发送AND重定向客户端.然而:
如果我这样做:
header('HTTP/1.1 401 Unauthorized');
header('Location: /');
Run Code Online (Sandbox Code Playgroud)
服务器会发送一个302 Found带有Location,所以不是401 Unauthorized.
如果我这样做:
header('Location: /');
header('HTTP/1.1 401 Unauthorized');
Run Code Online (Sandbox Code Playgroud)
浏览器接收a 401 Unauthorized和a Location,但不重定向.
(IE 9和Chrome 16的行为相同,所以我猜它是正确的)
也许我在滥用HTTP?我希望我的应用程序界面对所有客户端完全相同:文本浏览器,现代浏览器,API调用等.401 +响应文本将告诉API用户什么是什么.重定向对浏览器很有用.
有(好的)方式吗?
我想编写一个C程序来生成Get Request而不使用任何外部库.这可能只使用C库,使用套接字吗?我正在考虑制作一个http数据包(使用正确的格式)并将其发送到服务器.这是唯一可行的方式还是有更好的方法?
如何共享cookie跨源?更具体地说,如何将Set-Cookie标题与标题结合使用Access-Control-Allow-Origin?
这是我的情况的解释:
我正在尝试localhost:4000为托管在其上的Web应用程序中运行的API设置cookie localhost:3000.
我似乎在浏览器中收到了正确的响应标题,但不幸的是它们没有任何效果.这些是响应标头:
HTTP/1.1 200 OK Access-Control-Allow-Origin: http://localhost:3000 Vary: Origin, Accept-Encoding Set-Cookie: token=0d522ba17e130d6d19eb9c25b7ac58387b798639f81ffe75bd449afbc3cc715d6b038e426adeac3316f0511dc7fae3f7; Max-Age=86400; Domain=localhost:4000; Path=/; Expires=Tue, 19 Sep 2017 21:11:36 GMT; HttpOnly Content-Type: application/json; charset=utf-8 Content-Length: 180 ETag: W/"b4-VNrmF4xNeHGeLrGehNZTQNwAaUQ" Date: Mon, 18 Sep 2017 21:11:36 GMT Connection: keep-alive
此外,Response Cookies当我使用Chrome开发者工具的"网络"标签检查流量时,我可以看到cookie .但是,我看不到在"应用程序"选项卡下设置的cookie Storage/Cookies.我没有看到任何CORS错误,所以我假设我错过了其他的东西.
有什么建议?
我正在使用React-Redux应用程序中的请求模块/signin向服务器上的端点发出请求.对于服务器我使用快递.
快递服务器:
res.cookie('token', 'xxx-xxx-xxx', { maxAge: 86400000, httpOnly: true, domain: 'localhost:3000' })
在浏览器中请求:
request.post({ uri: '/signin', json: { userName: … 我才刚刚开始反应。
我的页面在本地主机上运行良好。
现在我正在尝试在 github 上托管我的页面。
我使用了“npm run deploy”并托管
这是我的 package.json
现在,当我尝试访问我的页面时,我遇到了错误,第一个警告最让我担心。
这是我的页面:Github 页面
这个“权限策略”是什么以及如何修复它?
HTTP规范声明:
10.4.2 401未经授权
该请求需要用户身份验证.响应必须包含WWW-Authenticate头字段(第14.47节),其中包含适用于所请求资源的质询.
如果我支持的唯一登录方案是OpenID(或CAS或OAuth令牌,等等),我应该在这个字段中添加什么?也就是说,如何指示客户端需要预先验证并创建会话,而不是尝试与每个请求一起发送凭据?
在您回答之前,"不要发送401;发送3xx重定向到OpenID登录页面",对于非HTML客户端呢?例如,Stack Overflow如何执行我的自定义软件可以与之交互的API?
我正在尝试访问受密码保护的网站.它没有使用基本身份验证(即使在firefox中弹出相同的用户/传递框),因为响应头是WWW-Authenticate: Negotiate.
我想通过发送正确的标头来自动化登录过程.
在基本的,你会使用类似的东西:
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Run Code Online (Sandbox Code Playgroud)
我会用什么来进行谈判?
我读了如果请求缺少必需参数,我应该使用什么HTTP状态响应代码?但它没有具体询问标题,似乎没有达成共识.
此问题的上下文假定验证成功.我目前偏爱400(虽然这感觉不对,因为这不是"格式错误的语法")或403.鉴于403的描述:
服务器理解请求,但拒绝履行请求.授权无效,请求不应重复.如果请求方法不是HEAD并且服务器希望公开为什么请求没有得到满足,那么它应该描述实体中拒绝的原因.
这对我来说最有意义.
有人可以赐教吗?谢谢.
http-status-codes http-headers http-status-code-403 http-status-code-400
基本上,同样的问题我要求默认的内容类型,但这次是Headers:Microsoft是否为标准的HTTP标题名称创建了一个充满常量的类,还是我必须自己编写?
http-headers ×10
http ×3
asp.net ×1
asp.net-mvc ×1
c ×1
cookies ×1
cors ×1
github-pages ×1
header ×1
hosting ×1
http-referer ×1
httpresponse ×1
java ×1
localhost ×1
networking ×1
openid ×1
reactjs ×1
servlets ×1
sockets ×1